From 5b423b39c533ca7acc681ff9a3f113b6cee07444 Mon Sep 17 00:00:00 2001 From: Nicholas Sherlock Date: Mon, 16 Feb 2015 01:44:20 +1300 Subject: [PATCH] Update to latest SdFat and SerialPort libraries --- .cproject | 91 + Makefile | 7 + Readme.md | 7 +- libs/SdFat-master/.gitattributes | 22 + libs/SdFat-master/.gitignore | 215 + .../AnalogBinLoggerExtras/ADC_ENOB.PNG | Bin 0 -> 89023 bytes .../ADCdocs/ATmegaADCAccuracy.pdf | Bin 0 -> 339269 bytes .../ADCdocs/ExcelFFT.pdf | Bin 0 -> 126931 bytes .../AnalogBinLoggerExtras/AdcErrorStudy.txt | 98 + .../AnalogBinLoggerExtras/DATA.png | Bin 0 -> 50962 bytes .../AnalogBinLoggerExtras/FFT.png | Bin 0 -> 46538 bytes .../AnalogBinLoggerExtras/RateTable.txt | 21 + .../bintocsv/AnalogBinLogger.h | 39 + .../bintocsv/bintocsv.cpp | 82 + .../bintocsv/bintocsv.exe | Bin 0 -> 8192 bytes .../AnalogBinLoggerExtras/readme.txt | 96 + libs/SdFat-master/ArduinoDue.txt | 62 + .../MultipleCards.txt | 0 .../QuickStart.txt | 4 +- libs/SdFat-master/SPI_Transactions.txt | 23 + .../SdFat.html | 0 .../SdFat/ArduinoStream.h | 45 +- libs/SdFat-master/SdFat/MinimumSerial.cpp | 71 + .../SdFat/MinimumSerial.h} | 37 +- .../SdFat/Sd2Card.cpp | 551 +-- .../SdFat/Sd2Card.h | 147 +- .../SdFat/SdBaseFile.cpp | 1381 +++--- libs/SdFat-master/SdFat/SdBaseFile.h | 289 ++ libs/SdFat-master/SdFat/SdBaseFilePrint.cpp | 351 ++ .../SdFat/SdFat.cpp | 223 +- .../SdFat/SdFat.h | 67 +- libs/SdFat-master/SdFat/SdFatConfig.h | 205 + libs/SdFat-master/SdFat/SdFatErrorPrint.cpp | 145 + .../SdFat/SdFatUtil.cpp | 29 +- .../SdFat/SdFatUtil.h | 10 +- libs/SdFat-master/SdFat/SdFatmainpage.h | 264 ++ .../SdFat/SdFile.cpp | 28 +- libs/SdFat-master/SdFat/SdFile.h | 257 ++ .../SdFat/SdInfo.h | 40 +- libs/SdFat-master/SdFat/SdSpi.h | 173 + libs/SdFat-master/SdFat/SdSpiAVR.cpp | 86 + libs/SdFat-master/SdFat/SdSpiArduino.cpp | 70 + libs/SdFat-master/SdFat/SdSpiSAM3X.cpp | 216 + libs/SdFat-master/SdFat/SdSpiSoft.cpp | 61 + libs/SdFat-master/SdFat/SdSpiTeensy3.cpp | 223 + .../SdFat/SdStream.cpp | 14 +- .../SdFat/SdStream.h | 32 +- libs/SdFat-master/SdFat/SdVolume.cpp | 595 +++ .../SdFat/SdVolume.h | 179 +- libs/SdFat-master/SdFat/StdioStream.cpp | 531 +++ libs/SdFat-master/SdFat/StdioStream.h | 656 +++ .../SdFat/bufstream.h | 73 +- .../#attic/AnalogLogger/AnalogLogger.ino} | 20 +- .../#attic/HelloWorld/HelloWorld.ino} | 4 + .../examples/#attic/MiniSerial/MiniSerial.ino | 18 + .../PrintBenchmarkSD/PrintBenchmarkSD.ino | 113 + .../examples/#attic/SD_Size/SD_Size.ino} | 3 + .../examples/#attic/SdFatSize/SdFatSize.ino} | 7 +- .../examples/#attic/TestMkdir/TestMkdir.ino} | 8 +- .../examples/#attic/TestRmdir/TestRmdir.ino} | 8 +- .../SdFat/examples/#attic/append/append.ino} | 10 +- .../examples/#attic/average/average.ino} | 10 +- .../SdFat/examples/#attic/benchSD/benchSD.ino | 133 + .../examples/#attic/bufstream/bufstream.ino} | 4 +- .../examples/#attic/eventlog/eventlog.ino} | 10 +- .../#attic/fgetsRewrite/fgetsRewrite.ino | 91 + .../examples/#attic/readlog/readlog.ino} | 11 +- .../SdFat/examples/#attic/readme.txt | 30 + .../AnalogBinLogger/AnalogBinLogger.h | 39 + .../AnalogBinLogger/AnalogBinLogger.ino | 787 ++++ .../LowLatencyLogger/LowLatencyLogger.ino | 529 +++ .../examples/LowLatencyLogger/UserDataType.h | 8 + .../SdFat/examples/OpenNext/OpenNext.ino} | 29 +- .../PrintBenchmark/PrintBenchmark.ino | 140 + .../SdFat/examples/QuickStart/QuickStart.ino} | 47 +- .../SdFat/examples/RawWrite/RawWrite.ino} | 170 +- .../ReadWriteSdFat/ReadWriteSdFat.ino} | 10 +- .../examples/SdFormatter/SdFormatter.ino} | 14 +- .../SdFat/examples/SdInfo/SdInfo.ino} | 60 +- .../SdFat/examples/StdioBench/StdioBench.ino | 200 + .../StreamParseInt/StreamParseInt.ino | 34 + .../SdFat/examples/StressTest/StressTest.ino | 75 + .../SdFat/examples/Timestamp/Timestamp.ino} | 110 +- .../SdFat/examples/TwoCards/TwoCards.ino} | 9 +- .../SdFat/examples/bench/bench.ino | 173 + .../SdFat/examples/cin_cout/cin_cout.ino} | 9 +- .../SdFat/examples/dataLogger/dataLogger.ino | 138 + .../directoryFunctions/directoryFunctions.ino | 108 + .../SdFat/examples/fgets/fgets.ino} | 16 +- .../SdFat/examples/formatting/formatting.ino} | 5 +- .../SdFat/examples/getline/getline.ino} | 11 +- .../SdFat/examples/readCSV/readCSV.ino} | 48 +- .../SdFat/examples/rename/rename.ino} | 9 +- .../SdFat/ios.h | 71 +- .../SdFat/iostream.h | 2 +- .../SdFat/istream.cpp | 65 +- .../SdFat/istream.h | 37 +- .../SdFat/ostream.cpp | 22 +- .../SdFat/ostream.h | 55 +- libs/SdFat-master/SdFat/utility/DigitalPin.h | 654 +++ .../SdFat/utility/FatApiConstants.h | 65 + .../SdFat/utility/FatStructs.h} | 112 +- libs/SdFat-master/SdFat/utility/FmtNumber.cpp | 405 ++ libs/SdFat-master/SdFat/utility/FmtNumber.h | 30 + libs/SdFat-master/SdFat/utility/SoftSPI.h | 162 + .../SdFatTestSuite/SdFatTestSuite.cpp | 19 +- .../SdFatTestSuite/SdFatTestSuite.h | 15 +- .../examples/ATS_SD_File/ATS_SD_File.ino} | 6 +- .../examples/ATS_SD_Files/ATS_SD_Files.ino} | 6 +- .../examples/ATS_SD_Seek/ATS_SD_Seek.ino} | 6 +- .../examples/fstreamTest/fstreamTest.ino} | 6 +- .../examples/istreamTest/istreamTest.ino} | 107 +- .../examples/ostreamTest/ostreamTest.ino} | 22 +- .../SdLevel.png | Bin libs/SdFat-master/SoftwareSPI.txt | 49 + .../WorkingDirectory.txt | 0 .../changes.txt | 144 + .../SdFat-master/html/_arduino_stream_8h.html | 92 + .../html/_arduino_stream_8h__dep__incl.png | Bin 0 -> 6207 bytes .../html/_arduino_stream_8h__incl.png | Bin 0 -> 38254 bytes libs/SdFat-master/html/_sd2_card_8h.html | 562 +++ .../html/_sd2_card_8h__dep__incl.png | Bin 0 -> 43231 bytes libs/SdFat-master/html/_sd2_card_8h__incl.png | Bin 0 -> 10747 bytes libs/SdFat-master/html/_sd_base_file_8h.html | 282 ++ .../html/_sd_base_file_8h__dep__incl.png | Bin 0 -> 39915 bytes .../html/_sd_base_file_8h__incl.png | Bin 0 -> 29470 bytes libs/SdFat-master/html/_sd_fat_8h.html | 128 + .../html/_sd_fat_8h__dep__incl.png | Bin 0 -> 4856 bytes libs/SdFat-master/html/_sd_fat_8h__incl.png | Bin 0 -> 69380 bytes libs/SdFat-master/html/_sd_fat_config_8h.html | 437 ++ .../html/_sd_fat_config_8h__dep__incl.png | Bin 0 -> 56878 bytes .../html/_sd_fat_config_8h__incl.png | Bin 0 -> 1641 bytes libs/SdFat-master/html/_sd_fat_util_8h.html | 132 + .../html/_sd_fat_util_8h__incl.png | Bin 0 -> 70898 bytes libs/SdFat-master/html/_sd_file_8h.html | 128 + .../html/_sd_file_8h__dep__incl.png | Bin 0 -> 6144 bytes libs/SdFat-master/html/_sd_file_8h__incl.png | Bin 0 -> 31637 bytes libs/SdFat-master/html/_sd_spi_8h.html | 130 + .../html/_sd_spi_8h__dep__incl.png | Bin 0 -> 44233 bytes libs/SdFat-master/html/_sd_spi_8h__incl.png | Bin 0 -> 4406 bytes libs/SdFat-master/html/_sd_stream_8h.html | 99 + .../html/_sd_stream_8h__dep__incl.png | Bin 0 -> 6191 bytes .../SdFat-master/html/_sd_stream_8h__incl.png | Bin 0 -> 40473 bytes libs/SdFat-master/html/_sd_volume_8h.html | 94 + .../html/_sd_volume_8h__dep__incl.png | Bin 0 -> 41657 bytes .../SdFat-master/html/_sd_volume_8h__incl.png | Bin 0 -> 17184 bytes libs/SdFat-master/html/_stdio_stream_8h.html | 208 + .../html/_stdio_stream_8h__dep__incl.png | Bin 0 -> 3890 bytes .../html/_stdio_stream_8h__incl.png | Bin 0 -> 70453 bytes libs/SdFat-master/html/annotated.html | 89 + libs/SdFat-master/html/bc_s.png | Bin 0 -> 676 bytes libs/SdFat-master/html/bdwn.png | Bin 0 -> 147 bytes libs/SdFat-master/html/bufstream_8h.html | 92 + .../html/bufstream_8h__dep__incl.png | Bin 0 -> 7573 bytes libs/SdFat-master/html/bufstream_8h__incl.png | Bin 0 -> 37650 bytes .../html/class_arduino_in_stream-members.html | 155 + .../html/class_arduino_in_stream.html | 2664 +++++++++++ .../class_arduino_in_stream__coll__graph.png | Bin 0 -> 3427 bytes ...lass_arduino_in_stream__inherit__graph.png | Bin 0 -> 3427 bytes .../class_arduino_out_stream-members.html | 144 + .../html/class_arduino_out_stream.html | 2312 ++++++++++ .../class_arduino_out_stream__coll__graph.png | Bin 0 -> 2738 bytes ...ass_arduino_out_stream__inherit__graph.png | Bin 0 -> 2738 bytes .../SdFat-master/html/class_file-members.html | 141 + libs/SdFat-master/html/class_file.html | 2906 ++++++++++++ .../html/class_file__coll__graph.png | Bin 0 -> 2981 bytes .../html/class_file__inherit__graph.png | Bin 0 -> 2981 bytes .../html/class_minimum_serial-members.html | 63 + .../html/class_minimum_serial.html | 158 + .../class_minimum_serial__coll__graph.png | Bin 0 -> 1191 bytes .../class_minimum_serial__inherit__graph.png | Bin 0 -> 1191 bytes .../html/class_sd2_card-members.html | 83 + libs/SdFat-master/html/class_sd2_card.html | 739 +++ .../html/class_sd_base_file-members.html | 131 + .../SdFat-master/html/class_sd_base_file.html | 2313 ++++++++++ .../class_sd_base_file__inherit__graph.png | Bin 0 -> 9364 bytes .../html/class_sd_fat-members.html | 93 + libs/SdFat-master/html/class_sd_fat.html | 1005 +++++ .../html/class_sd_file-members.html | 138 + libs/SdFat-master/html/class_sd_file.html | 2784 ++++++++++++ .../html/class_sd_file__coll__graph.png | Bin 0 -> 2963 bytes .../html/class_sd_file__inherit__graph.png | Bin 0 -> 2963 bytes .../html/class_sd_spi-members.html | 66 + libs/SdFat-master/html/class_sd_spi.html | 235 + .../html/class_sd_stream_base-members.html | 187 + .../html/class_sd_stream_base.html | 3947 +++++++++++++++++ .../class_sd_stream_base__coll__graph.png | Bin 0 -> 3570 bytes .../class_sd_stream_base__inherit__graph.png | Bin 0 -> 7100 bytes .../html/class_sd_volume-members.html | 78 + libs/SdFat-master/html/class_sd_volume.html | 557 +++ .../html/class_stdio_stream-members.html | 172 + .../SdFat-master/html/class_stdio_stream.html | 1732 ++++++++ .../html/class_stdio_stream__coll__graph.png | Bin 0 -> 1268 bytes .../class_stdio_stream__inherit__graph.png | Bin 0 -> 1268 bytes libs/SdFat-master/html/classes.html | 83 + .../html/classfstream-members.html | 247 ++ libs/SdFat-master/html/classfstream.html | 3593 +++++++++++++++ .../html/classfstream__coll__graph.png | Bin 0 -> 10401 bytes .../html/classfstream__inherit__graph.png | Bin 0 -> 10401 bytes .../html/classibufstream-members.html | 151 + libs/SdFat-master/html/classibufstream.html | 2569 +++++++++++ .../html/classibufstream__coll__graph.png | Bin 0 -> 2488 bytes .../html/classibufstream__inherit__graph.png | Bin 0 -> 3430 bytes .../html/classifstream-members.html | 221 + libs/SdFat-master/html/classifstream.html | 2762 ++++++++++++ .../html/classifstream__coll__graph.png | Bin 0 -> 6088 bytes .../html/classifstream__inherit__graph.png | Bin 0 -> 6088 bytes libs/SdFat-master/html/classios-members.html | 117 + libs/SdFat-master/html/classios.html | 1480 ++++++ .../html/classios__base-members.html | 107 + libs/SdFat-master/html/classios__base.html | 1140 +++++ .../html/classios__base__inherit__graph.png | Bin 0 -> 19273 bytes .../html/classios__coll__graph.png | Bin 0 -> 1041 bytes .../html/classios__inherit__graph.png | Bin 0 -> 19110 bytes .../html/classiostream-members.html | 174 + libs/SdFat-master/html/classiostream.html | 3303 ++++++++++++++ .../html/classiostream__coll__graph.png | Bin 0 -> 5818 bytes .../html/classiostream__inherit__graph.png | Bin 0 -> 6573 bytes .../html/classistream-members.html | 148 + libs/SdFat-master/html/classistream.html | 2423 ++++++++++ .../html/classistream__coll__graph.png | Bin 0 -> 1709 bytes .../html/classistream__inherit__graph.png | Bin 0 -> 6723 bytes .../html/classobufstream-members.html | 148 + libs/SdFat-master/html/classobufstream.html | 2443 ++++++++++ .../html/classobufstream__coll__graph.png | Bin 0 -> 2520 bytes .../html/classobufstream__inherit__graph.png | Bin 0 -> 2520 bytes .../html/classofstream-members.html | 216 + libs/SdFat-master/html/classofstream.html | 2561 +++++++++++ .../html/classofstream__coll__graph.png | Bin 0 -> 6799 bytes .../html/classofstream__inherit__graph.png | Bin 0 -> 6799 bytes .../html/classostream-members.html | 143 + libs/SdFat-master/html/classostream.html | 2279 ++++++++++ .../html/classostream__coll__graph.png | Bin 0 -> 1712 bytes .../html/classostream__inherit__graph.png | Bin 0 -> 7911 bytes libs/SdFat-master/html/closed.png | Bin 0 -> 132 bytes .../dir_1281b15c327061056ab3b326e90c50cf.html | 153 + ...r_1281b15c327061056ab3b326e90c50cf_dep.png | Bin 0 -> 905 bytes .../dir_481cc946b8a81b8d9363a4aad6201160.html | 67 + ...r_481cc946b8a81b8d9363a4aad6201160_dep.png | Bin 0 -> 1322 bytes .../dir_a991eec27578c865874ede3d8ec657c2.html | 67 + ...r_a991eec27578c865874ede3d8ec657c2_dep.png | Bin 0 -> 896 bytes libs/SdFat-master/html/doxygen.css | 1440 ++++++ libs/SdFat-master/html/doxygen.png | Bin 0 -> 3779 bytes libs/SdFat-master/html/dynsections.js | 97 + libs/SdFat-master/html/files.html | 79 + libs/SdFat-master/html/ftv2blank.png | Bin 0 -> 86 bytes libs/SdFat-master/html/ftv2doc.png | Bin 0 -> 746 bytes libs/SdFat-master/html/ftv2folderclosed.png | Bin 0 -> 616 bytes libs/SdFat-master/html/ftv2folderopen.png | Bin 0 -> 597 bytes libs/SdFat-master/html/ftv2lastnode.png | Bin 0 -> 86 bytes libs/SdFat-master/html/ftv2link.png | Bin 0 -> 746 bytes libs/SdFat-master/html/ftv2mlastnode.png | Bin 0 -> 246 bytes libs/SdFat-master/html/ftv2mnode.png | Bin 0 -> 246 bytes libs/SdFat-master/html/ftv2node.png | Bin 0 -> 86 bytes libs/SdFat-master/html/ftv2plastnode.png | Bin 0 -> 229 bytes libs/SdFat-master/html/ftv2pnode.png | Bin 0 -> 229 bytes libs/SdFat-master/html/ftv2splitbar.png | Bin 0 -> 314 bytes libs/SdFat-master/html/ftv2vertline.png | Bin 0 -> 86 bytes .../html/functions.html | 74 +- libs/SdFat-master/html/functions_b.html | 124 + .../html/functions_c.html} | 96 +- .../html/functions_d.html} | 73 +- .../html/functions_e.html} | 80 +- .../html/functions_enum.html | 27 +- .../html/functions_eval.html | 27 +- .../html/functions_f.html} | 153 +- libs/SdFat-master/html/functions_func.html | 101 + libs/SdFat-master/html/functions_func_b.html | 108 + .../html/functions_func_c.html} | 78 +- .../html/functions_func_d.html} | 62 +- .../html/functions_func_e.html} | 62 +- libs/SdFat-master/html/functions_func_f.html | 171 + libs/SdFat-master/html/functions_func_g.html | 116 + .../html/functions_func_i.html} | 83 +- libs/SdFat-master/html/functions_func_l.html | 97 + .../html/functions_func_m.html} | 62 +- libs/SdFat-master/html/functions_func_n.html | 93 + .../html/functions_func_o.html} | 78 +- libs/SdFat-master/html/functions_func_p.html | 151 + .../html/functions_func_r.html} | 85 +- .../html/functions_func_s.html} | 84 +- .../html/functions_func_t.html} | 66 +- libs/SdFat-master/html/functions_func_u.html | 96 + .../html/functions_func_v.html} | 62 +- .../html/functions_func_w.html} | 71 +- .../html/functions_g.html} | 76 +- libs/SdFat-master/html/functions_h.html | 94 + .../html/functions_i.html} | 80 +- libs/SdFat-master/html/functions_l.html | 101 + .../html/functions_m.html} | 76 +- libs/SdFat-master/html/functions_n.html | 94 + .../html/functions_o.html} | 85 +- libs/SdFat-master/html/functions_p.html | 162 + .../html/functions_r.html} | 110 +- .../html/functions_s.html} | 106 +- libs/SdFat-master/html/functions_t.html | 111 + .../html/functions_type.html | 27 +- .../html/functions_u.html} | 72 +- .../html/functions_v.html} | 74 +- libs/SdFat-master/html/functions_vars.html | 274 ++ .../html/functions_w.html} | 76 +- .../html/globals.html | 340 +- libs/SdFat-master/html/globals_defs.html | 224 + .../html/globals_func.html | 135 +- libs/SdFat-master/html/globals_vars.html | 214 + libs/SdFat-master/html/graph_legend.html | 113 + libs/SdFat-master/html/graph_legend.png | Bin 0 -> 12430 bytes libs/SdFat-master/html/hierarchy.html | 100 + libs/SdFat-master/html/index.html | 143 + libs/SdFat-master/html/inherit_graph_0.png | Bin 0 -> 377 bytes libs/SdFat-master/html/inherit_graph_1.png | Bin 0 -> 402 bytes libs/SdFat-master/html/inherit_graph_10.png | Bin 0 -> 323 bytes libs/SdFat-master/html/inherit_graph_2.png | Bin 0 -> 29094 bytes libs/SdFat-master/html/inherit_graph_3.png | Bin 0 -> 324 bytes libs/SdFat-master/html/inherit_graph_4.png | Bin 0 -> 410 bytes libs/SdFat-master/html/inherit_graph_5.png | Bin 0 -> 366 bytes libs/SdFat-master/html/inherit_graph_6.png | Bin 0 -> 364 bytes libs/SdFat-master/html/inherit_graph_7.png | Bin 0 -> 407 bytes libs/SdFat-master/html/inherit_graph_8.png | Bin 0 -> 332 bytes libs/SdFat-master/html/inherit_graph_9.png | Bin 0 -> 419 bytes libs/SdFat-master/html/inherits.html | 105 + libs/SdFat-master/html/ios_8h.html | 691 +++ libs/SdFat-master/html/ios_8h__dep__incl.png | Bin 0 -> 21640 bytes libs/SdFat-master/html/ios_8h__incl.png | Bin 0 -> 31119 bytes libs/SdFat-master/html/iostream_8h.html | 467 ++ .../html/iostream_8h__dep__incl.png | Bin 0 -> 12929 bytes libs/SdFat-master/html/iostream_8h__incl.png | Bin 0 -> 36115 bytes libs/SdFat-master/html/istream_8h.html | 89 + .../html/istream_8h__dep__incl.png | Bin 0 -> 14536 bytes libs/SdFat-master/html/istream_8h__incl.png | Bin 0 -> 31706 bytes libs/SdFat-master/html/jquery.js | 31 + libs/SdFat-master/html/nav_f.png | Bin 0 -> 153 bytes libs/SdFat-master/html/nav_g.png | Bin 0 -> 95 bytes libs/SdFat-master/html/nav_h.png | Bin 0 -> 98 bytes libs/SdFat-master/html/open.png | Bin 0 -> 123 bytes libs/SdFat-master/html/ostream_8h.html | 116 + .../html/ostream_8h__dep__incl.png | Bin 0 -> 14536 bytes libs/SdFat-master/html/ostream_8h__incl.png | Bin 0 -> 31704 bytes .../html/struct_fat_pos__t-members.html | 63 + libs/SdFat-master/html/struct_fat_pos__t.html | 105 + libs/SdFat-master/html/structpgm-members.html | 63 + libs/SdFat-master/html/structpgm.html | 159 + .../html/structsetfill-members.html | 62 + libs/SdFat-master/html/structsetfill.html | 128 + .../html/structsetprecision-members.html | 62 + .../SdFat-master/html/structsetprecision.html | 127 + .../SdFat-master/html/structsetw-members.html | 62 + libs/SdFat-master/html/structsetw.html | 127 + libs/SdFat-master/html/sync_off.png | Bin 0 -> 853 bytes libs/SdFat-master/html/sync_on.png | Bin 0 -> 845 bytes libs/SdFat-master/html/tab_a.png | Bin 0 -> 142 bytes libs/SdFat-master/html/tab_b.png | Bin 0 -> 169 bytes libs/SdFat-master/html/tab_h.png | Bin 0 -> 177 bytes libs/SdFat-master/html/tab_s.png | Bin 0 -> 184 bytes .../html/tabs.css | 1 + .../html/unioncache__t-members.html | 68 + libs/SdFat-master/html/unioncache__t.html | 195 + libs/SdFat-master/readme.txt | 168 + .../troubleshooting.txt | 25 +- libs/SdFatBeta20120108/MegaSoftSpi.txt | 14 - libs/SdFatBeta20120108/SdFat/Sd2PinMap.h | 360 -- libs/SdFatBeta20120108/SdFat/SdBaseFile.h | 489 -- libs/SdFatBeta20120108/SdFat/SdFatConfig.h | 121 - libs/SdFatBeta20120108/SdFat/SdFatmainpage.h | 228 - libs/SdFatBeta20120108/SdFat/SdVolume.cpp | 401 -- .../SdFat/examples/bench/bench.pde | 103 - .../extra/FridgeLogger/LightTempSdfat.pde | 224 - .../extra/FridgeLogger/LightTempStreams.pde | 177 - .../extra/FridgeLogger/diff.txt | 25 - .../extra/FridgeLogger/lighttemplogger.pde | 223 - .../extra/FridgeLogger/readme.txt | 15 - .../SdFatAnalogLogger/SdFatAnalogLogger.pde | 109 - .../examplesV1/SdFatAppend/SdFatAppend.pde | 55 - .../examplesV1/SdFatBench/SdFatBench.pde | 85 - .../extra/examplesV1/SdFatCopy/SdFatCopy.pde | 64 - .../SdFatGPSLogger_v3/SdFatGPSLogger_v3.pde | 326 -- .../SdFatGPS_CSVSensorLogger.pde | 371 -- .../extra/examplesV1/SdFatLs/SdFatLs.pde | 44 - .../examplesV1/SdFatPrint/SdFatPrint.pde | 49 - .../extra/examplesV1/SdFatRead/SdFatRead.pde | 51 - .../examplesV1/SdFatRemove/SdFatRemove.pde | 39 - .../examplesV1/SdFatRewrite/SdFatRewrite.pde | 53 - .../extra/examplesV1/SdFatTail/SdFatTail.pde | 80 - .../SdFatTruncate/SdFatTruncate.pde | 47 - .../examplesV1/SdFatWrite/SdFatWrite.pde | 81 - .../extra/examplesV1/V1readme.txt | 60 - libs/SdFatBeta20120108/extra/extra.txt | 7 - .../extra/makePinInclude/makePinInclude.pde | 353 -- .../extra/makePinInclude/readme.txt | 1 - .../html/_arduino_stream_8h.html | 77 - .../html/_arduino_stream_8h__dep__incl.png | Bin 1875 -> 0 bytes .../html/_arduino_stream_8h__incl.png | Bin 25729 -> 0 bytes libs/SdFatBeta20120108/html/_sd2_card_8h.html | 696 --- .../html/_sd2_card_8h__dep__incl.png | Bin 31734 -> 0 bytes .../html/_sd2_card_8h__incl.png | Bin 4376 -> 0 bytes .../html/_sd_base_file_8h.html | 722 --- .../html/_sd_base_file_8h__dep__incl.png | Bin 28986 -> 0 bytes .../html/_sd_base_file_8h__incl.png | Bin 17225 -> 0 bytes libs/SdFatBeta20120108/html/_sd_fat_8h.html | 89 - .../html/_sd_fat_8h__incl.png | Bin 37703 -> 0 bytes .../html/_sd_fat_config_8h.html | 297 -- .../html/_sd_fat_config_8h__dep__incl.png | Bin 40752 -> 0 bytes .../html/_sd_fat_config_8h__incl.png | Bin 1576 -> 0 bytes .../html/_sd_fat_structs_8h.html | 658 --- .../html/_sd_fat_structs_8h__dep__incl.png | Bin 31757 -> 0 bytes .../html/_sd_fat_util_8h.html | 114 - .../html/_sd_fat_util_8h__incl.png | Bin 3690 -> 0 bytes libs/SdFatBeta20120108/html/_sd_file_8h.html | 75 - .../html/_sd_file_8h__dep__incl.png | Bin 1755 -> 0 bytes .../html/_sd_file_8h__incl.png | Bin 18257 -> 0 bytes .../SdFatBeta20120108/html/_sd_stream_8h.html | 82 - .../html/_sd_stream_8h__dep__incl.png | Bin 1798 -> 0 bytes .../html/_sd_stream_8h__incl.png | Bin 27731 -> 0 bytes .../SdFatBeta20120108/html/_sd_volume_8h.html | 79 - .../html/_sd_volume_8h__dep__incl.png | Bin 30551 -> 0 bytes .../html/_sd_volume_8h__incl.png | Bin 8596 -> 0 bytes libs/SdFatBeta20120108/html/annotated.html | 81 - libs/SdFatBeta20120108/html/bufstream_8h.html | 77 - .../html/bufstream_8h__dep__incl.png | Bin 3009 -> 0 bytes .../html/bufstream_8h__incl.png | Bin 24759 -> 0 bytes .../html/class_arduino_in_stream-members.html | 144 - .../html/class_arduino_in_stream.html | 1992 --------- .../class_arduino_in_stream__coll__graph.png | Bin 3475 -> 0 bytes ...lass_arduino_in_stream__inherit__graph.png | Bin 3475 -> 0 bytes .../class_arduino_out_stream-members.html | 129 - .../html/class_arduino_out_stream.html | 1606 ------- .../class_arduino_out_stream__coll__graph.png | Bin 4577 -> 0 bytes ...ass_arduino_out_stream__inherit__graph.png | Bin 2729 -> 0 bytes .../html/class_print-members.html | 71 - libs/SdFatBeta20120108/html/class_print.html | 788 ---- .../html/class_print__inherit__graph.png | Bin 1013 -> 0 bytes .../html/class_sd2_card-members.html | 69 - .../html/class_sd2_card.html | 590 --- .../html/class_sd_base_file-members.html | 109 - .../html/class_sd_base_file.html | 1758 -------- .../html/class_sd_base_file__coll__graph.png | Bin 14023 -> 0 bytes .../class_sd_base_file__inherit__graph.png | Bin 6300 -> 0 bytes .../html/class_sd_fat-members.html | 79 - libs/SdFatBeta20120108/html/class_sd_fat.html | 832 ---- .../html/class_sd_fat__coll__graph.png | Bin 21877 -> 0 bytes .../html/class_sd_file-members.html | 134 - .../SdFatBeta20120108/html/class_sd_file.html | 2498 ----------- .../html/class_sd_file__coll__graph.png | Bin 16734 -> 0 bytes .../html/class_sd_file__inherit__graph.png | Bin 2863 -> 0 bytes .../html/class_sd_stream_base-members.html | 165 - .../html/class_sd_stream_base.html | 2652 ----------- .../class_sd_stream_base__coll__graph.png | Bin 17600 -> 0 bytes .../class_sd_stream_base__inherit__graph.png | Bin 6828 -> 0 bytes .../html/class_sd_volume-members.html | 67 - .../html/class_sd_volume.html | 436 -- .../html/class_sd_volume__coll__graph.png | Bin 12054 -> 0 bytes libs/SdFatBeta20120108/html/classes.html | 60 - .../html/classfstream-members.html | 222 - libs/SdFatBeta20120108/html/classfstream.html | 2568 ----------- .../html/classfstream__coll__graph.png | Bin 25578 -> 0 bytes .../html/classfstream__inherit__graph.png | Bin 10693 -> 0 bytes .../html/classibufstream-members.html | 140 - .../html/classibufstream.html | 1911 -------- .../html/classibufstream__coll__graph.png | Bin 2502 -> 0 bytes .../html/classibufstream__inherit__graph.png | Bin 3476 -> 0 bytes .../html/classifstream-members.html | 200 - .../SdFatBeta20120108/html/classifstream.html | 2019 --------- .../html/classifstream__coll__graph.png | Bin 20663 -> 0 bytes .../html/classifstream__inherit__graph.png | Bin 6674 -> 0 bytes .../html/classios-members.html | 106 - libs/SdFatBeta20120108/html/classios.html | 1056 ----- .../html/classios__base-members.html | 96 - .../html/classios__base.html | 850 ---- .../html/classios__base__inherit__graph.png | Bin 19521 -> 0 bytes .../html/classios__coll__graph.png | Bin 1080 -> 0 bytes .../html/classios__inherit__graph.png | Bin 19337 -> 0 bytes .../html/classiostream-members.html | 159 - .../SdFatBeta20120108/html/classiostream.html | 2385 ---------- .../html/classiostream__coll__graph.png | Bin 5855 -> 0 bytes .../html/classiostream__inherit__graph.png | Bin 6612 -> 0 bytes .../html/classistream-members.html | 137 - libs/SdFatBeta20120108/html/classistream.html | 1843 -------- .../html/classistream__coll__graph.png | Bin 1729 -> 0 bytes .../html/classistream__inherit__graph.png | Bin 6799 -> 0 bytes .../html/classobufstream-members.html | 133 - .../html/classobufstream.html | 1707 ------- .../html/classobufstream__coll__graph.png | Bin 2541 -> 0 bytes .../html/classobufstream__inherit__graph.png | Bin 2541 -> 0 bytes .../html/classofstream-members.html | 191 - .../SdFatBeta20120108/html/classofstream.html | 1757 -------- .../html/classofstream__coll__graph.png | Bin 19755 -> 0 bytes .../html/classofstream__inherit__graph.png | Bin 6425 -> 0 bytes .../html/classostream-members.html | 128 - libs/SdFatBeta20120108/html/classostream.html | 1581 ------- .../html/classostream__coll__graph.png | Bin 1733 -> 0 bytes .../html/classostream__inherit__graph.png | Bin 8051 -> 0 bytes libs/SdFatBeta20120108/html/files.html | 64 - .../html/functions_0x62.html | 145 - .../html/functions_0x68.html | 94 - .../html/functions_0x6a.html | 87 - .../html/functions_0x6c.html | 106 - .../html/functions_0x6e.html | 89 - .../html/functions_0x70.html | 126 - .../html/functions_0x74.html | 118 - .../html/functions_func.html | 86 - .../html/functions_func_0x62.html | 92 - .../html/functions_func_0x66.html | 119 - .../html/functions_func_0x67.html | 98 - .../html/functions_func_0x6c.html | 87 - .../html/functions_func_0x70.html | 108 - .../html/functions_func_0x75.html | 83 - .../html/functions_vars.html | 502 --- libs/SdFatBeta20120108/html/globals_defs.html | 96 - libs/SdFatBeta20120108/html/globals_type.html | 72 - libs/SdFatBeta20120108/html/globals_vars.html | 384 -- libs/SdFatBeta20120108/html/graph_legend.html | 105 - libs/SdFatBeta20120108/html/graph_legend.png | Bin 13683 -> 0 bytes libs/SdFatBeta20120108/html/hierarchy.html | 107 - libs/SdFatBeta20120108/html/index.html | 111 - .../html/inherit_graph_0.png | Bin 376 -> 0 bytes .../html/inherit_graph_1.png | Bin 458 -> 0 bytes .../html/inherit_graph_10.png | Bin 28168 -> 0 bytes .../html/inherit_graph_11.png | Bin 364 -> 0 bytes .../html/inherit_graph_12.png | Bin 402 -> 0 bytes .../html/inherit_graph_13.png | Bin 348 -> 0 bytes .../html/inherit_graph_14.png | Bin 434 -> 0 bytes .../html/inherit_graph_15.png | Bin 327 -> 0 bytes .../html/inherit_graph_2.png | Bin 425 -> 0 bytes .../html/inherit_graph_3.png | Bin 448 -> 0 bytes .../html/inherit_graph_4.png | Bin 388 -> 0 bytes .../html/inherit_graph_5.png | Bin 370 -> 0 bytes .../html/inherit_graph_6.png | Bin 524 -> 0 bytes .../html/inherit_graph_7.png | Bin 455 -> 0 bytes .../html/inherit_graph_8.png | Bin 321 -> 0 bytes .../html/inherit_graph_9.png | Bin 401 -> 0 bytes libs/SdFatBeta20120108/html/inherits.html | 116 - libs/SdFatBeta20120108/html/ios_8h.html | 549 --- .../html/ios_8h__dep__incl.png | Bin 17602 -> 0 bytes libs/SdFatBeta20120108/html/ios_8h__incl.png | Bin 18230 -> 0 bytes libs/SdFatBeta20120108/html/iostream_8h.html | 386 -- .../html/iostream_8h__dep__incl.png | Bin 11184 -> 0 bytes .../html/iostream_8h__incl.png | Bin 23643 -> 0 bytes libs/SdFatBeta20120108/html/istream_8h.html | 75 - .../html/istream_8h__dep__incl.png | Bin 12520 -> 0 bytes .../html/istream_8h__incl.png | Bin 19249 -> 0 bytes libs/SdFatBeta20120108/html/ostream_8h.html | 100 - .../html/ostream_8h__dep__incl.png | Bin 12523 -> 0 bytes .../html/ostream_8h__incl.png | Bin 19251 -> 0 bytes .../html/structdirectory_entry-members.html | 61 - .../html/structdirectory_entry.html | 259 -- .../html/structfat32__boot-members.html | 79 - .../html/structfat32__boot.html | 517 --- .../html/structfat32__fsinfo-members.html | 56 - .../html/structfat32__fsinfo.html | 172 - .../html/structfat__boot-members.html | 72 - .../html/structfat__boot.html | 412 -- .../html/structfpos__t-members.html | 52 - .../SdFatBeta20120108/html/structfpos__t.html | 97 - .../structmaster_boot_record-members.html | 55 - .../html/structmaster_boot_record.html | 165 - .../structmaster_boot_record__coll__graph.png | Bin 1517 -> 0 bytes .../html/structpartition_table-members.html | 61 - .../html/structpartition_table.html | 248 -- .../html/structpgm-members.html | 52 - libs/SdFatBeta20120108/html/structpgm.html | 136 - .../html/structsetfill-members.html | 51 - .../SdFatBeta20120108/html/structsetfill.html | 111 - .../html/structsetprecision-members.html | 51 - .../html/structsetprecision.html | 111 - .../html/structsetw-members.html | 51 - libs/SdFatBeta20120108/html/structsetw.html | 111 - .../html/unioncache__t-members.html | 57 - .../SdFatBeta20120108/html/unioncache__t.html | 194 - .../html/unioncache__t__coll__graph.png | Bin 9173 -> 0 bytes libs/SdFatBeta20120108/readme.txt | 170 - libs/SerialPort-master/.gitattributes | 22 + libs/SerialPort-master/.gitignore | 215 + libs/SerialPort-master/Doxyfile | 1751 ++++++++ .../MainPage/SerialPortMainPage.h | 163 + .../SerialPort.html | 0 .../SerialPort/SerialPort.cpp | 95 +- .../SerialPort/SerialPort.h | 336 +- .../examples/ArduinoSize/ArduinoSize.ino} | 0 .../SerialPort/examples/ArduinoSize/FreeRam.h | 10 + .../examples/ArduinoTest/ArduinoTest.ino} | 0 .../examples/BufferedSize/BufferedSize.ino} | 2 +- .../examples/BufferedSize/FreeRam.h | 10 + .../examples/BufferedTest/BufferedTest.ino} | 1 + .../examples/HelloWorld/HelloWorld.ino} | 2 +- .../examples/MegaTest/MegaTest.ino} | 13 +- .../MegaTestArduino/MegaTestArduino.ino} | 14 +- .../examples/ReadWriteTest/ReadWriteTest.ino} | 2 +- .../examples/UnbufferedSize/FreeRam.h | 10 + .../UnbufferedSize/UnbufferedSize.ino} | 6 +- .../UnbufferedTest/UnbufferedTest.ino} | 0 .../examples/WriteFlash/WriteFlash.ino} | 5 +- .../SerialPortLogger/SerialDataSource.ino | 29 + .../SerialPortLogger/SerialPortLogger.ino | 89 + .../SerialPortLogger/readme.txt | 60 + .../changes.txt | 16 + libs/SerialPort-master/del_htm.bat | 2 + .../html/a00001.html} | 247 +- .../html/a00002.html} | 135 +- .../html/a00003.html} | 68 +- libs/SerialPort-master/html/a00004.html | 94 + .../SerialPort-master/html/a00004_source.html | 319 ++ .../html/a00005.html} | 254 +- .../SerialPort-master/html/a00005_source.html | 533 +++ .../SerialPort-master/html/a00006_source.html | 101 + libs/SerialPort-master/html/a00009.html | 103 + libs/SerialPort-master/html/a00010.html | 94 + .../html/a00011.html} | 20 +- .../html/annotated.html | 12 +- .../html/bc_s.png | Bin .../html/classes.html | 10 +- .../html/closed.png | Bin .../html/doxygen.css | 0 .../html/doxygen.png | Bin .../html/files.html | 10 +- .../html/functions.html | 70 +- .../html/functions_func.html | 51 +- .../html/functions_type.html | 8 +- .../html/functions_vars.html | 18 +- .../html/globals.html | 70 +- .../html/globals_defs.html | 26 +- .../html/globals_func.html | 12 +- .../html/globals_vars.html | 44 +- libs/SerialPort-master/html/index.html | 146 + .../html/installdox | 0 .../html/jquery.js | 0 .../html/nav_f.png | Bin .../html/nav_h.png | Bin .../html/open.png | Bin .../html/search/all_61.html | 6 +- .../html/search/all_62.html | 14 +- .../html/search/all_63.html | 2 +- .../html/search/all_65.html | 6 +- .../html/search/all_66.html | 8 +- .../html/search/all_67.html | 6 +- .../html/search/all_69.html | 2 +- .../html/search/all_70.html | 10 +- .../html/search/all_72.html | 8 +- .../html/search/all_73.html | 47 +- .../html/search/all_74.html | 2 +- .../html/search/all_75.html | 26 +- .../html/search/all_77.html | 16 +- .../html/search/classes_73.html | 4 +- .../html/search/classes_75.html | 2 +- .../html/search/close.png | Bin .../html/search/defines_61.html | 2 +- .../html/search/defines_62.html | 4 +- .../html/search/defines_65.html | 2 +- .../html/search/defines_73.html | 2 +- .../html/search/defines_75.html | 10 +- .../html/search/files_73.html | 30 + .../html/search/functions_61.html | 4 +- .../html/search/functions_62.html | 8 +- .../html/search/functions_63.html | 2 +- .../html/search/functions_65.html | 4 +- .../html/search/functions_66.html | 8 +- .../html/search/functions_67.html | 6 +- .../html/search/functions_69.html | 2 +- .../html/search/functions_70.html | 10 +- .../html/search/functions_72.html | 4 +- .../html/search/functions_73.html} | 5 +- .../html/search/functions_77.html | 16 +- .../html/search/mag_sel.png | Bin .../html/search/nomatches.html | 0 .../html/search/search.css | 0 .../html/search/search.js | 2 +- .../html/search/search_l.png | Bin .../html/search/search_m.png | Bin .../html/search/search_r.png | Bin .../html/search/typedefs_62.html | 2 +- .../html/search/variables_72.html | 4 +- .../html/search/variables_73.html | 30 +- .../html/search/variables_74.html | 2 +- .../html/search/variables_75.html | 14 +- .../html/tab_a.png | Bin .../html/tab_b.png | Bin .../html/tab_h.png | Bin .../html/tab_s.png | Bin .../html/tabs.css | 0 libs/SerialPort-master/readme.txt | 15 + libs/SerialPortBeta20120106/HowTo.txt | 65 - .../SerialPort/examples/ArduinoSize/FreeRam.h | 15 - .../examples/BufferedSize/FreeRam.h | 15 - .../examples/UnbufferedSize/FreeRam.h | 15 - libs/SerialPortBeta20120106/html/bc_s.png | Bin 705 -> 0 bytes .../html/class_serial_port-members.html | 103 - .../class_serial_ring_buffer-members.html | 94 - libs/SerialPortBeta20120106/html/closed.png | Bin 126 -> 0 bytes libs/SerialPortBeta20120106/html/doxygen.css | 835 ---- libs/SerialPortBeta20120106/html/doxygen.png | Bin 3942 -> 0 bytes libs/SerialPortBeta20120106/html/index.html | 80 - libs/SerialPortBeta20120106/html/jquery.js | 54 - libs/SerialPortBeta20120106/html/nav_f.png | Bin 159 -> 0 bytes libs/SerialPortBeta20120106/html/nav_h.png | Bin 97 -> 0 bytes libs/SerialPortBeta20120106/html/open.png | Bin 118 -> 0 bytes libs/SerialPortBeta20120106/html/tab_a.png | Bin 140 -> 0 bytes libs/SerialPortBeta20120106/html/tab_b.png | Bin 178 -> 0 bytes libs/SerialPortBeta20120106/html/tab_h.png | Bin 192 -> 0 bytes libs/SerialPortBeta20120106/html/tab_s.png | Bin 189 -> 0 bytes libs/SerialPortBeta20120106/readme.txt | 69 - .../SerialPortBeta20120106/serialportdiff.txt | 404 -- 700 files changed, 76542 insertions(+), 53830 deletions(-) create mode 100644 .cproject create mode 100644 Makefile create mode 100755 libs/SdFat-master/.gitattributes create mode 100755 libs/SdFat-master/.gitignore create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/ADC_ENOB.PNG create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ATmegaADCAccuracy.pdf create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ExcelFFT.pdf create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/AdcErrorStudy.txt create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/DATA.png create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/FFT.png create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/RateTable.txt create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/AnalogBinLogger.h create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.cpp create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.exe create mode 100755 libs/SdFat-master/AnalogBinLoggerExtras/readme.txt create mode 100755 libs/SdFat-master/ArduinoDue.txt rename libs/{SdFatBeta20120108 => SdFat-master}/MultipleCards.txt (100%) rename libs/{SdFatBeta20120108 => SdFat-master}/QuickStart.txt (85%) create mode 100755 libs/SdFat-master/SPI_Transactions.txt rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat.html (100%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/ArduinoStream.h (80%) create mode 100755 libs/SdFat-master/SdFat/MinimumSerial.cpp rename libs/{SdFatBeta20120108/SdFat/SdFile.h => SdFat-master/SdFat/MinimumSerial.h} (54%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/Sd2Card.cpp (60%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/Sd2Card.h (61%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdBaseFile.cpp (66%) create mode 100755 libs/SdFat-master/SdFat/SdBaseFile.h create mode 100755 libs/SdFat-master/SdFat/SdBaseFilePrint.cpp rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdFat.cpp (59%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdFat.h (61%) create mode 100755 libs/SdFat-master/SdFat/SdFatConfig.h create mode 100755 libs/SdFat-master/SdFat/SdFatErrorPrint.cpp rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdFatUtil.cpp (81%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdFatUtil.h (88%) create mode 100755 libs/SdFat-master/SdFat/SdFatmainpage.h rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdFile.cpp (83%) create mode 100755 libs/SdFat-master/SdFat/SdFile.h rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdInfo.h (88%) create mode 100755 libs/SdFat-master/SdFat/SdSpi.h create mode 100755 libs/SdFat-master/SdFat/SdSpiAVR.cpp create mode 100755 libs/SdFat-master/SdFat/SdSpiArduino.cpp create mode 100755 libs/SdFat-master/SdFat/SdSpiSAM3X.cpp create mode 100755 libs/SdFat-master/SdFat/SdSpiSoft.cpp create mode 100755 libs/SdFat-master/SdFat/SdSpiTeensy3.cpp rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdStream.cpp (92%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdStream.h (90%) create mode 100755 libs/SdFat-master/SdFat/SdVolume.cpp rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/SdVolume.h (50%) create mode 100755 libs/SdFat-master/SdFat/StdioStream.cpp create mode 100755 libs/SdFat-master/SdFat/StdioStream.h rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/bufstream.h (74%) rename libs/{SdFatBeta20120108/SdFat/examples/AnalogLogger/AnalogLogger.pde => SdFat-master/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino} (92%) rename libs/{SdFatBeta20120108/SdFat/examples/HelloWorld/HelloWorld.pde => SdFat-master/SdFat/examples/#attic/HelloWorld/HelloWorld.ino} (73%) create mode 100755 libs/SdFat-master/SdFat/examples/#attic/MiniSerial/MiniSerial.ino create mode 100755 libs/SdFat-master/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino rename libs/{SdFatBeta20120108/SdFat/examples/SD_Size/SD_Size.pde => SdFat-master/SdFat/examples/#attic/SD_Size/SD_Size.ino} (85%) rename libs/{SdFatBeta20120108/SdFat/examples/SdFatSize/SdFatSize.pde => SdFat-master/SdFat/examples/#attic/SdFatSize/SdFatSize.ino} (79%) rename libs/{SdFatBeta20120108/extra/examplesV1/SdFatMakeDir/SdFatMakeDir.pde => SdFat-master/SdFat/examples/#attic/TestMkdir/TestMkdir.ino} (93%) rename libs/{SdFatBeta20120108/extra/examplesV1/SdFatRmDir/SdFatRmDir.pde => SdFat-master/SdFat/examples/#attic/TestRmdir/TestRmdir.ino} (90%) rename libs/{SdFatBeta20120108/SdFat/examples/append/append.pde => SdFat-master/SdFat/examples/#attic/append/append.ino} (88%) rename libs/{SdFatBeta20120108/SdFat/examples/average/average.pde => SdFat-master/SdFat/examples/#attic/average/average.ino} (88%) create mode 100755 libs/SdFat-master/SdFat/examples/#attic/benchSD/benchSD.ino rename libs/{SdFatBeta20120108/SdFat/examples/bufstream/bufstream.pde => SdFat-master/SdFat/examples/#attic/bufstream/bufstream.ino} (91%) rename libs/{SdFatBeta20120108/SdFat/examples/eventlog/eventlog.pde => SdFat-master/SdFat/examples/#attic/eventlog/eventlog.ino} (84%) create mode 100755 libs/SdFat-master/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino rename libs/{SdFatBeta20120108/SdFat/examples/readlog/readlog.pde => SdFat-master/SdFat/examples/#attic/readlog/readlog.ino} (81%) create mode 100755 libs/SdFat-master/SdFat/examples/#attic/readme.txt create mode 100755 libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h create mode 100755 libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino create mode 100755 libs/SdFat-master/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino create mode 100755 libs/SdFat-master/SdFat/examples/LowLatencyLogger/UserDataType.h rename libs/{SdFatBeta20120108/SdFat/examples/OpenNext/OpenNext.pde => SdFat-master/SdFat/examples/OpenNext/OpenNext.ino} (53%) create mode 100755 libs/SdFat-master/SdFat/examples/PrintBenchmark/PrintBenchmark.ino rename libs/{SdFatBeta20120108/SdFat/examples/QuickStart/QuickStart.pde => SdFat-master/SdFat/examples/QuickStart/QuickStart.ino} (70%) rename libs/{SdFatBeta20120108/extra/examplesV1/SdFatRawWrite/SdFatRawWrite.pde => SdFat-master/SdFat/examples/RawWrite/RawWrite.ino} (51%) rename libs/{SdFatBeta20120108/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.pde => SdFat-master/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino} (83%) rename libs/{SdFatBeta20120108/SdFat/examples/SdFormatter/SdFormatter.pde => SdFat-master/SdFat/examples/SdFormatter/SdFormatter.ino} (98%) rename libs/{SdFatBeta20120108/SdFat/examples/SdInfo/SdInfo.pde => SdFat-master/SdFat/examples/SdInfo/SdInfo.ino} (79%) create mode 100755 libs/SdFat-master/SdFat/examples/StdioBench/StdioBench.ino create mode 100755 libs/SdFat-master/SdFat/examples/StreamParseInt/StreamParseInt.ino create mode 100755 libs/SdFat-master/SdFat/examples/StressTest/StressTest.ino rename libs/{SdFatBeta20120108/extra/examplesV1/SdFatTimestamp/SdFatTimestamp.pde => SdFat-master/SdFat/examples/Timestamp/Timestamp.ino} (72%) rename libs/{SdFatBeta20120108/SdFat/examples/TwoCards/TwoCards.pde => SdFat-master/SdFat/examples/TwoCards/TwoCards.ino} (95%) create mode 100755 libs/SdFat-master/SdFat/examples/bench/bench.ino rename libs/{SdFatBeta20120108/SdFat/examples/cin_cout/cin_cout.pde => SdFat-master/SdFat/examples/cin_cout/cin_cout.ino} (77%) create mode 100755 libs/SdFat-master/SdFat/examples/dataLogger/dataLogger.ino create mode 100755 libs/SdFat-master/SdFat/examples/directoryFunctions/directoryFunctions.ino rename libs/{SdFatBeta20120108/SdFat/examples/fgets/fgets.pde => SdFat-master/SdFat/examples/fgets/fgets.ino} (80%) rename libs/{SdFatBeta20120108/SdFat/examples/formatting/formatting.pde => SdFat-master/SdFat/examples/formatting/formatting.ino} (96%) rename libs/{SdFatBeta20120108/SdFat/examples/getline/getline.pde => SdFat-master/SdFat/examples/getline/getline.ino} (88%) rename libs/{SdFatBeta20120108/SdFat/examples/readCSV/readCSV.pde => SdFat-master/SdFat/examples/readCSV/readCSV.ino} (61%) rename libs/{SdFatBeta20120108/SdFat/examples/rename/rename.pde => SdFat-master/SdFat/examples/rename/rename.ino} (90%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/ios.h (89%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/iostream.h (98%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/istream.cpp (92%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/istream.h (92%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/ostream.cpp (93%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdFat/ostream.h (83%) create mode 100755 libs/SdFat-master/SdFat/utility/DigitalPin.h create mode 100755 libs/SdFat-master/SdFat/utility/FatApiConstants.h rename libs/{SdFatBeta20120108/SdFat/SdFatStructs.h => SdFat-master/SdFat/utility/FatStructs.h} (88%) create mode 100755 libs/SdFat-master/SdFat/utility/FmtNumber.cpp create mode 100755 libs/SdFat-master/SdFat/utility/FmtNumber.h create mode 100755 libs/SdFat-master/SdFat/utility/SoftSPI.h rename libs/{SdFatBeta20120108/extra => SdFat-master}/SdFatTestSuite/SdFatTestSuite.cpp (83%) rename libs/{SdFatBeta20120108/extra => SdFat-master}/SdFatTestSuite/SdFatTestSuite.h (78%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.pde => SdFat-master/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino} (96%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde => SdFat-master/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino} (97%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.pde => SdFat-master/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino} (97%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/fstreamTest/fstreamTest.pde => SdFat-master/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino} (97%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/istreamTest/istreamTest.pde => SdFat-master/SdFatTestSuite/examples/istreamTest/istreamTest.ino} (71%) rename libs/{SdFatBeta20120108/extra/SdFatTestSuite/examples/ostreamTest/ostreamTest.pde => SdFat-master/SdFatTestSuite/examples/ostreamTest/ostreamTest.ino} (92%) rename libs/{SdFatBeta20120108 => SdFat-master}/SdLevel.png (100%) create mode 100755 libs/SdFat-master/SoftwareSPI.txt rename libs/{SdFatBeta20120108 => SdFat-master}/WorkingDirectory.txt (100%) rename libs/{SdFatBeta20120108 => SdFat-master}/changes.txt (73%) create mode 100755 libs/SdFat-master/html/_arduino_stream_8h.html create mode 100755 libs/SdFat-master/html/_arduino_stream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_arduino_stream_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd2_card_8h.html create mode 100755 libs/SdFat-master/html/_sd2_card_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd2_card_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_base_file_8h.html create mode 100755 libs/SdFat-master/html/_sd_base_file_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_base_file_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_fat_8h.html create mode 100755 libs/SdFat-master/html/_sd_fat_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_fat_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_fat_config_8h.html create mode 100755 libs/SdFat-master/html/_sd_fat_config_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_fat_config_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_fat_util_8h.html create mode 100755 libs/SdFat-master/html/_sd_fat_util_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_file_8h.html create mode 100755 libs/SdFat-master/html/_sd_file_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_file_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_spi_8h.html create mode 100755 libs/SdFat-master/html/_sd_spi_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_spi_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_stream_8h.html create mode 100755 libs/SdFat-master/html/_sd_stream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_stream_8h__incl.png create mode 100755 libs/SdFat-master/html/_sd_volume_8h.html create mode 100755 libs/SdFat-master/html/_sd_volume_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_sd_volume_8h__incl.png create mode 100755 libs/SdFat-master/html/_stdio_stream_8h.html create mode 100755 libs/SdFat-master/html/_stdio_stream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/_stdio_stream_8h__incl.png create mode 100755 libs/SdFat-master/html/annotated.html create mode 100755 libs/SdFat-master/html/bc_s.png create mode 100755 libs/SdFat-master/html/bdwn.png create mode 100755 libs/SdFat-master/html/bufstream_8h.html create mode 100755 libs/SdFat-master/html/bufstream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/bufstream_8h__incl.png create mode 100755 libs/SdFat-master/html/class_arduino_in_stream-members.html create mode 100755 libs/SdFat-master/html/class_arduino_in_stream.html create mode 100755 libs/SdFat-master/html/class_arduino_in_stream__coll__graph.png create mode 100755 libs/SdFat-master/html/class_arduino_in_stream__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_arduino_out_stream-members.html create mode 100755 libs/SdFat-master/html/class_arduino_out_stream.html create mode 100755 libs/SdFat-master/html/class_arduino_out_stream__coll__graph.png create mode 100755 libs/SdFat-master/html/class_arduino_out_stream__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_file-members.html create mode 100755 libs/SdFat-master/html/class_file.html create mode 100755 libs/SdFat-master/html/class_file__coll__graph.png create mode 100755 libs/SdFat-master/html/class_file__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_minimum_serial-members.html create mode 100755 libs/SdFat-master/html/class_minimum_serial.html create mode 100755 libs/SdFat-master/html/class_minimum_serial__coll__graph.png create mode 100755 libs/SdFat-master/html/class_minimum_serial__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_sd2_card-members.html create mode 100755 libs/SdFat-master/html/class_sd2_card.html create mode 100755 libs/SdFat-master/html/class_sd_base_file-members.html create mode 100755 libs/SdFat-master/html/class_sd_base_file.html create mode 100755 libs/SdFat-master/html/class_sd_base_file__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_sd_fat-members.html create mode 100755 libs/SdFat-master/html/class_sd_fat.html create mode 100755 libs/SdFat-master/html/class_sd_file-members.html create mode 100755 libs/SdFat-master/html/class_sd_file.html create mode 100755 libs/SdFat-master/html/class_sd_file__coll__graph.png create mode 100755 libs/SdFat-master/html/class_sd_file__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_sd_spi-members.html create mode 100755 libs/SdFat-master/html/class_sd_spi.html create mode 100755 libs/SdFat-master/html/class_sd_stream_base-members.html create mode 100755 libs/SdFat-master/html/class_sd_stream_base.html create mode 100755 libs/SdFat-master/html/class_sd_stream_base__coll__graph.png create mode 100755 libs/SdFat-master/html/class_sd_stream_base__inherit__graph.png create mode 100755 libs/SdFat-master/html/class_sd_volume-members.html create mode 100755 libs/SdFat-master/html/class_sd_volume.html create mode 100755 libs/SdFat-master/html/class_stdio_stream-members.html create mode 100755 libs/SdFat-master/html/class_stdio_stream.html create mode 100755 libs/SdFat-master/html/class_stdio_stream__coll__graph.png create mode 100755 libs/SdFat-master/html/class_stdio_stream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classes.html create mode 100755 libs/SdFat-master/html/classfstream-members.html create mode 100755 libs/SdFat-master/html/classfstream.html create mode 100755 libs/SdFat-master/html/classfstream__coll__graph.png create mode 100755 libs/SdFat-master/html/classfstream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classibufstream-members.html create mode 100755 libs/SdFat-master/html/classibufstream.html create mode 100755 libs/SdFat-master/html/classibufstream__coll__graph.png create mode 100755 libs/SdFat-master/html/classibufstream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classifstream-members.html create mode 100755 libs/SdFat-master/html/classifstream.html create mode 100755 libs/SdFat-master/html/classifstream__coll__graph.png create mode 100755 libs/SdFat-master/html/classifstream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classios-members.html create mode 100755 libs/SdFat-master/html/classios.html create mode 100755 libs/SdFat-master/html/classios__base-members.html create mode 100755 libs/SdFat-master/html/classios__base.html create mode 100755 libs/SdFat-master/html/classios__base__inherit__graph.png create mode 100755 libs/SdFat-master/html/classios__coll__graph.png create mode 100755 libs/SdFat-master/html/classios__inherit__graph.png create mode 100755 libs/SdFat-master/html/classiostream-members.html create mode 100755 libs/SdFat-master/html/classiostream.html create mode 100755 libs/SdFat-master/html/classiostream__coll__graph.png create mode 100755 libs/SdFat-master/html/classiostream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classistream-members.html create mode 100755 libs/SdFat-master/html/classistream.html create mode 100755 libs/SdFat-master/html/classistream__coll__graph.png create mode 100755 libs/SdFat-master/html/classistream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classobufstream-members.html create mode 100755 libs/SdFat-master/html/classobufstream.html create mode 100755 libs/SdFat-master/html/classobufstream__coll__graph.png create mode 100755 libs/SdFat-master/html/classobufstream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classofstream-members.html create mode 100755 libs/SdFat-master/html/classofstream.html create mode 100755 libs/SdFat-master/html/classofstream__coll__graph.png create mode 100755 libs/SdFat-master/html/classofstream__inherit__graph.png create mode 100755 libs/SdFat-master/html/classostream-members.html create mode 100755 libs/SdFat-master/html/classostream.html create mode 100755 libs/SdFat-master/html/classostream__coll__graph.png create mode 100755 libs/SdFat-master/html/classostream__inherit__graph.png create mode 100755 libs/SdFat-master/html/closed.png create mode 100755 libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf.html create mode 100755 libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf_dep.png create mode 100755 libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160.html create mode 100755 libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png create mode 100755 libs/SdFat-master/html/dir_a991eec27578c865874ede3d8ec657c2.html create mode 100755 libs/SdFat-master/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png create mode 100755 libs/SdFat-master/html/doxygen.css create mode 100755 libs/SdFat-master/html/doxygen.png create mode 100755 libs/SdFat-master/html/dynsections.js create mode 100755 libs/SdFat-master/html/files.html create mode 100755 libs/SdFat-master/html/ftv2blank.png create mode 100755 libs/SdFat-master/html/ftv2doc.png create mode 100755 libs/SdFat-master/html/ftv2folderclosed.png create mode 100755 libs/SdFat-master/html/ftv2folderopen.png create mode 100755 libs/SdFat-master/html/ftv2lastnode.png create mode 100755 libs/SdFat-master/html/ftv2link.png create mode 100755 libs/SdFat-master/html/ftv2mlastnode.png create mode 100755 libs/SdFat-master/html/ftv2mnode.png create mode 100755 libs/SdFat-master/html/ftv2node.png create mode 100755 libs/SdFat-master/html/ftv2plastnode.png create mode 100755 libs/SdFat-master/html/ftv2pnode.png create mode 100755 libs/SdFat-master/html/ftv2splitbar.png create mode 100755 libs/SdFat-master/html/ftv2vertline.png rename libs/{SdFatBeta20120108 => SdFat-master}/html/functions.html (51%) create mode 100755 libs/SdFat-master/html/functions_b.html rename libs/{SdFatBeta20120108/html/functions_0x63.html => SdFat-master/html/functions_c.html} (59%) rename libs/{SdFatBeta20120108/html/functions_0x64.html => SdFat-master/html/functions_d.html} (58%) rename libs/{SdFatBeta20120108/html/functions_0x65.html => SdFat-master/html/functions_e.html} (59%) rename libs/{SdFatBeta20120108 => SdFat-master}/html/functions_enum.html (71%) rename libs/{SdFatBeta20120108 => SdFat-master}/html/functions_eval.html (74%) rename libs/{SdFatBeta20120108/html/functions_0x66.html => SdFat-master/html/functions_f.html} (50%) create mode 100755 libs/SdFat-master/html/functions_func.html create mode 100755 libs/SdFat-master/html/functions_func_b.html rename libs/{SdFatBeta20120108/html/functions_func_0x63.html => SdFat-master/html/functions_func_c.html} (59%) rename libs/{SdFatBeta20120108/html/functions_func_0x64.html => SdFat-master/html/functions_func_d.html} (55%) rename libs/{SdFatBeta20120108/html/functions_func_0x65.html => SdFat-master/html/functions_func_e.html} (60%) create mode 100755 libs/SdFat-master/html/functions_func_f.html create mode 100755 libs/SdFat-master/html/functions_func_g.html rename libs/{SdFatBeta20120108/html/functions_func_0x69.html => SdFat-master/html/functions_func_i.html} (55%) create mode 100755 libs/SdFat-master/html/functions_func_l.html rename libs/{SdFatBeta20120108/html/functions_func_0x6d.html => SdFat-master/html/functions_func_m.html} (50%) create mode 100755 libs/SdFat-master/html/functions_func_n.html rename libs/{SdFatBeta20120108/html/functions_func_0x6f.html => SdFat-master/html/functions_func_o.html} (52%) create mode 100755 libs/SdFat-master/html/functions_func_p.html rename libs/{SdFatBeta20120108/html/functions_func_0x72.html => SdFat-master/html/functions_func_r.html} (54%) rename libs/{SdFatBeta20120108/html/functions_func_0x73.html => SdFat-master/html/functions_func_s.html} (59%) rename libs/{SdFatBeta20120108/html/functions_func_0x74.html => SdFat-master/html/functions_func_t.html} (53%) create mode 100755 libs/SdFat-master/html/functions_func_u.html rename libs/{SdFatBeta20120108/html/functions_func_0x76.html => SdFat-master/html/functions_func_v.html} (51%) rename libs/{SdFatBeta20120108/html/functions_func_0x77.html => SdFat-master/html/functions_func_w.html} (52%) rename libs/{SdFatBeta20120108/html/functions_0x67.html => SdFat-master/html/functions_g.html} (51%) create mode 100755 libs/SdFat-master/html/functions_h.html rename libs/{SdFatBeta20120108/html/functions_0x69.html => SdFat-master/html/functions_i.html} (61%) create mode 100755 libs/SdFat-master/html/functions_l.html rename libs/{SdFatBeta20120108/html/functions_0x6d.html => SdFat-master/html/functions_m.html} (50%) create mode 100755 libs/SdFat-master/html/functions_n.html rename libs/{SdFatBeta20120108/html/functions_0x6f.html => SdFat-master/html/functions_o.html} (55%) create mode 100755 libs/SdFat-master/html/functions_p.html rename libs/{SdFatBeta20120108/html/functions_0x72.html => SdFat-master/html/functions_r.html} (54%) rename libs/{SdFatBeta20120108/html/functions_0x73.html => SdFat-master/html/functions_s.html} (61%) create mode 100755 libs/SdFat-master/html/functions_t.html rename libs/{SdFatBeta20120108 => SdFat-master}/html/functions_type.html (76%) rename libs/{SdFatBeta20120108/html/functions_0x75.html => SdFat-master/html/functions_u.html} (51%) rename libs/{SdFatBeta20120108/html/functions_0x76.html => SdFat-master/html/functions_v.html} (51%) create mode 100755 libs/SdFat-master/html/functions_vars.html rename libs/{SdFatBeta20120108/html/functions_0x77.html => SdFat-master/html/functions_w.html} (55%) rename libs/{SdFatBeta20120108 => SdFat-master}/html/globals.html (53%) create mode 100755 libs/SdFat-master/html/globals_defs.html rename libs/{SdFatBeta20120108 => SdFat-master}/html/globals_func.html (51%) create mode 100755 libs/SdFat-master/html/globals_vars.html create mode 100755 libs/SdFat-master/html/graph_legend.html create mode 100755 libs/SdFat-master/html/graph_legend.png create mode 100755 libs/SdFat-master/html/hierarchy.html create mode 100755 libs/SdFat-master/html/index.html create mode 100755 libs/SdFat-master/html/inherit_graph_0.png create mode 100755 libs/SdFat-master/html/inherit_graph_1.png create mode 100755 libs/SdFat-master/html/inherit_graph_10.png create mode 100755 libs/SdFat-master/html/inherit_graph_2.png create mode 100755 libs/SdFat-master/html/inherit_graph_3.png create mode 100755 libs/SdFat-master/html/inherit_graph_4.png create mode 100755 libs/SdFat-master/html/inherit_graph_5.png create mode 100755 libs/SdFat-master/html/inherit_graph_6.png create mode 100755 libs/SdFat-master/html/inherit_graph_7.png create mode 100755 libs/SdFat-master/html/inherit_graph_8.png create mode 100755 libs/SdFat-master/html/inherit_graph_9.png create mode 100755 libs/SdFat-master/html/inherits.html create mode 100755 libs/SdFat-master/html/ios_8h.html create mode 100755 libs/SdFat-master/html/ios_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/ios_8h__incl.png create mode 100755 libs/SdFat-master/html/iostream_8h.html create mode 100755 libs/SdFat-master/html/iostream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/iostream_8h__incl.png create mode 100755 libs/SdFat-master/html/istream_8h.html create mode 100755 libs/SdFat-master/html/istream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/istream_8h__incl.png create mode 100755 libs/SdFat-master/html/jquery.js create mode 100755 libs/SdFat-master/html/nav_f.png create mode 100755 libs/SdFat-master/html/nav_g.png create mode 100755 libs/SdFat-master/html/nav_h.png create mode 100755 libs/SdFat-master/html/open.png create mode 100755 libs/SdFat-master/html/ostream_8h.html create mode 100755 libs/SdFat-master/html/ostream_8h__dep__incl.png create mode 100755 libs/SdFat-master/html/ostream_8h__incl.png create mode 100755 libs/SdFat-master/html/struct_fat_pos__t-members.html create mode 100755 libs/SdFat-master/html/struct_fat_pos__t.html create mode 100755 libs/SdFat-master/html/structpgm-members.html create mode 100755 libs/SdFat-master/html/structpgm.html create mode 100755 libs/SdFat-master/html/structsetfill-members.html create mode 100755 libs/SdFat-master/html/structsetfill.html create mode 100755 libs/SdFat-master/html/structsetprecision-members.html create mode 100755 libs/SdFat-master/html/structsetprecision.html create mode 100755 libs/SdFat-master/html/structsetw-members.html create mode 100755 libs/SdFat-master/html/structsetw.html create mode 100755 libs/SdFat-master/html/sync_off.png create mode 100755 libs/SdFat-master/html/sync_on.png create mode 100755 libs/SdFat-master/html/tab_a.png create mode 100755 libs/SdFat-master/html/tab_b.png create mode 100755 libs/SdFat-master/html/tab_h.png create mode 100755 libs/SdFat-master/html/tab_s.png rename libs/{SerialPortBeta20120106 => SdFat-master}/html/tabs.css (94%) create mode 100755 libs/SdFat-master/html/unioncache__t-members.html create mode 100755 libs/SdFat-master/html/unioncache__t.html create mode 100755 libs/SdFat-master/readme.txt rename libs/{SdFatBeta20120108 => SdFat-master}/troubleshooting.txt (59%) delete mode 100755 libs/SdFatBeta20120108/MegaSoftSpi.txt delete mode 100755 libs/SdFatBeta20120108/SdFat/Sd2PinMap.h delete mode 100755 libs/SdFatBeta20120108/SdFat/SdBaseFile.h delete mode 100755 libs/SdFatBeta20120108/SdFat/SdFatConfig.h delete mode 100755 libs/SdFatBeta20120108/SdFat/SdFatmainpage.h delete mode 100755 libs/SdFatBeta20120108/SdFat/SdVolume.cpp delete mode 100755 libs/SdFatBeta20120108/SdFat/examples/bench/bench.pde delete mode 100755 libs/SdFatBeta20120108/extra/FridgeLogger/LightTempSdfat.pde delete mode 100755 libs/SdFatBeta20120108/extra/FridgeLogger/LightTempStreams.pde delete mode 100755 libs/SdFatBeta20120108/extra/FridgeLogger/diff.txt delete mode 100755 libs/SdFatBeta20120108/extra/FridgeLogger/lighttemplogger.pde delete mode 100755 libs/SdFatBeta20120108/extra/FridgeLogger/readme.txt delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatAnalogLogger/SdFatAnalogLogger.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatAppend/SdFatAppend.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatBench/SdFatBench.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatCopy/SdFatCopy.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatGPSLogger_v3/SdFatGPSLogger_v3.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatGPS_CSVSensorLogger/SdFatGPS_CSVSensorLogger.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatLs/SdFatLs.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatPrint/SdFatPrint.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatRead/SdFatRead.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatRemove/SdFatRemove.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatRewrite/SdFatRewrite.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatTail/SdFatTail.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatTruncate/SdFatTruncate.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/SdFatWrite/SdFatWrite.pde delete mode 100755 libs/SdFatBeta20120108/extra/examplesV1/V1readme.txt delete mode 100755 libs/SdFatBeta20120108/extra/extra.txt delete mode 100755 libs/SdFatBeta20120108/extra/makePinInclude/makePinInclude.pde delete mode 100755 libs/SdFatBeta20120108/extra/makePinInclude/readme.txt delete mode 100755 libs/SdFatBeta20120108/html/_arduino_stream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_arduino_stream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_arduino_stream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd2_card_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd2_card_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd2_card_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_base_file_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_base_file_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_base_file_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_config_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_config_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_config_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_structs_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_structs_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_util_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_fat_util_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_file_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_file_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_file_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_stream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_stream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_stream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_volume_8h.html delete mode 100755 libs/SdFatBeta20120108/html/_sd_volume_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/_sd_volume_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/annotated.html delete mode 100755 libs/SdFatBeta20120108/html/bufstream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/bufstream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/bufstream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_in_stream-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_in_stream.html delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_in_stream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_in_stream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_out_stream-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_out_stream.html delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_out_stream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_arduino_out_stream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_print-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_print.html delete mode 100755 libs/SdFatBeta20120108/html/class_print__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd2_card-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd2_card.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_base_file-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_base_file.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_base_file__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_base_file__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_fat-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_fat.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_fat__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_file-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_file.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_file__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_file__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_stream_base-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_stream_base.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_stream_base__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_stream_base__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/class_sd_volume-members.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_volume.html delete mode 100755 libs/SdFatBeta20120108/html/class_sd_volume__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classes.html delete mode 100755 libs/SdFatBeta20120108/html/classfstream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classfstream.html delete mode 100755 libs/SdFatBeta20120108/html/classfstream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classfstream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classibufstream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classibufstream.html delete mode 100755 libs/SdFatBeta20120108/html/classibufstream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classibufstream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classifstream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classifstream.html delete mode 100755 libs/SdFatBeta20120108/html/classifstream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classifstream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classios-members.html delete mode 100755 libs/SdFatBeta20120108/html/classios.html delete mode 100755 libs/SdFatBeta20120108/html/classios__base-members.html delete mode 100755 libs/SdFatBeta20120108/html/classios__base.html delete mode 100755 libs/SdFatBeta20120108/html/classios__base__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classios__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classios__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classiostream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classiostream.html delete mode 100755 libs/SdFatBeta20120108/html/classiostream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classiostream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classistream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classistream.html delete mode 100755 libs/SdFatBeta20120108/html/classistream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classistream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classobufstream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classobufstream.html delete mode 100755 libs/SdFatBeta20120108/html/classobufstream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classobufstream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classofstream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classofstream.html delete mode 100755 libs/SdFatBeta20120108/html/classofstream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classofstream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classostream-members.html delete mode 100755 libs/SdFatBeta20120108/html/classostream.html delete mode 100755 libs/SdFatBeta20120108/html/classostream__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/classostream__inherit__graph.png delete mode 100755 libs/SdFatBeta20120108/html/files.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x62.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x68.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x6a.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x6c.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x6e.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x70.html delete mode 100755 libs/SdFatBeta20120108/html/functions_0x74.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x62.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x66.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x67.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x6c.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x70.html delete mode 100755 libs/SdFatBeta20120108/html/functions_func_0x75.html delete mode 100755 libs/SdFatBeta20120108/html/functions_vars.html delete mode 100755 libs/SdFatBeta20120108/html/globals_defs.html delete mode 100755 libs/SdFatBeta20120108/html/globals_type.html delete mode 100755 libs/SdFatBeta20120108/html/globals_vars.html delete mode 100755 libs/SdFatBeta20120108/html/graph_legend.html delete mode 100755 libs/SdFatBeta20120108/html/graph_legend.png delete mode 100755 libs/SdFatBeta20120108/html/hierarchy.html delete mode 100755 libs/SdFatBeta20120108/html/index.html delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_0.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_1.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_10.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_11.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_12.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_13.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_14.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_15.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_2.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_3.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_4.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_5.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_6.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_7.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_8.png delete mode 100755 libs/SdFatBeta20120108/html/inherit_graph_9.png delete mode 100755 libs/SdFatBeta20120108/html/inherits.html delete mode 100755 libs/SdFatBeta20120108/html/ios_8h.html delete mode 100755 libs/SdFatBeta20120108/html/ios_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/ios_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/iostream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/iostream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/iostream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/istream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/istream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/istream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/ostream_8h.html delete mode 100755 libs/SdFatBeta20120108/html/ostream_8h__dep__incl.png delete mode 100755 libs/SdFatBeta20120108/html/ostream_8h__incl.png delete mode 100755 libs/SdFatBeta20120108/html/structdirectory_entry-members.html delete mode 100755 libs/SdFatBeta20120108/html/structdirectory_entry.html delete mode 100755 libs/SdFatBeta20120108/html/structfat32__boot-members.html delete mode 100755 libs/SdFatBeta20120108/html/structfat32__boot.html delete mode 100755 libs/SdFatBeta20120108/html/structfat32__fsinfo-members.html delete mode 100755 libs/SdFatBeta20120108/html/structfat32__fsinfo.html delete mode 100755 libs/SdFatBeta20120108/html/structfat__boot-members.html delete mode 100755 libs/SdFatBeta20120108/html/structfat__boot.html delete mode 100755 libs/SdFatBeta20120108/html/structfpos__t-members.html delete mode 100755 libs/SdFatBeta20120108/html/structfpos__t.html delete mode 100755 libs/SdFatBeta20120108/html/structmaster_boot_record-members.html delete mode 100755 libs/SdFatBeta20120108/html/structmaster_boot_record.html delete mode 100755 libs/SdFatBeta20120108/html/structmaster_boot_record__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/html/structpartition_table-members.html delete mode 100755 libs/SdFatBeta20120108/html/structpartition_table.html delete mode 100755 libs/SdFatBeta20120108/html/structpgm-members.html delete mode 100755 libs/SdFatBeta20120108/html/structpgm.html delete mode 100755 libs/SdFatBeta20120108/html/structsetfill-members.html delete mode 100755 libs/SdFatBeta20120108/html/structsetfill.html delete mode 100755 libs/SdFatBeta20120108/html/structsetprecision-members.html delete mode 100755 libs/SdFatBeta20120108/html/structsetprecision.html delete mode 100755 libs/SdFatBeta20120108/html/structsetw-members.html delete mode 100755 libs/SdFatBeta20120108/html/structsetw.html delete mode 100755 libs/SdFatBeta20120108/html/unioncache__t-members.html delete mode 100755 libs/SdFatBeta20120108/html/unioncache__t.html delete mode 100755 libs/SdFatBeta20120108/html/unioncache__t__coll__graph.png delete mode 100755 libs/SdFatBeta20120108/readme.txt create mode 100755 libs/SerialPort-master/.gitattributes create mode 100755 libs/SerialPort-master/.gitignore create mode 100755 libs/SerialPort-master/Doxyfile create mode 100755 libs/SerialPort-master/MainPage/SerialPortMainPage.h rename libs/{SerialPortBeta20120106 => SerialPort-master}/SerialPort.html (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/SerialPort/SerialPort.cpp (78%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/SerialPort/SerialPort.h (73%) rename libs/{SerialPortBeta20120106/SerialPort/examples/ArduinoSize/ArduinoSize.pde => SerialPort-master/SerialPort/examples/ArduinoSize/ArduinoSize.ino} (100%) create mode 100755 libs/SerialPort-master/SerialPort/examples/ArduinoSize/FreeRam.h rename libs/{SerialPortBeta20120106/SerialPort/examples/ArduinoTest/ArduinoTest.pde => SerialPort-master/SerialPort/examples/ArduinoTest/ArduinoTest.ino} (100%) rename libs/{SerialPortBeta20120106/SerialPort/examples/BufferedSize/BufferedSize.pde => SerialPort-master/SerialPort/examples/BufferedSize/BufferedSize.ino} (83%) create mode 100755 libs/SerialPort-master/SerialPort/examples/BufferedSize/FreeRam.h rename libs/{SerialPortBeta20120106/SerialPort/examples/BufferedTest/BufferedTest.pde => SerialPort-master/SerialPort/examples/BufferedTest/BufferedTest.ino} (91%) rename libs/{SerialPortBeta20120106/SerialPort/examples/HelloWorld/HelloWorld.pde => SerialPort-master/SerialPort/examples/HelloWorld/HelloWorld.ino} (76%) rename libs/{SerialPortBeta20120106/SerialPort/examples/MegaTest/MegaTest.pde => SerialPort-master/SerialPort/examples/MegaTest/MegaTest.ino} (64%) rename libs/{SerialPortBeta20120106/SerialPort/examples/MegaTestArduino/MegaTestArduino.pde => SerialPort-master/SerialPort/examples/MegaTestArduino/MegaTestArduino.ino} (55%) rename libs/{SerialPortBeta20120106/SerialPort/examples/ReadWriteTest/ReadWriteTest.pde => SerialPort-master/SerialPort/examples/ReadWriteTest/ReadWriteTest.ino} (93%) create mode 100755 libs/SerialPort-master/SerialPort/examples/UnbufferedSize/FreeRam.h rename libs/{SerialPortBeta20120106/SerialPort/examples/UnbufferedSize/UnbufferedSize.pde => SerialPort-master/SerialPort/examples/UnbufferedSize/UnbufferedSize.ino} (65%) rename libs/{SerialPortBeta20120106/SerialPort/examples/UnbufferedTest/UnbufferedTest.pde => SerialPort-master/SerialPort/examples/UnbufferedTest/UnbufferedTest.ino} (100%) rename libs/{SerialPortBeta20120106/SerialPort/examples/WriteFlash/WriteFlash.pde => SerialPort-master/SerialPort/examples/WriteFlash/WriteFlash.ino} (80%) create mode 100755 libs/SerialPort-master/SerialPortLogger/SerialDataSource.ino create mode 100755 libs/SerialPort-master/SerialPortLogger/SerialPortLogger.ino create mode 100755 libs/SerialPort-master/SerialPortLogger/readme.txt rename libs/{SerialPortBeta20120106 => SerialPort-master}/changes.txt (92%) create mode 100755 libs/SerialPort-master/del_htm.bat rename libs/{SerialPortBeta20120106/html/class_serial_port.html => SerialPort-master/html/a00001.html} (63%) rename libs/{SerialPortBeta20120106/html/class_serial_ring_buffer.html => SerialPort-master/html/a00002.html} (65%) rename libs/{SerialPortBeta20120106/html/struct_usart_register.html => SerialPort-master/html/a00003.html} (72%) create mode 100755 libs/SerialPort-master/html/a00004.html create mode 100755 libs/SerialPort-master/html/a00004_source.html rename libs/{SerialPortBeta20120106/html/_serial_port_8h.html => SerialPort-master/html/a00005.html} (64%) create mode 100755 libs/SerialPort-master/html/a00005_source.html create mode 100755 libs/SerialPort-master/html/a00006_source.html create mode 100755 libs/SerialPort-master/html/a00009.html create mode 100755 libs/SerialPort-master/html/a00010.html rename libs/{SerialPortBeta20120106/html/class_usart_register-members.html => SerialPort-master/html/a00011.html} (72%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/annotated.html (86%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/bc_s.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/classes.html (86%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/closed.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/doxygen.css (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/doxygen.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/files.html (86%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/functions.html (63%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/functions_func.html (62%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/functions_type.html (94%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/functions_vars.html (85%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/globals.html (65%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/globals_defs.html (80%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/globals_func.html (91%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/globals_vars.html (70%) create mode 100755 libs/SerialPort-master/html/index.html rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/installdox (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/jquery.js (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/nav_f.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/nav_h.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/open.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_61.html (82%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_62.html (72%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_63.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_65.html (78%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_66.html (79%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_67.html (80%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_69.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_70.html (79%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_72.html (79%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_73.html (62%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_74.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_75.html (69%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/all_77.html (74%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/classes_73.html (84%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/classes_75.html (89%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/close.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/defines_61.html (87%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/defines_62.html (82%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/defines_65.html (87%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/defines_73.html (87%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/defines_75.html (74%) create mode 100755 libs/SerialPort-master/html/search/files_73.html rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_61.html (86%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_62.html (76%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_63.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_65.html (82%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_66.html (79%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_67.html (80%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_69.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_70.html (79%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_72.html (86%) rename libs/{SerialPortBeta20120106/html/search/files_73.html => SerialPort-master/html/search/functions_73.html} (82%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/functions_77.html (74%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/mag_sel.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/nomatches.html (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/search.css (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/search.js (99%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/search_l.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/search_m.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/search_r.png (100%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/typedefs_62.html (87%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/variables_72.html (82%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/variables_73.html (68%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/variables_74.html (88%) rename libs/{SerialPortBeta20120106 => SerialPort-master}/html/search/variables_75.html (72%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/tab_a.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/tab_b.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/tab_h.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/tab_s.png (100%) rename libs/{SdFatBeta20120108 => SerialPort-master}/html/tabs.css (100%) create mode 100755 libs/SerialPort-master/readme.txt delete mode 100755 libs/SerialPortBeta20120106/HowTo.txt delete mode 100755 libs/SerialPortBeta20120106/SerialPort/examples/ArduinoSize/FreeRam.h delete mode 100755 libs/SerialPortBeta20120106/SerialPort/examples/BufferedSize/FreeRam.h delete mode 100755 libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedSize/FreeRam.h delete mode 100755 libs/SerialPortBeta20120106/html/bc_s.png delete mode 100755 libs/SerialPortBeta20120106/html/class_serial_port-members.html delete mode 100755 libs/SerialPortBeta20120106/html/class_serial_ring_buffer-members.html delete mode 100755 libs/SerialPortBeta20120106/html/closed.png delete mode 100755 libs/SerialPortBeta20120106/html/doxygen.css delete mode 100755 libs/SerialPortBeta20120106/html/doxygen.png delete mode 100755 libs/SerialPortBeta20120106/html/index.html delete mode 100755 libs/SerialPortBeta20120106/html/jquery.js delete mode 100755 libs/SerialPortBeta20120106/html/nav_f.png delete mode 100755 libs/SerialPortBeta20120106/html/nav_h.png delete mode 100755 libs/SerialPortBeta20120106/html/open.png delete mode 100755 libs/SerialPortBeta20120106/html/tab_a.png delete mode 100755 libs/SerialPortBeta20120106/html/tab_b.png delete mode 100755 libs/SerialPortBeta20120106/html/tab_h.png delete mode 100755 libs/SerialPortBeta20120106/html/tab_s.png delete mode 100755 libs/SerialPortBeta20120106/readme.txt delete mode 100755 libs/SerialPortBeta20120106/serialportdiff.txt diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..524bedb --- /dev/null +++ b/.cproject @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1a2c551 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +all: openlog_blackbox.zip + +openlog_blackbox.zip : Readme.md OpenLog_v3_Blackbox/OpenLog_v3_Blackbox.ino OpenLog_v3_Blackbox/OpenLog_v3_Blackbox.cpp.hex + zip $@ $^ -r libs/ + +clean: + rm openlog_blackbox.zip \ No newline at end of file diff --git a/Readme.md b/Readme.md index aa4b77b..3bfa32e 100644 --- a/Readme.md +++ b/Readme.md @@ -7,9 +7,9 @@ glitches during OpenLog startup that might mess with the settings. You will find a zip file containing the required libraries, the source-code and the compiled hex file on the "releases" page above. -You'll need to copy the required libraries to your Arduino IDE's library path in order to build this from source. Copy -the `libs/SdFatBeta20120108/SdFat` and `libs/SerialPortBeta20120106/SerialPort` folders to your libraries folder directly -(don't copy the outer folders "SdFatBeta20120108" or "SerialPortBeta20120106".) +You'll need to copy the required libraries to your Arduino [1.0.6] IDE's library path in order to build this from +source. Copy the inner `libs/SdFat-master/SdFat` and `libs/SerialPort-master/SerialPort` folders to your libraries folder +directly (don't copy the outer folders `SdFat-master/` or `SerialPort-master/`.) To flash the firmware to the OpenLog, you can use an FTDI programmer like the [FTDI Basic Breakout][] along with some way of switching the Tx and Rx pins over (since the OpenLog has them switched) like the [FTDI crossover][] . @@ -20,3 +20,4 @@ your programmer if you're using one. Then click Sketch -> Verify/Compile and Fil [OpenLog 3 Light]: https://github.com/sparkfun/OpenLog/tree/master/firmware/OpenLog_v3_Light [FTDI Basic Breakout]: https://www.sparkfun.com/products/9716 [FTDI crossover]: https://www.sparkfun.com/products/10660 +[1.0.6]: http://arduino.cc/en/Main/Software#toc2 diff --git a/libs/SdFat-master/.gitattributes b/libs/SdFat-master/.gitattributes new file mode 100755 index 0000000..412eeda --- /dev/null +++ b/libs/SdFat-master/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/libs/SdFat-master/.gitignore b/libs/SdFat-master/.gitignore new file mode 100755 index 0000000..b9d6bd9 --- /dev/null +++ b/libs/SdFat-master/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/ADC_ENOB.PNG b/libs/SdFat-master/AnalogBinLoggerExtras/ADC_ENOB.PNG new file mode 100755 index 0000000000000000000000000000000000000000..8f23768de8c1dea311286928f7d9bc1c4a054d04 GIT binary patch literal 89023 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 aMd=T=^UEgY6^kwaUOoqpdNp`ZbN&apO1^FY literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ATmegaADCAccuracy.pdf b/libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ATmegaADCAccuracy.pdf new file mode 100755 index 0000000000000000000000000000000000000000..46ede85676ee7f3cbf999dc675c027a0d5912ee5 GIT binary patch literal 339269 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

!5 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

n+BTV=(Uf^S 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

>l5C>sa97zO{J+0e6c4u4<&T5o>cN*&!f{P}ZC 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�isNF3VmDYg^NN7x=~vdBwEzB_be(U^@R?P)*e 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

7vl`%#zIf%BVe%7^UEJhq~x|6M=)y`ho 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ExcelFFT.pdf b/libs/SdFat-master/AnalogBinLoggerExtras/ADCdocs/ExcelFFT.pdf new file mode 100755 index 0000000000000000000000000000000000000000..5e7c94b979db1dece0b07eb18dff504f8d04ff73 GIT binary patch literal 126931 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

-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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/FFT.png b/libs/SdFat-master/AnalogBinLoggerExtras/FFT.png new file mode 100755 index 0000000000000000000000000000000000000000..dc481a66e745c0b4cad781c76300b0463dad8e2d GIT binary patch literal 46538 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 DbfCGF literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/RateTable.txt b/libs/SdFat-master/AnalogBinLoggerExtras/RateTable.txt new file mode 100755 index 0000000..554ba11 --- /dev/null +++ b/libs/SdFat-master/AnalogBinLoggerExtras/RateTable.txt @@ -0,0 +1,21 @@ +Maximum Sample Rate Table + + ADC clock kHz + 125 250 500 1000 +pins +1 7692 14286 25000 40000 +2 3810 6667 11111 16667 +3 2572 4790 8421 13559 +4 1942 3636 6452 10526 +5 1559 2930 5229 8602 +6 1303 2454 4396 7273 +7 1119 2111 3791 6299 +8 980 1852 3333 5556 +9 872 1649 2974 4969 +10 786 1487 2685 4494 +11 715 1354 2446 4103 +12 656 1242 2247 3774 +13 606 1148 2078 3493 +14 563 1067 1932 3252 +15 525 996 1806 3042 +16 493 935 1695 2857 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/AnalogBinLogger.h b/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/AnalogBinLogger.h new file mode 100755 index 0000000..da4d448 --- /dev/null +++ b/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/AnalogBinLogger.h @@ -0,0 +1,39 @@ +#ifndef AnalogBinLogger_h +#define AnalogBinLogger_h +//------------------------------------------------------------------------------ +// First block of file. +struct metadata_t { + unsigned long adcFrequency; // ADC clock frequency + unsigned long cpuFrequency; // CPU clock frequency + unsigned long sampleInterval; // Sample interval in CPU cycles. + unsigned long recordEightBits; // Size of ADC values, nonzero for 8-bits. + unsigned long pinCount; // Number of analog pins in a sample. + unsigned long pinNumber[123]; // List of pin numbers in a sample. +}; +//------------------------------------------------------------------------------ +// Data block for 8-bit ADC mode. +const size_t DATA_DIM8 = 508; +struct block8_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + unsigned char data[DATA_DIM8]; +}; +//------------------------------------------------------------------------------ +// Data block for 10-bit ADC mode. +const size_t DATA_DIM16 = 254; +struct block16_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + unsigned short data[DATA_DIM16]; +}; +//------------------------------------------------------------------------------ +// Data block for PC use +struct adcdata_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + union { + unsigned char u8[DATA_DIM8]; + unsigned short u16[DATA_DIM16]; + } data; +}; +#endif // AnalogBinLogger_h \ No newline at end of file diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.cpp b/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.cpp new file mode 100755 index 0000000..922644b --- /dev/null +++ b/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.cpp @@ -0,0 +1,82 @@ +#include +#include "AnalogBinLogger.h" +FILE *source; +FILE *destination; +int count = 0; + +int main(int argc, char** argv) { + metadata_t meta; + adcdata_t adc; + // Make sure no padding/size problems. + if (sizeof(meta) != 512 || sizeof(adc) != 512) { + printf("block size error\n"); + return 0; + } + if (argc != 3) { + printf("missing arguments:\n"); + printf("%s binFile csvFile\n", argv[0]); + return 0; + } + source = fopen(argv[1], "rb"); + if (!source) { + printf("open failed for %s\n", argv[1]); + return 0; + } + if (fread(&meta, sizeof(meta), 1, source) != 1) { + printf("read meta data failed\n"); + return 0; + } + if ( meta.pinCount == 0 + || meta.pinCount > (sizeof(meta.pinNumber)/sizeof(meta.pinNumber[0])) + || meta.adcFrequency < 50000 || meta.adcFrequency > 4000000) { + printf("Invalid meta data\n"); + return 0; + } + destination = fopen(argv[2], "w"); + if (!destination) { + printf("open failed for %s\n", argv[2]); + return 0; + } + int pinCount = meta.pinCount; + printf("pinCount: %d\n", pinCount); + printf("Sample pins:"); + for (unsigned i = 0; i < meta.pinCount; i++) { + printf(" %d", meta.pinNumber[i]); + } + printf("\n"); + printf("ADC clock rate: %g kHz\n", 0.001*meta.adcFrequency); + float sampleInterval = (float)meta.sampleInterval/(float)meta.cpuFrequency; + printf("Sample rate: %g per sec\n", 1.0/sampleInterval); + printf("Sample interval: %.4f usec\n", 1.0e6*sampleInterval); + + fprintf(destination, "Interval,%.4f,usec\n", 1.0e6*sampleInterval); + // Write header with pin numbers + for (int i = 0; i < ((int)meta.pinCount - 1); i++) { + fprintf(destination, "pin%d,", meta.pinNumber[i]); + } + fprintf(destination, "pin%d\n", meta.pinNumber[meta.pinCount - 1]); + unsigned maxCount = meta.recordEightBits ? DATA_DIM8 : DATA_DIM16; + while (!feof(source)) { + if (fread(&adc, sizeof(adc), 1, source) != 1) break; + if (adc.count > maxCount) { + printf("****Invalid data block****\n"); + return 0; + } + if (adc.overrun) { + fprintf(destination, "Overruns,%d\n", adc.overrun); + } + for (int i = 0; i < adc.count; i++) { + unsigned value = meta.recordEightBits ? adc.data.u8[i] : adc.data.u16[i]; + if ((i + 1)%pinCount) { + fprintf(destination, "%d,", value); + } else { + fprintf(destination, "%d\n", value); + } + } + count += adc.count; + } + printf("%d ADC values read\n", count); + fclose(source); + fclose(destination); + return 0; +} \ No newline at end of file diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.exe b/libs/SdFat-master/AnalogBinLoggerExtras/bintocsv/bintocsv.exe new file mode 100755 index 0000000000000000000000000000000000000000..cccc192e89d2f69fc7d22aca8eba438fe52144e6 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/readme.txt b/libs/SdFat-master/AnalogBinLoggerExtras/readme.txt new file mode 100755 index 0000000..e7a6fe2 --- /dev/null +++ b/libs/SdFat-master/AnalogBinLoggerExtras/readme.txt @@ -0,0 +1,96 @@ +AnalogBinLogger.ino logs analog data to a binary SD file at high rates. + +Samples are logged at regular intervals by using timer1. Timer/Counter1 +Compare Match B is used to trigger the ADC for the first pin in a sample. +The ADC is triggered for remaining sample pins in the ADC conversion complete +interrupt routine. + +Data is captured in the ADC interrupt routine and saved in 512 byte buffers. + +Buffered data is written to the SD in a function called from loop(). The +entire data set is written to a large contiguous file as a single multi-block +write. This reduces write latency problems. + +Many inexpensive SD cards work well at lower rates. I used a $6.00 +SanDisk 4 GB class 4 card for testing. + +SanDisk class 4 cards work well at fairly high rates. I used the 4 GB SanDisk +card to log a single pin at 40,000 samples per second. + +You may need to increase the time between samples if your card has higher +latency. Using a Mega Arduino can help since it has more buffering. + +The bintocsv folder contains a PC program for converting binary files to +CSV files. I have included a executable for Windows. Linux and Mac users +can build from the included source files. bintocvs is a command line program. + +bintocsv binFile csvFile + +AnalogBinLogger requires a recent version of the SdFat library. The SdFat +folder contains a beta version I used for development. + +The latest stable version is here: +http://code.google.com/p/sdfatlib/downloads/list + +You also need to install the included BufferedWriter library. It provides +fast text formatting. + +Example data for a 2 kHz sine wave logged at 40,000 samples per second is +shown in DATA.PNG and FFT.PNG shows a FFT of the data. See ExcelFFT.pdf +in the ADCdocs folder for details on calculating a FFT. + +The accuracy of the ADC samples depends on the ADC clock rate. See the +ADC_ENOB.PNG file for a plot of accuracy vs ADC clock frequency. + +See files in the ADCdocs folder for more information on ADC accuracy. + +To modify this program you will need a good knowledge of the Arduino +ADC, timer1 and C++ programming. This is not for the newbie. + +I have an LED and resistor connected to pin 3 to signal fatal errors and +data overruns. Fatal errors are indicated by a blinking led. Overrun errors +are indicated by a solid lit led. The count of samples dropped is written +to the SD and data logging continues. + +You can disable the error led feature by setting the error pin number negative: + +To use AnalogBinLogger, install these items. + +Place the BufferWriter and SdFat folders in your sketchbook libraries folder. + +Place the AnalogIsrLogger folder in your sketchbook folder. + +You must edit the configuration constants at the beginning of the program +to set the sample pins, sample rate, and other configuration values. + +Initially the program is setup to log the first five analog pins at 5000 +samples per second. Change these values to suit your needs. + +See RateTable.txt for maximum allowed sample rates vs pin count and ADC clock +frequency. + +The program has four commands: + +c - convert file to CSV +d - dump data to Serial +e - overrun error details +r - record ADC data + +All commands can be terminated by entering a character from the serial monitor. + +The c command converts the current binary file to a text file. Entering a +character on the serial monitor terminates the command. + +The d command converts the binary file to text and displays it on the serial +monitor. Entering a character on the serial monitor terminates the command. + +The e command displays details about overruns in the current binary file. +Data overruns happen when data samples are lost due to long write latency +of the SD. + +The r command will record ADC data to a binary file. It will terminate +when a character is entered on the serial monitor or the the maximum file +block count has been reached. + +A number of program options can be set by changing constants at the beginning +of the program. \ No newline at end of file diff --git a/libs/SdFat-master/ArduinoDue.txt b/libs/SdFat-master/ArduinoDue.txt new file mode 100755 index 0000000..b672f40 --- /dev/null +++ b/libs/SdFat-master/ArduinoDue.txt @@ -0,0 +1,62 @@ +Support has been added for the Arduino Due. + +You must connect your SD socket to the 6-pin "ISP connector". You must have short +wires or a custom shield to run at full speed, 42 MHz. + +If you have problems use a lower SPI speed. You can also check for SPI +errors by editing SdFatCobfig.h to enable CRC checking. + +You should be be able to use any digital pin for SD chip select. The default +pin is SS which is pin 10 for Due. + +The default SPI rate is 42 MHz. You can set SD chip select and the SPI rate +by calling: + +bool SdFat::begin(uint8_t chipSelectPin, uint8_t spiRateID); + +The second argument, spiRateID, sets the SCK rate and can be these symbols: + +SPI_FULL_SPEED - 42 MHz + +SPI_DIV3_SPEED - 28 MHz + +SPI_HALF_SPEED - 21 MHz + +SPI_DIV6_SPEED - 14 MHz + +SPI_QUARTER_SPEED 10.5 MHz + +SPI_EIGHTH_SPEED 5.25 MHz + +Large reads and writes use fast multi-block SD read/write commands. For optimal +speed, use records that are a multiple of 512 bytes. + +Run the bench.ino example to explore large read/write speed. + +Replace this line: + +#define BUF_SIZE 100 + +With a large size like this: + +#define BUF_SIZE 8192 + +For best results the record size should be a power of two (512, 1024, 2048, +4096, 8192). In this case records will be aligned with FAT cluster boundaries. + +Since Due is fast, increase the test file size by editing this line: + +#define FILE_SIZE_MB 5 + +Run the PrintBenchmark.ino example to compare text formatting speed of Due +with AVR boards. + +A number of options are available to configure SPI for the Due board. + +You can use the standard SPI.h library by editing SdFatConfig.h and set +USE_ARDUINO_SPI_LIBRARY nonzero. You must include SPI.h in your sketch. + +Several options can be set in Sd2Card.cpp in the USE_NATIVE_SAM3X_SPI +section. These include USE_SAM3X_DMAC to control use of DMA and +USE_SAM3X_BUS_MATRIX_FIX to change Bus Matrix operation. Most people +will not need to change these. \ No newline at end of file diff --git a/libs/SdFatBeta20120108/MultipleCards.txt b/libs/SdFat-master/MultipleCards.txt similarity index 100% rename from libs/SdFatBeta20120108/MultipleCards.txt rename to libs/SdFat-master/MultipleCards.txt diff --git a/libs/SdFatBeta20120108/QuickStart.txt b/libs/SdFat-master/QuickStart.txt similarity index 85% rename from libs/SdFatBeta20120108/QuickStart.txt rename to libs/SdFat-master/QuickStart.txt index a9d35b0..5a82970 100755 --- a/libs/SdFatBeta20120108/QuickStart.txt +++ b/libs/SdFat-master/QuickStart.txt @@ -5,7 +5,7 @@ subfolder in your main sketches folder. You may need to create the libraries folder. Restart the Arduino IDE if it was open. -Run the QuickStart.pde sketch from the +Run the QuickStart.ino sketch from the libraries/SdFat/examples/QuickStart folder. Click the IDE up-arrow icon then -> libraries -> SdFat -> QuickStart. @@ -18,4 +18,4 @@ http://forums.adafruit.com/ http://arduino.cc/forum/ -If QuickStart.pde runs successfully try more examples. +If QuickStart.ino runs successfully try more examples. diff --git a/libs/SdFat-master/SPI_Transactions.txt b/libs/SdFat-master/SPI_Transactions.txt new file mode 100755 index 0000000..f9bef02 --- /dev/null +++ b/libs/SdFat-master/SPI_Transactions.txt @@ -0,0 +1,23 @@ +To enable support for SPI transactions, edit SfFatCinfig.h and modify these +defines. + +//------------------------------------------------------------------------------ +/** + * Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature + * of the standard Arduino SPI library. You must include SPI.h in your + * sketches when ENABLE_SPI_TRANSACTION is nonzero. + */ +#define ENABLE_SPI_TRANSACTION 0 +//------------------------------------------------------------------------------ +/** + * Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during + * SD card busy waits. + * + * This will allow interrupt routines to access the SPI bus if + * ENABLE_SPI_TRANSACTION is nonzero. + * + * Setting ENABLE_SPI_YIELD will introduce some extra overhead and will + * slightly slow transfer rates. A few older SD cards may fail when + * ENABLE_SPI_YIELD is nonzero. + */ +#define ENABLE_SPI_YIELD 0 \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat.html b/libs/SdFat-master/SdFat.html similarity index 100% rename from libs/SdFatBeta20120108/SdFat.html rename to libs/SdFat-master/SdFat.html diff --git a/libs/SdFatBeta20120108/SdFat/ArduinoStream.h b/libs/SdFat-master/SdFat/ArduinoStream.h similarity index 80% rename from libs/SdFatBeta20120108/SdFat/ArduinoStream.h rename to libs/SdFat-master/SdFat/ArduinoStream.h index d1c98b8..c6d53b9 100755 --- a/libs/SdFatBeta20120108/SdFat/ArduinoStream.h +++ b/libs/SdFat-master/SdFat/ArduinoStream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -37,33 +37,34 @@ class ArduinoInStream : public ibufstream { * \param[in] buf buffer for input line * \param[in] size size of input buffer */ - ArduinoInStream(Stream &hws, char* buf, uint16_t size) { - hw_ = &hws; - line_ = buf; - size_ = size; + ArduinoInStream(Stream &hws, char* buf, size_t size) { + m_hw = &hws; + m_line = buf; + m_size = size; } /** read a line. */ void readline() { - uint16_t i = 0; + size_t i = 0; uint32_t t; - line_[0] = '\0'; - while (!hw_->available()); + m_line[0] = '\0'; + while (!m_hw->available()) {} while (1) { t = millis(); - while (!hw_->available()) { + while (!m_hw->available()) { if ((millis() - t) > 10) goto done; } - if (i >= (size_ - 1)) { + if (i >= (m_size - 1)) { setstate(failbit); return; } - line_[i++] = hw_->read(); - line_[i] = '\0'; + m_line[i++] = m_hw->read(); + m_line[i] = '\0'; } done: - init(line_); + init(m_line); } + protected: /** Internal - do not use. * \param[in] off @@ -76,10 +77,11 @@ class ArduinoInStream : public ibufstream { * \return true/false. */ bool seekpos(pos_type pos) {return false;} + private: - char *line_; - uint16_t size_; - Stream* hw_; + char *m_line; + size_t m_size; + Stream* m_hw; }; //============================================================================== /** @@ -92,7 +94,8 @@ class ArduinoOutStream : public ostream { * * \param[in] pr Print object for this ArduinoOutStream. */ - explicit ArduinoOutStream(Print& pr) : pr_(&pr) {} + explicit ArduinoOutStream(Print& pr) : m_pr(&pr) {} + protected: /// @cond SHOW_PROTECTED /** @@ -100,10 +103,10 @@ class ArduinoOutStream : public ostream { * \param[in] c */ void putch(char c) { - if (c == '\n') pr_->write('\r'); - pr_->write(c); + if (c == '\n') m_pr->write('\r'); + m_pr->write(c); } - void putstr(const char* str) {pr_->write(str);} + void putstr(const char* str) {m_pr->write(str);} bool seekoff(off_type off, seekdir way) {return false;} bool seekpos(pos_type pos) {return false;} bool sync() {return true;} @@ -111,6 +114,6 @@ class ArduinoOutStream : public ostream { /// @endcond private: ArduinoOutStream() {} - Print* pr_; + Print* m_pr; }; #endif // ArduinoStream_h diff --git a/libs/SdFat-master/SdFat/MinimumSerial.cpp b/libs/SdFat-master/SdFat/MinimumSerial.cpp new file mode 100755 index 0000000..122a8a1 --- /dev/null +++ b/libs/SdFat-master/SdFat/MinimumSerial.cpp @@ -0,0 +1,71 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +#include +#if defined(UDR0) || defined(DOXYGEN) +#include +//------------------------------------------------------------------------------ +/** + * Set baud rate for serial port zero and enable in non interrupt mode. + * Do not call this function if you use another serial library. + * \param[in] baud rate + */ +void MinimumSerial::begin(uint32_t baud) { + uint16_t baud_setting; + // don't worry, the compiler will squeeze out F_CPU != 16000000UL + if (F_CPU != 16000000UL || baud != 57600) { + // Double the USART Transmission Speed + UCSR0A = 1 << U2X0; + baud_setting = (F_CPU / 4 / baud - 1) / 2; + } else { + // hardcoded exception for compatibility with the bootloader shipped + // with the Duemilanove and previous boards and the firmware on the 8U2 + // on the Uno and Mega 2560. + UCSR0A = 0; + baud_setting = (F_CPU / 8 / baud - 1) / 2; + } + // assign the baud_setting + UBRR0H = baud_setting >> 8; + UBRR0L = baud_setting; + // enable transmit and receive + UCSR0B |= (1 << TXEN0) | (1 << RXEN0); +} +//------------------------------------------------------------------------------ +/** + * Unbuffered read + * \return -1 if no character is available or an available character. + */ +int MinimumSerial::read() { + if (UCSR0A & (1 << RXC0)) return UDR0; + return -1; +} +//------------------------------------------------------------------------------ +/** + * Unbuffered write + * + * \param[in] b byte to write. + * \return 1 + */ +size_t MinimumSerial::write(uint8_t b) { + while (((1 << UDRIE0) & UCSR0B) || !(UCSR0A & (1 << UDRE0))) {} + UDR0 = b; + return 1; +} +MinimumSerial MiniSerial; +#endif // defined(UDR0) || defined(DOXYGEN) diff --git a/libs/SdFatBeta20120108/SdFat/SdFile.h b/libs/SdFat-master/SdFat/MinimumSerial.h similarity index 54% rename from libs/SdFatBeta20120108/SdFat/SdFile.h rename to libs/SdFat-master/SdFat/MinimumSerial.h index 47307e8..57003c8 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFile.h +++ b/libs/SdFat-master/SdFat/MinimumSerial.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -17,31 +17,20 @@ * along with the Arduino SdFat Library. If not, see * . */ +#ifndef MinimumSerial_h +#define MinimumSerial_h /** - * \file - * \brief SdFile class + * \class MinimumSerial + * \brief mini serial class for the %SdFat library. */ -#include -#ifndef SdFile_h -#define SdFile_h -//------------------------------------------------------------------------------ -/** - * \class SdFile - * \brief SdBaseFile with Print. - */ -class SdFile : public SdBaseFile, public Print { +class MinimumSerial : public Print { public: - SdFile() {} - SdFile(const char* name, uint8_t oflag); -#if ARDUINO < 100 - void write(uint8_t b); - void write(const char* str); -#else // ARDUINO < 100 + void begin(uint32_t baud); + int read(); size_t write(uint8_t b); - int16_t write(const char* str); -#endif // ARDUINO < 100 - int16_t write(const void* buf, uint16_t nbyte); - void write_P(PGM_P str); - void writeln_P(PGM_P str); + using Print::write; }; -#endif // SdFile_h +#ifdef UDR0 +extern MinimumSerial MiniSerial; +#endif // UDR0 +#endif // MinimumSerial_h diff --git a/libs/SdFatBeta20120108/SdFat/Sd2Card.cpp b/libs/SdFat-master/SdFat/Sd2Card.cpp similarity index 60% rename from libs/SdFatBeta20120108/SdFat/Sd2Card.cpp rename to libs/SdFat-master/SdFat/Sd2Card.cpp index efe13d7..0768d45 100755 --- a/libs/SdFatBeta20120108/SdFat/Sd2Card.cpp +++ b/libs/SdFat-master/SdFat/Sd2Card.cpp @@ -1,5 +1,5 @@ /* Arduino Sd2Card Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino Sd2Card Library * @@ -17,168 +17,228 @@ * along with the Arduino Sd2Card Library. If not, see * . */ -#if ARDUINO < 100 -#include -#else // ARDUINO -#include -#endif // ARDUINO #include -#include -//------------------------------------------------------------------------------ -#ifndef SOFTWARE_SPI -// functions for hardware SPI -//------------------------------------------------------------------------------ -// make sure SPCR rate is in expected bits -#if (SPR0 != 0 || SPR1 != 1) -#error unexpected SPCR bits -#endif -/** - * Initialize hardware SPI - * Set SCK rate to F_CPU/pow(2, 1 + spiRate) for spiRate [0,6] - */ -static void spiInit(uint8_t spiRate) { - // See avr processor documentation - SPCR = (1 << SPE) | (1 << MSTR) | (spiRate >> 1); - SPSR = spiRate & 1 || spiRate == 6 ? 0 : 1 << SPI2X; -} -//------------------------------------------------------------------------------ -/** SPI receive a byte */ -static uint8_t spiRec() { - SPDR = 0XFF; - while (!(SPSR & (1 << SPIF))); - return SPDR; -} -//------------------------------------------------------------------------------ -/** SPI read data - only one call so force inline */ -static inline __attribute__((always_inline)) - void spiRead(uint8_t* buf, uint16_t nbyte) { - if (nbyte-- == 0) return; - SPDR = 0XFF; - for (uint16_t i = 0; i < nbyte; i++) { - while (!(SPSR & (1 << SPIF))); - buf[i] = SPDR; - SPDR = 0XFF; +#include +#if !USE_SOFTWARE_SPI && ENABLE_SPI_TRANSACTION +#include +#endif // !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) +// debug trace macro +#define SD_TRACE(m, b) +// #define SD_TRACE(m, b) Serial.print(m);Serial.println(b); +//------------------------------------------------------------------------------ +SdSpi Sd2Card::m_spi; +//============================================================================== +#if USE_SD_CRC +// CRC functions +//------------------------------------------------------------------------------ +static uint8_t CRC7(const uint8_t* data, uint8_t n) { + uint8_t crc = 0; + for (uint8_t i = 0; i < n; i++) { + uint8_t d = data[i]; + for (uint8_t j = 0; j < 8; j++) { + crc <<= 1; + if ((d & 0x80) ^ (crc & 0x80)) crc ^= 0x09; + d <<= 1; + } } - while (!(SPSR & (1 << SPIF))); - buf[nbyte] = SPDR; + return (crc << 1) | 1; } //------------------------------------------------------------------------------ -/** SPI send a byte */ -static void spiSend(uint8_t b) { - SPDR = b; - while (!(SPSR & (1 << SPIF))); +#if USE_SD_CRC == 1 +// slower CRC-CCITT +// uses the x^16,x^12,x^5,x^1 polynomial. +static uint16_t CRC_CCITT(const uint8_t *data, size_t n) { + uint16_t crc = 0; + for (size_t i = 0; i < n; i++) { + crc = (uint8_t)(crc >> 8) | (crc << 8); + crc ^= data[i]; + crc ^= (uint8_t)(crc & 0xff) >> 4; + crc ^= crc << 12; + crc ^= (crc & 0xff) << 5; + } + return crc; } -//------------------------------------------------------------------------------ -/** SPI send block - only one call so force inline */ -static inline __attribute__((always_inline)) - void spiSendBlock(uint8_t token, const uint8_t* buf) { - SPDR = token; - for (uint16_t i = 0; i < 512; i += 2) { - while (!(SPSR & (1 << SPIF))); - SPDR = buf[i]; - while (!(SPSR & (1 << SPIF))); - SPDR = buf[i + 1]; +#elif USE_SD_CRC > 1 // CRC_CCITT +//------------------------------------------------------------------------------ +// faster CRC-CCITT +// uses the x^16,x^12,x^5,x^1 polynomial. +#ifdef __AVR__ +static const uint16_t crctab[] PROGMEM = { +#else // __AVR__ +static const uint16_t crctab[] = { +#endif // __AVR__ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; +static uint16_t CRC_CCITT(const uint8_t* data, size_t n) { + uint16_t crc = 0; + for (size_t i = 0; i < n; i++) { +#ifdef __AVR__ + crc = pgm_read_word(&crctab[(crc >> 8 ^ data[i]) & 0XFF]) ^ (crc << 8); +#else // __AVR__ + crc = crctab[(crc >> 8 ^ data[i]) & 0XFF] ^ (crc << 8); +#endif // __AVR__ } - while (!(SPSR & (1 << SPIF))); + return crc; } +#endif // CRC_CCITT +#endif // USE_SD_CRC +//============================================================================== +// Sd2Card member functions //------------------------------------------------------------------------------ -#else // SOFTWARE_SPI -//------------------------------------------------------------------------------ -/** nop to tune soft SPI timing */ -#define nop asm volatile ("nop\n\t") -//------------------------------------------------------------------------------ -/** Soft SPI receive byte */ -static uint8_t spiRec() { - uint8_t data = 0; - // no interrupts during byte receive - about 8 us - cli(); - // output pin high - like sending 0XFF - fastDigitalWrite(SPI_MOSI_PIN, HIGH); - - for (uint8_t i = 0; i < 8; i++) { - fastDigitalWrite(SPI_SCK_PIN, HIGH); +/** + * Initialize an SD flash memory card. + * + * \param[in] chipSelectPin SD chip select pin number. + * \param[in] sckDivisor SPI SCK clock rate divisor. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. The reason for failure + * can be determined by calling errorCode() and errorData(). + */ +bool Sd2Card::begin(uint8_t chipSelectPin, uint8_t sckDivisor) { + m_errorCode = m_type = 0; + m_chipSelectPin = chipSelectPin; + // 16-bit init start time allows over a minute + uint16_t t0 = (uint16_t)millis(); + uint32_t arg; - // adjust so SCK is nice - nop; - nop; + pinMode(m_chipSelectPin, OUTPUT); + digitalWrite(m_chipSelectPin, HIGH); + m_spi.begin(); - data <<= 1; + // set SCK rate for initialization commands + m_sckDivisor = SPI_SCK_INIT_DIVISOR; + m_spi.init(m_sckDivisor); - if (fastDigitalRead(SPI_MISO_PIN)) data |= 1; + // must supply min of 74 clock cycles with CS high. + for (uint8_t i = 0; i < 10; i++) m_spi.send(0XFF); - fastDigitalWrite(SPI_SCK_PIN, LOW); + // command to go idle in SPI mode + while (cardCommand(CMD0, 0) != R1_IDLE_STATE) { + if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { + error(SD_CARD_ERROR_CMD0); + goto fail; + } } - // enable interrupts - sei(); - return data; -} -//------------------------------------------------------------------------------ -/** Soft SPI read data */ -static void spiRead(uint8_t* buf, uint16_t nbyte) { - for (uint16_t i = 0; i < nbyte; i++) { - buf[i] = spiRec(); +#if USE_SD_CRC + if (cardCommand(CMD59, 1) != R1_IDLE_STATE) { + error(SD_CARD_ERROR_CMD59); + goto fail; } -} -//------------------------------------------------------------------------------ -/** Soft SPI send byte */ -static void spiSend(uint8_t data) { - // no interrupts during byte send - about 8 us - cli(); - for (uint8_t i = 0; i < 8; i++) { - fastDigitalWrite(SPI_SCK_PIN, LOW); - - fastDigitalWrite(SPI_MOSI_PIN, data & 0X80); - - data <<= 1; +#endif // USE_SD_CRC + // check SD version + while (1) { + if (cardCommand(CMD8, 0x1AA) == (R1_ILLEGAL_COMMAND | R1_IDLE_STATE)) { + type(SD_CARD_TYPE_SD1); + break; + } + for (uint8_t i = 0; i < 4; i++) m_status = m_spi.receive(); + if (m_status == 0XAA) { + type(SD_CARD_TYPE_SD2); + break; + } + if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { + error(SD_CARD_ERROR_CMD8); + goto fail; + } + } + // initialize card and send host supports SDHC if SD2 + arg = type() == SD_CARD_TYPE_SD2 ? 0X40000000 : 0; - fastDigitalWrite(SPI_SCK_PIN, HIGH); + while (cardAcmd(ACMD41, arg) != R1_READY_STATE) { + // check for timeout + if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { + error(SD_CARD_ERROR_ACMD41); + goto fail; + } } - // hold SCK high for a few ns - nop; - nop; - nop; - nop; - - fastDigitalWrite(SPI_SCK_PIN, LOW); - // enable interrupts - sei(); -} -//------------------------------------------------------------------------------ -/** Soft SPI send block */ - void spiSendBlock(uint8_t token, const uint8_t* buf) { - spiSend(token); - for (uint16_t i = 0; i < 512; i++) { - spiSend(buf[i]); + // if SD2 read OCR register to check for SDHC card + if (type() == SD_CARD_TYPE_SD2) { + if (cardCommand(CMD58, 0)) { + error(SD_CARD_ERROR_CMD58); + goto fail; + } + if ((m_spi.receive() & 0XC0) == 0XC0) type(SD_CARD_TYPE_SDHC); + // Discard rest of ocr - contains allowed voltage range. + for (uint8_t i = 0; i < 3; i++) m_spi.receive(); } + chipSelectHigh(); + m_sckDivisor = sckDivisor; + return true; + + fail: + chipSelectHigh(); + return false; } -#endif // SOFTWARE_SPI //------------------------------------------------------------------------------ // send command and return error code. Return zero for OK uint8_t Sd2Card::cardCommand(uint8_t cmd, uint32_t arg) { // select card chipSelectLow(); - // wait up to 300 ms if busy - waitNotBusy(300); + // wait if busy + waitNotBusy(SD_WRITE_TIMEOUT); + + uint8_t *pa = reinterpret_cast(&arg); + +#if USE_SD_CRC + // form message + uint8_t d[6] = {cmd | 0X40, pa[3], pa[2], pa[1], pa[0]}; + // add crc + d[5] = CRC7(d, 5); + + // send message + for (uint8_t k = 0; k < 6; k++) m_spi.send(d[k]); +#else // USE_SD_CRC // send command - spiSend(cmd | 0x40); + m_spi.send(cmd | 0x40); // send argument - for (int8_t s = 24; s >= 0; s -= 8) spiSend(arg >> s); + for (int8_t i = 3; i >= 0; i--) m_spi.send(pa[i]); - // send CRC - uint8_t crc = 0XFF; - if (cmd == CMD0) crc = 0X95; // correct crc for CMD0 with arg 0 - if (cmd == CMD8) crc = 0X87; // correct crc for CMD8 with arg 0X1AA - spiSend(crc); + // send CRC - correct for CMD0 with arg zero or CMD8 with arg 0X1AA + m_spi.send(cmd == CMD0 ? 0X95 : 0X87); +#endif // USE_SD_CRC // skip stuff byte for stop read - if (cmd == CMD12) spiRec(); + if (cmd == CMD12) m_spi.receive(); // wait for response - for (uint8_t i = 0; ((status_ = spiRec()) & 0X80) && i != 0XFF; i++); - return status_; + for (uint8_t i = 0; ((m_status = m_spi.receive()) & 0X80) && i != 0XFF; i++) { + } + return m_status; } //------------------------------------------------------------------------------ /** @@ -198,8 +258,8 @@ uint32_t Sd2Card::cardSize() { | csd.v1.c_size_mult_low; return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); } else if (csd.v2.csd_ver == 1) { - uint32_t c_size = ((uint32_t)csd.v2.c_size_high << 16) - | (csd.v2.c_size_mid << 8) | csd.v2.c_size_low; + uint32_t c_size = 0X10000L * csd.v2.c_size_high + 0X100L + * (uint32_t)csd.v2.c_size_mid + csd.v2.c_size_low; return (c_size + 1) << 10; } else { error(SD_CARD_ERROR_BAD_CSD); @@ -207,17 +267,28 @@ uint32_t Sd2Card::cardSize() { } } //------------------------------------------------------------------------------ +void Sd2Card::spiYield() { +#if ENABLE_SPI_YIELD && !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) + chipSelectHigh(); + chipSelectLow(); +#endif // ENABLE_SPI_YIELD && !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) +} +//------------------------------------------------------------------------------ void Sd2Card::chipSelectHigh() { - digitalWrite(chipSelectPin_, HIGH); + digitalWrite(m_chipSelectPin, HIGH); // insure MISO goes high impedance - spiSend(0XFF); + m_spi.send(0XFF); +#if !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) + SPI.endTransaction(); +#endif // !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) } //------------------------------------------------------------------------------ void Sd2Card::chipSelectLow() { -#ifndef SOFTWARE_SPI - spiInit(spiRate_); -#endif // SOFTWARE_SPI - digitalWrite(chipSelectPin_, LOW); +#if !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) + SPI.beginTransaction(SPISettings()); +#endif // !USE_SOFTWARE_SPI && defined(SPI_HAS_TRANSACTION) + m_spi.init(m_sckDivisor); + digitalWrite(m_chipSelectPin, LOW); } //------------------------------------------------------------------------------ /** Erase a range of blocks. @@ -246,7 +317,7 @@ bool Sd2Card::erase(uint32_t firstBlock, uint32_t lastBlock) { goto fail; } } - if (type_ != SD_CARD_TYPE_SDHC) { + if (m_type != SD_CARD_TYPE_SDHC) { firstBlock <<= 9; lastBlock <<= 9; } @@ -279,94 +350,19 @@ bool Sd2Card::eraseSingleBlockEnable() { } //------------------------------------------------------------------------------ /** - * Initialize an SD flash memory card. - * - * \param[in] sckRateID SPI clock rate selector. See setSckRate(). - * \param[in] chipSelectPin SD chip select pin number. - * - * \return The value one, true, is returned for success and - * the value zero, false, is returned for failure. The reason for failure - * can be determined by calling errorCode() and errorData(). + * Check for busy. MISO low indicates the card is busy. + * + * \return true if busy else false. */ -bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) { - errorCode_ = type_ = 0; - chipSelectPin_ = chipSelectPin; - // 16-bit init start time allows over a minute - uint16_t t0 = (uint16_t)millis(); - uint32_t arg; - - // set pin modes - pinMode(chipSelectPin_, OUTPUT); - digitalWrite(chipSelectPin_, HIGH); - pinMode(SPI_MISO_PIN, INPUT); - pinMode(SPI_MOSI_PIN, OUTPUT); - pinMode(SPI_SCK_PIN, OUTPUT); - -#ifndef SOFTWARE_SPI - // SS must be in output mode even it is not chip select - pinMode(SS_PIN, OUTPUT); - // set SS high - may be chip select for another SPI device -#if SET_SPI_SS_HIGH - digitalWrite(SS_PIN, HIGH); -#endif // SET_SPI_SS_HIGH - // set SCK rate for initialization commands - spiRate_ = SPI_SD_INIT_RATE; - spiInit(spiRate_); -#endif // SOFTWARE_SPI - - // must supply min of 74 clock cycles with CS high. - for (uint8_t i = 0; i < 10; i++) spiSend(0XFF); - - // command to go idle in SPI mode - while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) { - if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { - error(SD_CARD_ERROR_CMD0); - goto fail; - } - } - // check SD version - if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) { - type(SD_CARD_TYPE_SD1); - } else { - // only need last byte of r7 response - for (uint8_t i = 0; i < 4; i++) status_ = spiRec(); - if (status_ != 0XAA) { - error(SD_CARD_ERROR_CMD8); - goto fail; - } - type(SD_CARD_TYPE_SD2); - } - // initialize card and send host supports SDHC if SD2 - arg = type() == SD_CARD_TYPE_SD2 ? 0X40000000 : 0; - - while ((status_ = cardAcmd(ACMD41, arg)) != R1_READY_STATE) { - // check for timeout - if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { - error(SD_CARD_ERROR_ACMD41); - goto fail; - } - } - // if SD2 read OCR register to check for SDHC card - if (type() == SD_CARD_TYPE_SD2) { - if (cardCommand(CMD58, 0)) { - error(SD_CARD_ERROR_CMD58); - goto fail; - } - if ((spiRec() & 0XC0) == 0XC0) type(SD_CARD_TYPE_SDHC); - // discard rest of ocr - contains allowed voltage range - for (uint8_t i = 0; i < 3; i++) spiRec(); +bool Sd2Card::isBusy() { + bool rtn; + chipSelectLow(); + for (uint8_t i = 0; i < 8; i++) { + rtn = m_spi.receive() != 0XFF; + if (!rtn) break; } chipSelectHigh(); - -#ifndef SOFTWARE_SPI - return setSckRate(sckRateID); -#else // SOFTWARE_SPI - return true; -#endif // SOFTWARE_SPI - - fail: - chipSelectHigh(); - return false; + return rtn; } //------------------------------------------------------------------------------ /** @@ -379,6 +375,7 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) { * the value zero, false, is returned for failure. */ bool Sd2Card::readBlock(uint32_t blockNumber, uint8_t* dst) { + SD_TRACE("RB", blockNumber); // use address if not SDHC card if (type()!= SD_CARD_TYPE_SDHC) blockNumber <<= 9; if (cardCommand(CMD17, blockNumber)) { @@ -404,25 +401,62 @@ bool Sd2Card::readData(uint8_t *dst) { return readData(dst, 512); } //------------------------------------------------------------------------------ -bool Sd2Card::readData(uint8_t* dst, uint16_t count) { +bool Sd2Card::readData(uint8_t* dst, size_t count) { +#if USE_SD_CRC + uint16_t crc; +#endif // USE_SD_CRC // wait for start block token uint16_t t0 = millis(); - while ((status_ = spiRec()) == 0XFF) { + while ((m_status = m_spi.receive()) == 0XFF) { if (((uint16_t)millis() - t0) > SD_READ_TIMEOUT) { error(SD_CARD_ERROR_READ_TIMEOUT); goto fail; } + spiYield(); } - if (status_ != DATA_START_BLOCK) { + if (m_status != DATA_START_BLOCK) { error(SD_CARD_ERROR_READ); goto fail; } // transfer data - spiRead(dst, count); + if ((m_status = m_spi.receive(dst, count))) { + error(SD_CARD_ERROR_SPI_DMA); + goto fail; + } + +#if USE_SD_CRC + // get crc + crc = (m_spi.receive() << 8) | m_spi.receive(); + if (crc != CRC_CCITT(dst, count)) { + error(SD_CARD_ERROR_READ_CRC); + goto fail; + } +#else + // discard crc + m_spi.receive(); + m_spi.receive(); +#endif // USE_SD_CRC + chipSelectHigh(); + return true; + + fail: + chipSelectHigh(); + return false; +} +//------------------------------------------------------------------------------ +/** Read OCR register. + * + * \param[out] ocr Value of OCR register. + * \return true for success else false. + */ +bool Sd2Card::readOCR(uint32_t* ocr) { + uint8_t *p = reinterpret_cast(ocr); + if (cardCommand(CMD58, 0)) { + error(SD_CARD_ERROR_CMD58); + goto fail; + } + for (uint8_t i = 0; i < 4; i++) p[3-i] = m_spi.receive(); - // discard CRC - spiRec(); - spiRec(); chipSelectHigh(); return true; @@ -456,6 +490,7 @@ bool Sd2Card::readRegister(uint8_t cmd, void* buf) { * the value zero, false, is returned for failure. */ bool Sd2Card::readStart(uint32_t blockNumber) { + SD_TRACE("RS", blockNumber); if (type()!= SD_CARD_TYPE_SDHC) blockNumber <<= 9; if (cardCommand(CMD18, blockNumber)) { error(SD_CARD_ERROR_CMD18); @@ -475,7 +510,6 @@ bool Sd2Card::readStart(uint32_t blockNumber) { * the value zero, false, is returned for failure. */ bool Sd2Card::readStop() { - chipSelectLow(); if (cardCommand(CMD12, 0)) { error(SD_CARD_ERROR_CMD12); goto fail; @@ -488,32 +522,12 @@ bool Sd2Card::readStop() { return false; } //------------------------------------------------------------------------------ -/** - * Set the SPI clock rate. - * - * \param[in] sckRateID A value in the range [0, 6]. - * - * The SPI clock will be set to F_CPU/pow(2, 1 + sckRateID). The maximum - * SPI rate is F_CPU/2 for \a sckRateID = 0 and the minimum rate is F_CPU/128 - * for \a scsRateID = 6. - * - * \return The value one, true, is returned for success and the value zero, - * false, is returned for an invalid value of \a sckRateID. - */ -bool Sd2Card::setSckRate(uint8_t sckRateID) { - if (sckRateID > 6) { - error(SD_CARD_ERROR_SCK_RATE); - return false; - } - spiRate_ = sckRateID; - return true; -} -//------------------------------------------------------------------------------ // wait for card to go not busy bool Sd2Card::waitNotBusy(uint16_t timeoutMillis) { uint16_t t0 = millis(); - while (spiRec() != 0XFF) { + while (m_spi.receive() != 0XFF) { if (((uint16_t)millis() - t0) >= timeoutMillis) goto fail; + spiYield(); } return true; @@ -530,6 +544,7 @@ bool Sd2Card::waitNotBusy(uint16_t timeoutMillis) { * the value zero, false, is returned for failure. */ bool Sd2Card::writeBlock(uint32_t blockNumber, const uint8_t* src) { + SD_TRACE("WB", blockNumber); // use address if not SDHC card if (type() != SD_CARD_TYPE_SDHC) blockNumber <<= 9; if (cardCommand(CMD24, blockNumber)) { @@ -538,16 +553,20 @@ bool Sd2Card::writeBlock(uint32_t blockNumber, const uint8_t* src) { } if (!writeData(DATA_START_BLOCK, src)) goto fail; +#define CHECK_PROGRAMMING 0 +#if CHECK_PROGRAMMING // wait for flash programming to complete if (!waitNotBusy(SD_WRITE_TIMEOUT)) { error(SD_CARD_ERROR_WRITE_TIMEOUT); goto fail; } // response is r2 so get and check two bytes for nonzero - if (cardCommand(CMD13, 0) || spiRec()) { + if (cardCommand(CMD13, 0) || m_spi.receive()) { error(SD_CARD_ERROR_WRITE_PROGRAMMING); goto fail; } +#endif // CHECK_PROGRAMMING + chipSelectHigh(); return true; @@ -577,13 +596,18 @@ bool Sd2Card::writeData(const uint8_t* src) { //------------------------------------------------------------------------------ // send one block of data for write block or write multiple blocks bool Sd2Card::writeData(uint8_t token, const uint8_t* src) { - spiSendBlock(token, src); - - spiSend(0xff); // dummy crc - spiSend(0xff); // dummy crc - - status_ = spiRec(); - if ((status_ & DATA_RES_MASK) != DATA_RES_ACCEPTED) { +#if USE_SD_CRC + uint16_t crc = CRC_CCITT(src, 512); +#else // USE_SD_CRC + uint16_t crc = 0XFFFF; +#endif // USE_SD_CRC + m_spi.send(token); + m_spi.send(src, 512); + m_spi.send(crc >> 8); + m_spi.send(crc & 0XFF); + + m_status = m_spi.receive(); + if ((m_status & DATA_RES_MASK) != DATA_RES_ACCEPTED) { error(SD_CARD_ERROR_WRITE); goto fail; } @@ -606,6 +630,7 @@ bool Sd2Card::writeData(uint8_t token, const uint8_t* src) { * the value zero, false, is returned for failure. */ bool Sd2Card::writeStart(uint32_t blockNumber, uint32_t eraseCount) { + SD_TRACE("WS", blockNumber); // send pre-erase count if (cardAcmd(ACMD23, eraseCount)) { error(SD_CARD_ERROR_ACMD23); @@ -633,7 +658,7 @@ bool Sd2Card::writeStart(uint32_t blockNumber, uint32_t eraseCount) { bool Sd2Card::writeStop() { chipSelectLow(); if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail; - spiSend(STOP_TRAN_TOKEN); + m_spi.send(STOP_TRAN_TOKEN); if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail; chipSelectHigh(); return true; diff --git a/libs/SdFatBeta20120108/SdFat/Sd2Card.h b/libs/SdFat-master/SdFat/Sd2Card.h similarity index 61% rename from libs/SdFatBeta20120108/SdFat/Sd2Card.h rename to libs/SdFat-master/SdFat/Sd2Card.h index 2d57491..7cf74b9 100755 --- a/libs/SdFatBeta20120108/SdFat/Sd2Card.h +++ b/libs/SdFat-master/SdFat/Sd2Card.h @@ -1,5 +1,5 @@ /* Arduino Sd2Card Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino Sd2Card Library * @@ -17,42 +17,23 @@ * along with the Arduino Sd2Card Library. If not, see * . */ -#ifndef Sd2Card_h -#define Sd2Card_h +#ifndef SpiCard_h +#define SpiCard_h /** * \file * \brief Sd2Card class for V2 SD/SDHC cards */ +#include #include #include -//------------------------------------------------------------------------------ -// SPI speed is F_CPU/2^(1 + index), 0 <= index <= 6 -/** Set SCK to max rate of F_CPU/2. See Sd2Card::setSckRate(). */ -uint8_t const SPI_FULL_SPEED = 0; -/** Set SCK rate to F_CPU/4. See Sd2Card::setSckRate(). */ -uint8_t const SPI_HALF_SPEED = 1; -/** Set SCK rate to F_CPU/8. See Sd2Card::setSckRate(). */ -uint8_t const SPI_QUARTER_SPEED = 2; -/** Set SCK rate to F_CPU/16. See Sd2Card::setSckRate(). */ -uint8_t const SPI_EIGHTH_SPEED = 3; -/** Set SCK rate to F_CPU/32. See Sd2Card::setSckRate(). */ -uint8_t const SPI_SIXTEENTH_SPEED = 4; -//------------------------------------------------------------------------------ -/** init timeout ms */ -uint16_t const SD_INIT_TIMEOUT = 2000; -/** erase timeout ms */ -uint16_t const SD_ERASE_TIMEOUT = 10000; -/** read timeout ms */ -uint16_t const SD_READ_TIMEOUT = 300; -/** write time out ms */ -uint16_t const SD_WRITE_TIMEOUT = 600; +#include //------------------------------------------------------------------------------ // SD card errors /** timeout error for command CMD0 (initialize card in SPI mode) */ uint8_t const SD_CARD_ERROR_CMD0 = 0X1; /** CMD8 was not accepted - not a valid SD card*/ uint8_t const SD_CARD_ERROR_CMD8 = 0X2; -/** card returned an error response for CMD12 (write stop) */ +/** card returned an error response for CMD12 (stop multiblock read) */ uint8_t const SD_CARD_ERROR_CMD12 = 0X3; /** card returned an error response for CMD17 (read block) */ uint8_t const SD_CARD_ERROR_CMD17 = 0X4; @@ -98,6 +79,12 @@ uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17; uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18; /** init() not called */ uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19; +/** card returned an error for CMD59 (CRC_ON_OFF) */ +uint8_t const SD_CARD_ERROR_CMD59 = 0X1A; +/** invalid read CRC */ +uint8_t const SD_CARD_ERROR_READ_CRC = 0X1B; +/** SPI DMA error */ +uint8_t const SD_CARD_ERROR_SPI_DMA = 0X1C; //------------------------------------------------------------------------------ // card types /** Standard capacity V1 SD card */ @@ -106,54 +93,6 @@ uint8_t const SD_CARD_TYPE_SD1 = 1; uint8_t const SD_CARD_TYPE_SD2 = 2; /** High Capacity SD card */ uint8_t const SD_CARD_TYPE_SDHC = 3; -/** - * define SOFTWARE_SPI to use bit-bang SPI - */ -//------------------------------------------------------------------------------ -#if MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)||defined(__AVR_ATmega2560__)) -#define SOFTWARE_SPI -#elif USE_SOFTWARE_SPI -#define SOFTWARE_SPI -#endif // MEGA_SOFT_SPI -//------------------------------------------------------------------------------ -// SPI pin definitions - do not edit here - change in SdFatConfig.h -// -#ifndef SOFTWARE_SPI -// hardware pin defs -#ifdef SS -/** The default chip select pin for the SD card is SS. */ -uint8_t const SD_CHIP_SELECT_PIN = SS; -// The following three pins must not be redefined for hardware SPI. -/** SPI Master Out Slave In pin */ -uint8_t const SPI_MOSI_PIN = MOSI; -/** SPI Master In Slave Out pin */ -uint8_t const SPI_MISO_PIN = MISO; -/** SPI Clock pin */ -uint8_t const SPI_SCK_PIN = SCK; -#else // SS -// pre 1.0 Arduino -#include -/** The default chip select pin for the SD card is SS. */ -uint8_t const SD_CHIP_SELECT_PIN = SS_PIN; -// The following three pins must not be redefined for hardware SPI. -/** SPI Master Out Slave In pin */ -uint8_t const SPI_MOSI_PIN = MOSI_PIN; -/** SPI Master In Slave Out pin */ -uint8_t const SPI_MISO_PIN = MISO_PIN; -/** SPI Clock pin */ -uint8_t const SPI_SCK_PIN = SCK_PIN; -#endif // SS -#else // SOFTWARE_SPI - -/** SPI chip select pin */ -uint8_t const SD_CHIP_SELECT_PIN = SOFT_SPI_CS_PIN; -/** SPI Master Out Slave In pin */ -uint8_t const SPI_MOSI_PIN = SOFT_SPI_MOSI_PIN; -/** SPI Master In Slave Out pin */ -uint8_t const SPI_MISO_PIN = SOFT_SPI_MISO_PIN; -/** SPI Clock pin */ -uint8_t const SPI_SCK_PIN = SOFT_SPI_SCK_PIN; -#endif // SOFTWARE_SPI //------------------------------------------------------------------------------ /** * \class Sd2Card @@ -162,7 +101,9 @@ uint8_t const SPI_SCK_PIN = SOFT_SPI_SCK_PIN; class Sd2Card { public: /** Construct an instance of Sd2Card. */ - Sd2Card() : errorCode_(SD_CARD_ERROR_INIT_NOT_CALLED), type_(0) {} + Sd2Card() : m_errorCode(SD_CARD_ERROR_INIT_NOT_CALLED), m_type(0) {} + bool begin(uint8_t chipSelectPin = SD_CHIP_SELECT_PIN, + uint8_t sckDivisor = SPI_FULL_SPEED); uint32_t cardSize(); bool erase(uint32_t firstBlock, uint32_t lastBlock); bool eraseSingleBlockEnable(); @@ -170,21 +111,28 @@ class Sd2Card { * Set SD error code. * \param[in] code value for error code. */ - void error(uint8_t code) {errorCode_ = code;} + void error(uint8_t code) {m_errorCode = code;} /** * \return error code for last error. See Sd2Card.h for a list of error codes. */ - int errorCode() const {return errorCode_;} + int errorCode() const {return m_errorCode;} /** \return error data for last error. */ - int errorData() const {return status_;} + int errorData() const {return m_status;} /** - * Initialize an SD flash memory card with default clock rate and chip - * select pin. See sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin). - * - * \return true for success or false for failure. - */ - bool init(uint8_t sckRateID = SPI_FULL_SPEED, - uint8_t chipSelectPin = SD_CHIP_SELECT_PIN); + * Initialize an SD flash memory card. + * + * \param[in] chipSelectPin SD chip select pin number. + * \param[in] sckDivisor SPI SCK clock rate divisor. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. The reason for failure + * can be determined by calling errorCode() and errorData(). + */ + bool init(uint8_t sckDivisor = SPI_FULL_SPEED, + uint8_t chipSelectPin = SD_CHIP_SELECT_PIN) { + return begin(chipSelectPin, sckDivisor); + } + bool isBusy(); bool readBlock(uint32_t block, uint8_t* dst); /** * Read a card's CID register. The CID contains card identification @@ -210,36 +158,45 @@ class Sd2Card { return readRegister(CMD9, csd); } bool readData(uint8_t *dst); + bool readOCR(uint32_t* ocr); bool readStart(uint32_t blockNumber); bool readStop(); - bool setSckRate(uint8_t sckRateID); + /** Return SCK divisor. + * + * \return Requested SCK divisor. + */ + uint8_t sckDivisor() {return m_sckDivisor;} /** Return the card type: SD V1, SD V2 or SDHC * \return 0 - SD V1, 1 - SD V2, or 3 - SDHC. */ - int type() const {return type_;} + int type() const {return m_type;} bool writeBlock(uint32_t blockNumber, const uint8_t* src); bool writeData(const uint8_t* src); bool writeStart(uint32_t blockNumber, uint32_t eraseCount); bool writeStop(); + private: //---------------------------------------------------------------------------- - uint8_t chipSelectPin_; - uint8_t errorCode_; - uint8_t spiRate_; - uint8_t status_; - uint8_t type_; // private functions uint8_t cardAcmd(uint8_t cmd, uint32_t arg) { - if (!cardCommand(CMD55, 0)) return false; + cardCommand(CMD55, 0); return cardCommand(cmd, arg); } uint8_t cardCommand(uint8_t cmd, uint32_t arg); - bool readData(uint8_t* dst, uint16_t count); + bool readData(uint8_t* dst, size_t count); bool readRegister(uint8_t cmd, void* buf); void chipSelectHigh(); void chipSelectLow(); - void type(uint8_t value) {type_ = value;} + void spiYield(); + void type(uint8_t value) {m_type = value;} bool waitNotBusy(uint16_t timeoutMillis); bool writeData(uint8_t token, const uint8_t* src); + // private data + static SdSpi m_spi; + uint8_t m_chipSelectPin; + uint8_t m_errorCode; + uint8_t m_sckDivisor; + uint8_t m_status; + uint8_t m_type; }; -#endif // Sd2Card_h +#endif // SpiCard_h diff --git a/libs/SdFatBeta20120108/SdFat/SdBaseFile.cpp b/libs/SdFat-master/SdFat/SdBaseFile.cpp similarity index 66% rename from libs/SdFatBeta20120108/SdFat/SdBaseFile.cpp rename to libs/SdFat-master/SdFat/SdBaseFile.cpp index 9bd7aca..714630d 100755 --- a/libs/SdFatBeta20120108/SdFat/SdBaseFile.cpp +++ b/libs/SdFat-master/SdFat/SdBaseFile.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -17,22 +17,23 @@ * along with the Arduino SdFat Library. If not, see * . */ -//#include #include //------------------------------------------------------------------------------ // pointer to cwd directory -SdBaseFile* SdBaseFile::cwd_ = 0; +SdBaseFile* SdBaseFile::m_cwd = 0; // callback function for date/time -void (*SdBaseFile::dateTime_)(uint16_t* date, uint16_t* time) = 0; +void (*SdBaseFile::m_dateTime)(uint16_t* date, uint16_t* time) = 0; //------------------------------------------------------------------------------ // add a cluster to a file bool SdBaseFile::addCluster() { - if (!vol_->allocContiguous(1, &curCluster_)) goto fail; - + if (!m_vol->allocContiguous(1, &m_curCluster)) { + DBG_FAIL_MACRO; + goto fail; + } // if first cluster of file link to directory entry - if (firstCluster_ == 0) { - firstCluster_ = curCluster_; - flags_ |= F_FILE_DIR_DIRTY; + if (m_firstCluster == 0) { + m_firstCluster = m_curCluster; + m_flags |= F_FILE_DIR_DIRTY; } return true; @@ -42,39 +43,50 @@ bool SdBaseFile::addCluster() { //------------------------------------------------------------------------------ // Add a cluster to a directory file and zero the cluster. // return with first block of cluster in the cache -bool SdBaseFile::addDirCluster() { +cache_t* SdBaseFile::addDirCluster() { uint32_t block; + cache_t* pc; // max folder size - if (fileSize_/sizeof(dir_t) >= 0XFFFF) goto fail; - - if (!addCluster()) goto fail; - if (!vol_->cacheFlush()) goto fail; - - block = vol_->clusterStartBlock(curCluster_); - - // set cache to first block of cluster - vol_->cacheSetBlockNumber(block, true); - - // zero first block of cluster - memset(vol_->cacheBuffer_.data, 0, 512); - - // zero rest of cluster - for (uint8_t i = 1; i < vol_->blocksPerCluster_; i++) { - if (!vol_->writeBlock(block + i, vol_->cacheBuffer_.data)) goto fail; + if (m_fileSize/sizeof(dir_t) >= 0XFFFF) { + DBG_FAIL_MACRO; + goto fail; + } + if (!addCluster()) { + DBG_FAIL_MACRO; + goto fail; + } + block = m_vol->clusterStartBlock(m_curCluster); + pc = m_vol->cacheFetch(block, SdVolume::CACHE_RESERVE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + memset(pc, 0, 512); + // zero rest of clusters + for (uint8_t i = 1; i < m_vol->blocksPerCluster(); i++) { + if (!m_vol->writeBlock(block + i, pc->data)) { + DBG_FAIL_MACRO; + goto fail; + } } // Increase directory file size by cluster size - fileSize_ += 512UL << vol_->clusterSizeShift_; - return true; + m_fileSize += 512UL*m_vol->blocksPerCluster(); + return pc; fail: - return false; + return 0; } //------------------------------------------------------------------------------ // cache a file's directory entry // return pointer to cached entry or null for failure dir_t* SdBaseFile::cacheDirEntry(uint8_t action) { - if (!vol_->cacheRawBlock(dirBlock_, action)) goto fail; - return vol_->cache()->dir + dirIndex_; + cache_t* pc; + pc = m_vol->cacheFetch(m_dirBlock, action); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + return pc->dir + m_dirIndex; fail: return 0; @@ -89,7 +101,7 @@ dir_t* SdBaseFile::cacheDirEntry(uint8_t action) { */ bool SdBaseFile::close() { bool rtn = sync(); - type_ = FAT_FILE_TYPE_CLOSED; + m_type = FAT_FILE_TYPE_CLOSED; return rtn; } //------------------------------------------------------------------------------ @@ -105,19 +117,26 @@ bool SdBaseFile::close() { */ bool SdBaseFile::contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock) { // error if no blocks - if (firstCluster_ == 0) goto fail; - - for (uint32_t c = firstCluster_; ; c++) { + if (m_firstCluster == 0) { + DBG_FAIL_MACRO; + goto fail; + } + for (uint32_t c = m_firstCluster; ; c++) { uint32_t next; - if (!vol_->fatGet(c, &next)) goto fail; - + if (!m_vol->fatGet(c, &next)) { + DBG_FAIL_MACRO; + goto fail; + } // check for contiguous if (next != (c + 1)) { // error if not end of chain - if (!vol_->isEOC(next)) goto fail; - *bgnBlock = vol_->clusterStartBlock(firstCluster_); - *endBlock = vol_->clusterStartBlock(c) - + vol_->blocksPerCluster_ - 1; + if (!m_vol->isEOC(next)) { + DBG_FAIL_MACRO; + goto fail; + } + *bgnBlock = m_vol->clusterStartBlock(m_firstCluster); + *endBlock = m_vol->clusterStartBlock(c) + + m_vol->blocksPerCluster() - 1; return true; } } @@ -147,21 +166,27 @@ bool SdBaseFile::createContiguous(SdBaseFile* dirFile, const char* path, uint32_t size) { uint32_t count; // don't allow zero length file - if (size == 0) goto fail; - if (!open(dirFile, path, O_CREAT | O_EXCL | O_RDWR)) goto fail; - + if (size == 0) { + DBG_FAIL_MACRO; + goto fail; + } + if (!open(dirFile, path, O_CREAT | O_EXCL | O_RDWR)) { + DBG_FAIL_MACRO; + goto fail; + } // calculate number of clusters needed - count = ((size - 1) >> (vol_->clusterSizeShift_ + 9)) + 1; + count = ((size - 1) >> (m_vol->clusterSizeShift() + 9)) + 1; // allocate clusters - if (!vol_->allocContiguous(count, &firstCluster_)) { + if (!m_vol->allocContiguous(count, &m_firstCluster)) { remove(); + DBG_FAIL_MACRO; goto fail; } - fileSize_ = size; + m_fileSize = size; // insure sync() will update dir entry - flags_ |= F_FILE_DIR_DIRTY; + m_flags |= F_FILE_DIR_DIRTY; return sync(); @@ -179,12 +204,16 @@ bool SdBaseFile::createContiguous(SdBaseFile* dirFile, bool SdBaseFile::dirEntry(dir_t* dir) { dir_t* p; // make sure fields on SD are correct - if (!sync()) goto fail; - + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } // read entry p = cacheDirEntry(SdVolume::CACHE_FOR_READ); - if (!p) goto fail; - + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // copy to caller's struct memcpy(dir, p, sizeof(dir_t)); return true; @@ -275,117 +304,33 @@ int16_t SdBaseFile::fgets(char* str, int16_t num, char* delim) { * the value zero, false, is returned for failure. */ bool SdBaseFile::getFilename(char* name) { - if (!isOpen()) return false; - + dir_t* p; + if (!isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } if (isRoot()) { name[0] = '/'; name[1] = '\0'; return true; } // cache entry - dir_t* p = cacheDirEntry(SdVolume::CACHE_FOR_READ); - if (!p) return false; - + p = cacheDirEntry(SdVolume::CACHE_FOR_READ); + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // format name dirName(*p, name); return true; + + fail: + return false; } //------------------------------------------------------------------------------ -void SdBaseFile::getpos(fpos_t* pos) { - pos->position = curPosition_; - pos->cluster = curCluster_; -} -//------------------------------------------------------------------------------ -/** List directory contents to stdOut. - * - * \param[in] flags The inclusive OR of - * - * LS_DATE - %Print file modification date - * - * LS_SIZE - %Print file size. - * - * LS_R - Recursive list of subdirectories. - */ -void SdBaseFile::ls(uint8_t flags) { - ls(SdFat::stdOut(), flags, 0); -} -//------------------------------------------------------------------------------ -/** List directory contents. - * - * \param[in] pr Print stream for list. - * - * \param[in] flags The inclusive OR of - * - * LS_DATE - %Print file modification date - * - * LS_SIZE - %Print file size. - * - * LS_R - Recursive list of subdirectories. - * - * \param[in] indent Amount of space before file name. Used for recursive - * list to indicate subdirectory level. - */ -void SdBaseFile::ls(Print* pr, uint8_t flags, uint8_t indent) { - rewind(); - int8_t status; - while ((status = lsPrintNext(pr, flags, indent))) { - if (status > 1 && (flags & LS_R)) { - uint16_t index = curPosition()/32 - 1; - SdBaseFile s; - if (s.open(this, index, O_READ)) s.ls(pr, flags, indent + 2); - seekSet(32 * (index + 1)); - } - } -} -//------------------------------------------------------------------------------ -// saves 32 bytes on stack for ls recursion -// return 0 - EOF, 1 - normal file, or 2 - directory -int8_t SdBaseFile::lsPrintNext(Print *pr, uint8_t flags, uint8_t indent) { - dir_t dir; - uint8_t w = 0; - - while (1) { - if (read(&dir, sizeof(dir)) != sizeof(dir)) return 0; - if (dir.name[0] == DIR_NAME_FREE) return 0; - - // skip deleted entry and entries for . and .. - if (dir.name[0] != DIR_NAME_DELETED && dir.name[0] != '.' - && DIR_IS_FILE_OR_SUBDIR(&dir)) break; - } - // indent for dir level - for (uint8_t i = 0; i < indent; i++) pr->write(' '); - - // print name - for (uint8_t i = 0; i < 11; i++) { - if (dir.name[i] == ' ')continue; - if (i == 8) { - pr->write('.'); - w++; - } - pr->write(dir.name[i]); - w++; - } - if (DIR_IS_SUBDIR(&dir)) { - pr->write('/'); - w++; - } - if (flags & (LS_DATE | LS_SIZE)) { - while (w++ < 14) pr->write(' '); - } - // print modify date/time if requested - if (flags & LS_DATE) { - pr->write(' '); - printFatDate(pr, dir.lastWriteDate); - pr->write(' '); - printFatTime(pr, dir.lastWriteTime); - } - // print size if requested - if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { - pr->write(' '); - pr->print(dir.fileSize); - } - pr->println(); - return DIR_IS_FILE(&dir) ? 1 : 2; +void SdBaseFile::getpos(FatPos_t* pos) { + pos->position = m_curPosition; + pos->cluster = m_curCluster; } //------------------------------------------------------------------------------ // format directory name field from a 8.3 name string @@ -399,24 +344,36 @@ bool SdBaseFile::make83Name(const char* str, uint8_t* name, const char** ptr) { while (*str != '\0' && *str != '/') { c = *str++; if (c == '.') { - if (n == 10) goto fail; // only one dot allowed + if (n == 10) { + // only one dot allowed + DBG_FAIL_MACRO; + goto fail; + } n = 10; // max index for full 8.3 name i = 8; // place for extension } else { // illegal FAT characters -#define FLASH_ILLEGAL_CHARS -#ifdef FLASH_ILLEGAL_CHARS +#ifdef __AVR__ // store chars in flash PGM_P p = PSTR("|<>^+=?/[];,*\"\\"); uint8_t b; - while ((b = pgm_read_byte(p++))) if (b == c) goto fail; -#else // FLASH_ILLEGAL_CHARS + while ((b = pgm_read_byte(p++))) if (b == c) { + DBG_FAIL_MACRO; + goto fail; + } +#else // __AVR__ // store chars in RAM - if (strchr("|<>^+=?/[];,*\"\\", c)) goto fail; -#endif // FLASH_ILLEGAL_CHARS + if (strchr("|<>^+=?/[];,*\"\\", c)) { + DBG_FAIL_MACRO; + goto fail; + } +#endif // __AVR__ // check size and only allow ASCII printable characters - if (i > n || c < 0X21 || c > 0X7E)goto fail; + if (i > n || c < 0X21 || c > 0X7E) { + DBG_FAIL_MACRO; + goto fail; + } // only upper case allowed in 8.3 names - convert lower to upper name[i++] = c < 'a' || c > 'z' ? c : c + ('A' - 'a'); } @@ -449,21 +406,30 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const char* path, bool pFlag) { SdBaseFile* sub = &dir1; SdBaseFile* start = parent; - if (!parent || isOpen()) goto fail; - + if (!parent || isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } if (*path == '/') { while (*path == '/') path++; if (!parent->isRoot()) { - if (!dir2.openRoot(parent->vol_)) goto fail; + if (!dir2.openRoot(parent->m_vol)) { + DBG_FAIL_MACRO; + goto fail; + } parent = &dir2; } } while (1) { - if (!make83Name(path, dname, &path)) goto fail; + if (!make83Name(path, dname, &path)) { + DBG_FAIL_MACRO; + goto fail; + } while (*path == '/') path++; if (!*path) break; if (!sub->open(parent, dname, O_READ)) { if (!pFlag || !sub->mkdir(parent, dname)) { + DBG_FAIL_MACRO; goto fail; } } @@ -473,7 +439,7 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const char* path, bool pFlag) { } return mkdir(parent, dname); - fail: + fail: return false; } //------------------------------------------------------------------------------ @@ -481,26 +447,37 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) { uint32_t block; dir_t d; dir_t* p; + cache_t* pc; - if (!parent->isDir()) goto fail; - + if (!parent->isDir()) { + DBG_FAIL_MACRO; + goto fail; + } // create a normal file - if (!open(parent, dname, O_CREAT | O_EXCL | O_RDWR)) goto fail; - + if (!open(parent, dname, O_CREAT | O_EXCL | O_RDWR)) { + DBG_FAIL_MACRO; + goto fail; + } // convert file to directory - flags_ = O_READ; - type_ = FAT_FILE_TYPE_SUBDIR; + m_flags = O_READ; + m_type = FAT_FILE_TYPE_SUBDIR; // allocate and zero first cluster - if (!addDirCluster())goto fail; - + if (!addDirCluster()) { + DBG_FAIL_MACRO; + goto fail; + } // force entry to SD - if (!sync()) goto fail; - + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } // cache entry - should already be in cache due to sync() call p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!p) goto fail; - + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // change directory entry attribute p->attributes = DIR_ATT_DIRECTORY; @@ -510,26 +487,27 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) { for (uint8_t i = 1; i < 11; i++) d.name[i] = ' '; // cache block for '.' and '..' - block = vol_->clusterStartBlock(firstCluster_); - if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail; - + block = m_vol->clusterStartBlock(m_firstCluster); + pc = m_vol->cacheFetch(block, SdVolume::CACHE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } // copy '.' to block - memcpy(&vol_->cache()->dir[0], &d, sizeof(d)); - + memcpy(&pc->dir[0], &d, sizeof(d)); // make entry for '..' d.name[1] = '.'; if (parent->isRoot()) { d.firstClusterLow = 0; d.firstClusterHigh = 0; } else { - d.firstClusterLow = parent->firstCluster_ & 0XFFFF; - d.firstClusterHigh = parent->firstCluster_ >> 16; + d.firstClusterLow = parent->m_firstCluster & 0XFFFF; + d.firstClusterHigh = parent->m_firstCluster >> 16; } // copy '..' to block - memcpy(&vol_->cache()->dir[1], &d, sizeof(d)); - + memcpy(&pc->dir[1], &d, sizeof(d)); // write first block - return vol_->cacheFlush(); + return m_vol->cacheSync(); fail: return false; @@ -546,7 +524,7 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) { * the value zero, false, is returned for failure. */ bool SdBaseFile::open(const char* path, uint8_t oflag) { - return open(cwd_, path, oflag); + return open(m_cwd, path, oflag); } //------------------------------------------------------------------------------ /** Open a file or directory by name. @@ -588,7 +566,7 @@ bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) { * successfully opened and is not read only, its length shall be truncated to 0. * * WARNING: A given file must not be opened by more than one SdBaseFile object - * of file corruption may occur. + * or file corruption may occur. * * \note Directory files must be opened read only. Write and truncation is * not allowed for directory files. @@ -605,23 +583,37 @@ bool SdBaseFile::open(SdBaseFile* dirFile, const char* path, uint8_t oflag) { SdBaseFile *parent = dirFile; SdBaseFile *sub = &dir1; - if (!dirFile) goto fail; - + if (!dirFile) { + DBG_FAIL_MACRO; + goto fail; + } // error if already open - if (isOpen()) goto fail; - + if (isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } if (*path == '/') { while (*path == '/') path++; + if (*path == 0) return openRoot(dirFile->m_vol); if (!dirFile->isRoot()) { - if (!dir2.openRoot(dirFile->vol_)) goto fail; + if (!dir2.openRoot(dirFile->m_vol)) { + DBG_FAIL_MACRO; + goto fail; + } parent = &dir2; } } while (1) { - if (!make83Name(path, dname, &path)) goto fail; + if (!make83Name(path, dname, &path)) { + DBG_FAIL_MACRO; + goto fail; + } while (*path == '/') path++; if (!*path) break; - if (!sub->open(parent, dname, O_READ)) goto fail; + if (!sub->open(parent, dname, O_READ)) { + DBG_FAIL_MACRO; + goto fail; + } if (parent != dirFile) parent->close(); parent = sub; sub = parent != &dir1 ? &dir1 : &dir2; @@ -635,53 +627,79 @@ bool SdBaseFile::open(SdBaseFile* dirFile, const char* path, uint8_t oflag) { // open with filename in dname bool SdBaseFile::open(SdBaseFile* dirFile, const uint8_t dname[11], uint8_t oflag) { + cache_t* pc; bool emptyFound = false; bool fileFound = false; uint8_t index; dir_t* p; - vol_ = dirFile->vol_; + m_vol = dirFile->m_vol; dirFile->rewind(); // search for file - while (dirFile->curPosition_ < dirFile->fileSize_) { - index = 0XF & (dirFile->curPosition_ >> 5); - p = dirFile->readDirCache(); - if (!p) goto fail; - - if (p->name[0] == DIR_NAME_FREE || p->name[0] == DIR_NAME_DELETED) { - // remember first empty slot - if (!emptyFound) { - dirBlock_ = dirFile->vol_->cacheBlockNumber(); - dirIndex_ = index; - emptyFound = true; + while (dirFile->m_curPosition < dirFile->m_fileSize) { + // Cache directory block. + if (dirFile->read() < 0) { + DBG_FAIL_MACRO; + goto fail; + } + // Position to to next block + dirFile->m_curPosition += 511; + + for (index = 0; index < 16; index++) { + p = &m_vol->cacheAddress()->dir[index]; + if (p->name[0] == DIR_NAME_FREE || p->name[0] == DIR_NAME_DELETED) { + // remember first empty slot + if (!emptyFound) { + m_dirBlock = m_vol->cacheBlockNumber(); + m_dirIndex = index; + emptyFound = true; + } + // done if no entries follow + if (p->name[0] == DIR_NAME_FREE) { + goto done; + } + } else if (!memcmp(dname, p->name, 11)) { + fileFound = true; + goto done; } - // done if no entries follow - if (p->name[0] == DIR_NAME_FREE) break; - } else if (!memcmp(dname, p->name, 11)) { - fileFound = true; - break; } } + done: + if (fileFound) { // don't open existing file if O_EXCL - if (oflag & O_EXCL) goto fail; + if (oflag & O_EXCL) { + DBG_FAIL_MACRO; + goto fail; + } } else { // don't create unless O_CREAT and O_WRITE - if (!(oflag & O_CREAT) || !(oflag & O_WRITE)) goto fail; + if (!(oflag & O_CREAT) || !(oflag & O_WRITE)) { + DBG_FAIL_MACRO; + goto fail; + } if (emptyFound) { - index = dirIndex_; + index = m_dirIndex; p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!p) goto fail; + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } } else { - if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) goto fail; - + if (dirFile->m_type == FAT_FILE_TYPE_ROOT_FIXED) { + DBG_FAIL_MACRO; + goto fail; + } // add and zero cluster for dirFile - first cluster is in cache for write - if (!dirFile->addDirCluster()) goto fail; - + pc = dirFile->addDirCluster(); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } // use first entry in cluster - p = dirFile->vol_->cache()->dir; + p = pc->dir; index = 0; } // initialize as empty file @@ -689,9 +707,9 @@ bool SdBaseFile::open(SdBaseFile* dirFile, memcpy(p->name, dname, 11); // set timestamps - if (dateTime_) { + if (m_dateTime) { // call user date/time function - dateTime_(&p->creationDate, &p->creationTime); + m_dateTime(&p->creationDate, &p->creationTime); } else { // use default date/time p->creationDate = FAT_DEFAULT_DATE; @@ -702,7 +720,10 @@ bool SdBaseFile::open(SdBaseFile* dirFile, p->lastWriteTime = p->creationTime; // write entry to SD - if (!dirFile->vol_->cacheFlush()) goto fail; + if (!dirFile->m_vol->cacheSync()) { + DBG_FAIL_MACRO; + goto fail; + } } // open entry in cache return openCachedEntry(index, oflag); @@ -727,24 +748,34 @@ bool SdBaseFile::open(SdBaseFile* dirFile, bool SdBaseFile::open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag) { dir_t* p; - vol_ = dirFile->vol_; + m_vol = dirFile->m_vol; // error if already open - if (isOpen() || !dirFile) goto fail; + if (isOpen() || !dirFile) { + DBG_FAIL_MACRO; + goto fail; + } // don't open existing file if O_EXCL - user call error - if (oflag & O_EXCL) goto fail; - + if (oflag & O_EXCL) { + DBG_FAIL_MACRO; + goto fail; + } // seek to location of entry - if (!dirFile->seekSet(32 * index)) goto fail; - + if (!dirFile->seekSet(32 * index)) { + DBG_FAIL_MACRO; + goto fail; + } // read entry into cache p = dirFile->readDirCache(); - if (!p) goto fail; - + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // error if empty slot or '.' or '..' if (p->name[0] == DIR_NAME_FREE || p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') { + DBG_FAIL_MACRO; goto fail; } // open cached entry @@ -754,44 +785,54 @@ bool SdBaseFile::open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag) { return false; } //------------------------------------------------------------------------------ -// open a cached directory entry. Assumes vol_ is initialized +// open a cached directory entry. Assumes m_vol is initialized bool SdBaseFile::openCachedEntry(uint8_t dirIndex, uint8_t oflag) { // location of entry in cache - dir_t* p = &vol_->cache()->dir[dirIndex]; + dir_t* p = &m_vol->cacheAddress()->dir[dirIndex]; // write or truncate is an error for a directory or read-only file if (p->attributes & (DIR_ATT_READ_ONLY | DIR_ATT_DIRECTORY)) { - if (oflag & (O_WRITE | O_TRUNC)) goto fail; + if (oflag & (O_WRITE | O_TRUNC)) { + DBG_FAIL_MACRO; + goto fail; + } } // remember location of directory entry on SD - dirBlock_ = vol_->cacheBlockNumber(); - dirIndex_ = dirIndex; + m_dirBlock = m_vol->cacheBlockNumber(); + m_dirIndex = dirIndex; // copy first cluster number for directory fields - firstCluster_ = (uint32_t)p->firstClusterHigh << 16; - firstCluster_ |= p->firstClusterLow; + m_firstCluster = (uint32_t)p->firstClusterHigh << 16; + m_firstCluster |= p->firstClusterLow; // make sure it is a normal file or subdirectory if (DIR_IS_FILE(p)) { - fileSize_ = p->fileSize; - type_ = FAT_FILE_TYPE_NORMAL; + m_fileSize = p->fileSize; + m_type = FAT_FILE_TYPE_NORMAL; } else if (DIR_IS_SUBDIR(p)) { - if (!vol_->chainSize(firstCluster_, &fileSize_)) goto fail; - type_ = FAT_FILE_TYPE_SUBDIR; + if (!setDirSize()) { + DBG_FAIL_MACRO; + goto fail; + } + m_type = FAT_FILE_TYPE_SUBDIR; } else { + DBG_FAIL_MACRO; goto fail; } // save open flags for read/write - flags_ = oflag & F_OFLAG; + m_flags = oflag & F_OFLAG; // set to start of file - curCluster_ = 0; - curPosition_ = 0; - if ((oflag & O_TRUNC) && !truncate(0)) return false; + m_curCluster = 0; + m_curPosition = 0; + if ((oflag & O_TRUNC) && !truncate(0)) { + DBG_FAIL_MACRO; + goto fail; + } return oflag & O_AT_END ? seekEnd(0) : true; fail: - type_ = FAT_FILE_TYPE_CLOSED; + m_type = FAT_FILE_TYPE_CLOSED; return false; } //------------------------------------------------------------------------------ @@ -810,23 +851,31 @@ bool SdBaseFile::openNext(SdBaseFile* dirFile, uint8_t oflag) { dir_t* p; uint8_t index; - if (!dirFile) goto fail; - + if (!dirFile) { + DBG_FAIL_MACRO; + goto fail; + } // error if already open - if (isOpen()) goto fail; - - vol_ = dirFile->vol_; + if (isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } + m_vol = dirFile->m_vol; while (1) { - index = 0XF & (dirFile->curPosition_ >> 5); + index = 0XF & (dirFile->m_curPosition >> 5); // read entry into cache p = dirFile->readDirCache(); - if (!p) goto fail; - + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // done if last entry - if (p->name[0] == DIR_NAME_FREE) goto fail; - + if (p->name[0] == DIR_NAME_FREE) { + DBG_FAIL_MACRO; + goto fail; + } // skip empty slot or '.' or '..' if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') { continue; @@ -855,37 +904,64 @@ bool SdBaseFile::openParent(SdBaseFile* dir) { uint32_t c; uint32_t cluster; uint32_t lbn; + cache_t* pc; // error if already open or dir is root or dir is not a directory - if (isOpen() || !dir || dir->isRoot() || !dir->isDir()) goto fail; - vol_ = dir->vol_; + if (isOpen() || !dir || dir->isRoot() || !dir->isDir()) { + DBG_FAIL_MACRO; + goto fail; + } + m_vol = dir->m_vol; // position to '..' - if (!dir->seekSet(32)) goto fail; + if (!dir->seekSet(32)) { + DBG_FAIL_MACRO; + goto fail; + } // read '..' entry - if (dir->read(&entry, sizeof(entry)) != 32) goto fail; + if (dir->read(&entry, sizeof(entry)) != 32) { + DBG_FAIL_MACRO; + goto fail; + } // verify it is '..' - if (entry.name[0] != '.' || entry.name[1] != '.') goto fail; + if (entry.name[0] != '.' || entry.name[1] != '.') { + DBG_FAIL_MACRO; + goto fail; + } // start cluster for '..' cluster = entry.firstClusterLow; cluster |= (uint32_t)entry.firstClusterHigh << 16; - if (cluster == 0) return openRoot(vol_); + if (cluster == 0) return openRoot(m_vol); // start block for '..' - lbn = vol_->clusterStartBlock(cluster); + lbn = m_vol->clusterStartBlock(cluster); // first block of parent dir - if (!vol_->cacheRawBlock(lbn, SdVolume::CACHE_FOR_READ)) { + pc = m_vol->cacheFetch(lbn, SdVolume::CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; goto fail; } - p = &vol_->cacheBuffer_.dir[1]; + p = &pc->dir[1]; // verify name for '../..' - if (p->name[0] != '.' || p->name[1] != '.') goto fail; + if (p->name[0] != '.' || p->name[1] != '.') { + DBG_FAIL_MACRO; + goto fail; + } // '..' is pointer to first cluster of parent. open '../..' to find parent if (p->firstClusterHigh == 0 && p->firstClusterLow == 0) { - if (!file.openRoot(dir->volume())) goto fail; + if (!file.openRoot(dir->volume())) { + DBG_FAIL_MACRO; + goto fail; + } } else { - if (!file.openCachedEntry(1, O_READ)) goto fail; + if (!file.openCachedEntry(1, O_READ)) { + DBG_FAIL_MACRO; + goto fail; + } } // search for parent in '../..' do { - if (file.readDir(&entry) != 32) goto fail; + if (file.readDir(&entry) != 32) { + DBG_FAIL_MACRO; + goto fail; + } c = entry.firstClusterLow; c |= (uint32_t)entry.firstClusterHigh << 16; } while (c != cluster); @@ -907,31 +983,37 @@ bool SdBaseFile::openParent(SdBaseFile* dir) { */ bool SdBaseFile::openRoot(SdVolume* vol) { // error if file is already open - if (isOpen()) goto fail; - + if (isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } + m_vol = vol; if (vol->fatType() == 16 || (FAT12_SUPPORT && vol->fatType() == 12)) { - type_ = FAT_FILE_TYPE_ROOT_FIXED; - firstCluster_ = 0; - fileSize_ = 32 * vol->rootDirEntryCount(); + m_type = FAT_FILE_TYPE_ROOT_FIXED; + m_firstCluster = 0; + m_fileSize = 32 * vol->rootDirEntryCount(); } else if (vol->fatType() == 32) { - type_ = FAT_FILE_TYPE_ROOT32; - firstCluster_ = vol->rootDirStart(); - if (!vol->chainSize(firstCluster_, &fileSize_)) goto fail; + m_type = FAT_FILE_TYPE_ROOT32; + m_firstCluster = vol->rootDirStart(); + if (!setDirSize()) { + DBG_FAIL_MACRO; + goto fail; + } } else { // volume is not initialized, invalid, or FAT12 without support - return false; + DBG_FAIL_MACRO; + goto fail; } - vol_ = vol; // read only - flags_ = O_READ; + m_flags = O_READ; // set to start of file - curCluster_ = 0; - curPosition_ = 0; + m_curCluster = 0; + m_curPosition = 0; // root has no directory entry - dirBlock_ = 0; - dirIndex_ = 0; + m_dirBlock = 0; + m_dirIndex = 0; return true; fail: @@ -943,120 +1025,13 @@ bool SdBaseFile::openRoot(SdVolume* vol) { * \return The byte if no error and not at eof else -1; */ int SdBaseFile::peek() { - fpos_t pos; + FatPos_t pos; getpos(&pos); int c = read(); if (c >= 0) setpos(&pos); return c; } //------------------------------------------------------------------------------ -/** %Print the name field of a directory entry in 8.3 format to stdOut. - * - * \param[in] dir The directory structure containing the name. - * \param[in] width Blank fill name if length is less than \a width. - * \param[in] printSlash Print '/' after directory names if true. - */ -void SdBaseFile::printDirName(const dir_t& dir, - uint8_t width, bool printSlash) { - printDirName(SdFat::stdOut(), dir, width, printSlash); -} -//------------------------------------------------------------------------------ -/** %Print the name field of a directory entry in 8.3 format. - * \param[in] pr Print stream for output. - * \param[in] dir The directory structure containing the name. - * \param[in] width Blank fill name if length is less than \a width. - * \param[in] printSlash Print '/' after directory names if true. - */ -void SdBaseFile::printDirName(Print* pr, const dir_t& dir, - uint8_t width, bool printSlash) { - uint8_t w = 0; - for (uint8_t i = 0; i < 11; i++) { - if (dir.name[i] == ' ')continue; - if (i == 8) { - pr->write('.'); - w++; - } - pr->write(dir.name[i]); - w++; - } - if (DIR_IS_SUBDIR(&dir) && printSlash) { - pr->write('/'); - w++; - } - while (w < width) { - pr->write(' '); - w++; - } -} -//------------------------------------------------------------------------------ -// print uint8_t with width 2 -static void print2u(Print* pr, uint8_t v) { - if (v < 10) pr->write('0'); - pr->print(v, DEC); -} -//------------------------------------------------------------------------------ -/** %Print a directory date field to stdOut. - * - * Format is yyyy-mm-dd. - * - * \param[in] fatDate The date field from a directory entry. - */ -void SdBaseFile::printFatDate(uint16_t fatDate) { - printFatDate(SdFat::stdOut(), fatDate); -} -//------------------------------------------------------------------------------ -/** %Print a directory date field. - * - * Format is yyyy-mm-dd. - * - * \param[in] pr Print stream for output. - * \param[in] fatDate The date field from a directory entry. - */ -void SdBaseFile::printFatDate(Print* pr, uint16_t fatDate) { - pr->print(FAT_YEAR(fatDate)); - pr->write('-'); - print2u(pr, FAT_MONTH(fatDate)); - pr->write('-'); - print2u(pr, FAT_DAY(fatDate)); -} -//------------------------------------------------------------------------------ -/** %Print a directory time field to stdOut. - * - * Format is hh:mm:ss. - * - * \param[in] fatTime The time field from a directory entry. - */ -void SdBaseFile::printFatTime(uint16_t fatTime) { - printFatTime(SdFat::stdOut(), fatTime); -} -//------------------------------------------------------------------------------ -/** %Print a directory time field. - * - * Format is hh:mm:ss. - * - * \param[in] pr Print stream for output. - * \param[in] fatTime The time field from a directory entry. - */ -void SdBaseFile::printFatTime(Print* pr, uint16_t fatTime) { - print2u(pr, FAT_HOUR(fatTime)); - pr->write(':'); - print2u(pr, FAT_MINUTE(fatTime)); - pr->write(':'); - print2u(pr, FAT_SECOND(fatTime)); -} -//------------------------------------------------------------------------------ -/** Print a file's name to stdOut - * - * \return The value one, true, is returned for success and - * the value zero, false, is returned for failure. - */ -bool SdBaseFile::printName() { - char name[13]; - if (!getFilename(name)) return false; - SdFat::stdOut()->print(name); - return true; -} -//------------------------------------------------------------------------------ /** Read the next byte from a file. * * \return For success read returns the next byte in the file as an int. @@ -1080,55 +1055,99 @@ int16_t SdBaseFile::read() { * read() called before a file has been opened, corrupt file system * or an I/O error occurred. */ -int16_t SdBaseFile::read(void* buf, uint16_t nbyte) { +int SdBaseFile::read(void* buf, size_t nbyte) { + uint8_t blockOfCluster; uint8_t* dst = reinterpret_cast(buf); uint16_t offset; - uint16_t toRead; + size_t toRead; uint32_t block; // raw device block number + cache_t* pc; // error if not open or write only - if (!isOpen() || !(flags_ & O_READ)) goto fail; - + if (!isOpen() || !(m_flags & O_READ)) { + DBG_FAIL_MACRO; + goto fail; + } // max bytes left in file - if (nbyte >= (fileSize_ - curPosition_)) { - nbyte = fileSize_ - curPosition_; + if (nbyte >= (m_fileSize - m_curPosition)) { + nbyte = m_fileSize - m_curPosition; } // amount left to read toRead = nbyte; while (toRead > 0) { - offset = curPosition_ & 0X1FF; // offset in block - if (type_ == FAT_FILE_TYPE_ROOT_FIXED) { - block = vol_->rootDirStart() + (curPosition_ >> 9); + size_t n; + offset = m_curPosition & 0X1FF; // offset in block + blockOfCluster = m_vol->blockOfCluster(m_curPosition); + if (m_type == FAT_FILE_TYPE_ROOT_FIXED) { + block = m_vol->rootDirStart() + (m_curPosition >> 9); } else { - uint8_t blockOfCluster = vol_->blockOfCluster(curPosition_); if (offset == 0 && blockOfCluster == 0) { // start of new cluster - if (curPosition_ == 0) { + if (m_curPosition == 0) { // use first cluster in file - curCluster_ = firstCluster_; + m_curCluster = m_firstCluster; } else { // get next cluster from FAT - if (!vol_->fatGet(curCluster_, &curCluster_)) goto fail; + if (!m_vol->fatGet(m_curCluster, &m_curCluster)) { + DBG_FAIL_MACRO; + goto fail; + } } } - block = vol_->clusterStartBlock(curCluster_) + blockOfCluster; - } - uint16_t n = toRead; - - // amount to be read from current block - if (n > (512 - offset)) n = 512 - offset; - // no buffering needed if n == 512 - if (n == 512 && block != vol_->cacheBlockNumber()) { - if (!vol_->readBlock(block, dst)) goto fail; - } else { + block = m_vol->clusterStartBlock(m_curCluster) + blockOfCluster; + } + if (offset != 0 || toRead < 512 || block == m_vol->cacheBlockNumber()) { + // amount to be read from current block + n = 512 - offset; + if (n > toRead) n = toRead; // read block to cache and copy data to caller - if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_READ)) goto fail; - uint8_t* src = vol_->cache()->data + offset; + pc = m_vol->cacheFetch(block, SdVolume::CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + uint8_t* src = pc->data + offset; memcpy(dst, src, n); + } else if (!USE_MULTI_BLOCK_SD_IO || toRead < 1024) { + // read single block + n = 512; + if (!m_vol->readBlock(block, dst)) { + DBG_FAIL_MACRO; + goto fail; + } + } else { + uint8_t nb = toRead >> 9; + if (m_type != FAT_FILE_TYPE_ROOT_FIXED) { + uint8_t mb = m_vol->blocksPerCluster() - blockOfCluster; + if (mb < nb) nb = mb; + } + n = 512*nb; + if (m_vol->cacheBlockNumber() <= block + && block < (m_vol->cacheBlockNumber() + nb)) { + // flush cache if a block is in the cache + if (!m_vol->cacheSync()) { + DBG_FAIL_MACRO; + goto fail; + } + } + if (!m_vol->sdCard()->readStart(block)) { + DBG_FAIL_MACRO; + goto fail; + } + for (uint8_t b = 0; b < nb; b++) { + if (!m_vol->sdCard()->readData(dst + b*512)) { + DBG_FAIL_MACRO; + goto fail; + } + } + if (!m_vol->sdCard()->readStop()) { + DBG_FAIL_MACRO; + goto fail; + } } dst += n; - curPosition_ += n; + m_curPosition += n; toRead -= n; } return nbyte; @@ -1150,7 +1169,7 @@ int16_t SdBaseFile::read(void* buf, uint16_t nbyte) { int8_t SdBaseFile::readDir(dir_t* dir) { int16_t n; // if not a directory file or miss-positioned return an error - if (!isDir() || (0X1F & curPosition_)) return -1; + if (!isDir() || (0X1F & m_curPosition)) return -1; while (1) { n = read(dir, sizeof(dir_t)); @@ -1169,19 +1188,23 @@ int8_t SdBaseFile::readDir(dir_t* dir) { dir_t* SdBaseFile::readDirCache() { uint8_t i; // error if not directory - if (!isDir()) goto fail; - + if (!isDir()) { + DBG_FAIL_MACRO; + goto fail; + } // index of entry in cache - i = (curPosition_ >> 5) & 0XF; + i = (m_curPosition >> 5) & 0XF; // use read to locate and cache block - if (read() < 0) goto fail; - + if (read() < 0) { + DBG_FAIL_MACRO; + goto fail; + } // advance to next entry - curPosition_ += 31; + m_curPosition += 31; // return pointer to entry - return vol_->cache()->dir + i; + return m_vol->cacheAddress()->dir + i; fail: return 0; @@ -1203,20 +1226,24 @@ dir_t* SdBaseFile::readDirCache() { bool SdBaseFile::remove() { dir_t* d; // free any clusters - will fail if read-only or directory - if (!truncate(0)) goto fail; - + if (!truncate(0)) { + DBG_FAIL_MACRO; + goto fail; + } // cache directory entry d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; - + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } // mark entry deleted d->name[0] = DIR_NAME_DELETED; // set this file closed - type_ = FAT_FILE_TYPE_CLOSED; + m_type = FAT_FILE_TYPE_CLOSED; // write entry to SD - return vol_->cacheFlush(); + return m_vol->cacheSync(); return true; fail: @@ -1242,11 +1269,13 @@ bool SdBaseFile::remove() { */ bool SdBaseFile::remove(SdBaseFile* dirFile, const char* path) { SdBaseFile file; - if (!file.open(dirFile, path, O_WRITE)) goto fail; + if (!file.open(dirFile, path, O_WRITE)) { + DBG_FAIL_MACRO; + goto fail; + } return file.remove(); fail: - // can't set iostate - static function return false; } //------------------------------------------------------------------------------ @@ -1264,19 +1293,26 @@ bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath) { dir_t entry; uint32_t dirCluster = 0; SdBaseFile file; + cache_t* pc; dir_t* d; // must be an open file or subdirectory - if (!(isFile() || isSubDir())) goto fail; - + if (!(isFile() || isSubDir())) { + DBG_FAIL_MACRO; + goto fail; + } // can't move file - if (vol_ != dirFile->vol_) goto fail; - + if (m_vol != dirFile->m_vol) { + DBG_FAIL_MACRO; + goto fail; + } // sync() and cache directory entry sync(); d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; - + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } // save directory entry memcpy(&entry, d, sizeof(entry)); @@ -1294,45 +1330,60 @@ bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath) { goto restore; } // save cluster containing new dot dot - dirCluster = file.firstCluster_; + dirCluster = file.m_firstCluster; } // change to new directory entry - dirBlock_ = file.dirBlock_; - dirIndex_ = file.dirIndex_; + m_dirBlock = file.m_dirBlock; + m_dirIndex = file.m_dirIndex; // mark closed to avoid possible destructor close call - file.type_ = FAT_FILE_TYPE_CLOSED; + file.m_type = FAT_FILE_TYPE_CLOSED; // cache new directory entry d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; - + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } // copy all but name field to new directory entry memcpy(&d->attributes, &entry.attributes, sizeof(entry) - sizeof(d->name)); // update dot dot if directory if (dirCluster) { // get new dot dot - uint32_t block = vol_->clusterStartBlock(dirCluster); - if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_READ)) goto fail; - memcpy(&entry, &vol_->cache()->dir[1], sizeof(entry)); + uint32_t block = m_vol->clusterStartBlock(dirCluster); + pc = m_vol->cacheFetch(block, SdVolume::CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + memcpy(&entry, &pc->dir[1], sizeof(entry)); // free unused cluster - if (!vol_->freeChain(dirCluster)) goto fail; - + if (!m_vol->freeChain(dirCluster)) { + DBG_FAIL_MACRO; + goto fail; + } // store new dot dot - block = vol_->clusterStartBlock(firstCluster_); - if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail; - memcpy(&vol_->cache()->dir[1], &entry, sizeof(entry)); + block = m_vol->clusterStartBlock(m_firstCluster); + pc = m_vol->cacheFetch(block, SdVolume::CACHE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + memcpy(&pc->dir[1], &entry, sizeof(entry)); } - return vol_->cacheFlush(); + return m_vol->cacheSync(); restore: d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } // restore entry d->name[0] = entry.name[0]; - vol_->cacheFlush(); + m_vol->cacheSync(); fail: return false; @@ -1355,24 +1406,32 @@ bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath) { */ bool SdBaseFile::rmdir() { // must be open subdirectory - if (!isSubDir()) goto fail; - + if (!isSubDir()) { + DBG_FAIL_MACRO; + goto fail; + } rewind(); // make sure directory is empty - while (curPosition_ < fileSize_) { + while (m_curPosition < m_fileSize) { dir_t* p = readDirCache(); - if (!p) goto fail; + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // done if past last used entry if (p->name[0] == DIR_NAME_FREE) break; // skip empty slot, '.' or '..' if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') continue; // error not empty - if (DIR_IS_FILE_OR_SUBDIR(p)) goto fail; + if (DIR_IS_FILE_OR_SUBDIR(p)) { + DBG_FAIL_MACRO; + goto fail; + } } // convert empty directory to normal file for remove - type_ = FAT_FILE_TYPE_NORMAL; - flags_ |= O_WRITE; + m_type = FAT_FILE_TYPE_NORMAL; + m_flags |= O_WRITE; return remove(); fail: @@ -1398,13 +1457,15 @@ bool SdBaseFile::rmRfStar() { uint16_t index; SdBaseFile f; rewind(); - while (curPosition_ < fileSize_) { + while (m_curPosition < m_fileSize) { // remember position - index = curPosition_/32; + index = m_curPosition/32; dir_t* p = readDirCache(); - if (!p) goto fail; - + if (!p) { + DBG_FAIL_MACRO; + goto fail; + } // done if past last entry if (p->name[0] == DIR_NAME_FREE) break; @@ -1414,23 +1475,38 @@ bool SdBaseFile::rmRfStar() { // skip if part of long file name or volume label in root if (!DIR_IS_FILE_OR_SUBDIR(p)) continue; - if (!f.open(this, index, O_READ)) goto fail; + if (!f.open(this, index, O_READ)) { + DBG_FAIL_MACRO; + goto fail; + } if (f.isSubDir()) { // recursively delete - if (!f.rmRfStar()) goto fail; + if (!f.rmRfStar()) { + DBG_FAIL_MACRO; + goto fail; + } } else { // ignore read-only - f.flags_ |= O_WRITE; - if (!f.remove()) goto fail; + f.m_flags |= O_WRITE; + if (!f.remove()) { + DBG_FAIL_MACRO; + goto fail; + } } // position to next entry if required - if (curPosition_ != (32*(index + 1))) { - if (!seekSet(32*(index + 1))) goto fail; + if (m_curPosition != (32UL*(index + 1))) { + if (!seekSet(32UL*(index + 1))) { + DBG_FAIL_MACRO; + goto fail; + } } } // don't try to delete root if (!isRoot()) { - if (!rmdir()) goto fail; + if (!rmdir()) { + DBG_FAIL_MACRO; + goto fail; + } } return true; @@ -1446,7 +1522,7 @@ bool SdBaseFile::rmRfStar() { * OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t). */ SdBaseFile::SdBaseFile(const char* path, uint8_t oflag) { - type_ = FAT_FILE_TYPE_CLOSED; + m_type = FAT_FILE_TYPE_CLOSED; writeError = false; open(path, oflag); } @@ -1462,33 +1538,38 @@ bool SdBaseFile::seekSet(uint32_t pos) { uint32_t nCur; uint32_t nNew; // error if file not open or seek past end of file - if (!isOpen() || pos > fileSize_) goto fail; - - if (type_ == FAT_FILE_TYPE_ROOT_FIXED) { - curPosition_ = pos; + if (!isOpen() || pos > m_fileSize) { + DBG_FAIL_MACRO; + goto fail; + } + if (m_type == FAT_FILE_TYPE_ROOT_FIXED) { + m_curPosition = pos; goto done; } if (pos == 0) { // set position to start of file - curCluster_ = 0; - curPosition_ = 0; + m_curCluster = 0; + m_curPosition = 0; goto done; } // calculate cluster index for cur and new position - nCur = (curPosition_ - 1) >> (vol_->clusterSizeShift_ + 9); - nNew = (pos - 1) >> (vol_->clusterSizeShift_ + 9); + nCur = (m_curPosition - 1) >> (m_vol->clusterSizeShift() + 9); + nNew = (pos - 1) >> (m_vol->clusterSizeShift() + 9); - if (nNew < nCur || curPosition_ == 0) { + if (nNew < nCur || m_curPosition == 0) { // must follow chain from first cluster - curCluster_ = firstCluster_; + m_curCluster = m_firstCluster; } else { // advance from curPosition nNew -= nCur; } while (nNew--) { - if (!vol_->fatGet(curCluster_, &curCluster_)) goto fail; + if (!m_vol->fatGet(m_curCluster, &m_curCluster)) { + DBG_FAIL_MACRO; + goto fail; + } } - curPosition_ = pos; + m_curPosition = pos; done: return true; @@ -1497,9 +1578,32 @@ bool SdBaseFile::seekSet(uint32_t pos) { return false; } //------------------------------------------------------------------------------ -void SdBaseFile::setpos(fpos_t* pos) { - curPosition_ = pos->position; - curCluster_ = pos->cluster; +// set m_fileSize for a directory +bool SdBaseFile::setDirSize() { + uint16_t s = 0; + uint32_t cluster = m_firstCluster; + do { + if (!m_vol->fatGet(cluster, &cluster)) { + DBG_FAIL_MACRO; + goto fail; + } + s += m_vol->blocksPerCluster(); + // max size if a directory file is 4096 blocks + if (s >= 4096) { + DBG_FAIL_MACRO; + goto fail; + } + } while (!m_vol->isEOC(cluster)); + m_fileSize = 512L*s; + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +void SdBaseFile::setpos(FatPos_t* pos) { + m_curPosition = pos->position; + m_curCluster = pos->cluster; } //------------------------------------------------------------------------------ /** The sync() call causes all modified data and directory fields @@ -1512,29 +1616,33 @@ void SdBaseFile::setpos(fpos_t* pos) { */ bool SdBaseFile::sync() { // only allow open files and directories - if (!isOpen()) goto fail; - - if (flags_ & F_FILE_DIR_DIRTY) { + if (!isOpen()) { + DBG_FAIL_MACRO; + goto fail; + } + if (m_flags & F_FILE_DIR_DIRTY) { dir_t* d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); // check for deleted by another open file object - if (!d || d->name[0] == DIR_NAME_DELETED) goto fail; - + if (!d || d->name[0] == DIR_NAME_DELETED) { + DBG_FAIL_MACRO; + goto fail; + } // do not set filesize for dir files - if (!isDir()) d->fileSize = fileSize_; + if (!isDir()) d->fileSize = m_fileSize; // update first cluster fields - d->firstClusterLow = firstCluster_ & 0XFFFF; - d->firstClusterHigh = firstCluster_ >> 16; + d->firstClusterLow = m_firstCluster & 0XFFFF; + d->firstClusterHigh = m_firstCluster >> 16; // set modify time if user supplied a callback date/time function - if (dateTime_) { - dateTime_(&d->lastWriteDate, &d->lastWriteTime); + if (m_dateTime) { + m_dateTime(&d->lastWriteDate, &d->lastWriteTime); d->lastAccessDate = d->lastWriteDate; } // clear directory dirty - flags_ &= ~F_FILE_DIR_DIRTY; + m_flags &= ~F_FILE_DIR_DIRTY; } - return vol_->cacheFlush(); + return m_vol->cacheSync(); fail: writeError = true; @@ -1557,14 +1665,20 @@ bool SdBaseFile::timestamp(SdBaseFile* file) { dir_t dir; // get timestamps - if (!file->dirEntry(&dir)) goto fail; - + if (!file->dirEntry(&dir)) { + DBG_FAIL_MACRO; + goto fail; + } // update directory fields - if (!sync()) goto fail; - + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; - + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } // copy timestamps d->lastAccessDate = dir.lastAccessDate; d->creationDate = dir.creationDate; @@ -1574,7 +1688,7 @@ bool SdBaseFile::timestamp(SdBaseFile* file) { d->lastWriteTime = dir.lastWriteTime; // write back entry - return vol_->cacheFlush(); + return m_vol->cacheSync(); fail: return false; @@ -1629,14 +1743,19 @@ bool SdBaseFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, || hour > 23 || minute > 59 || second > 59) { + DBG_FAIL_MACRO; goto fail; } // update directory entry - if (!sync()) goto fail; - + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!d) goto fail; - + if (!d) { + DBG_FAIL_MACRO; + goto fail; + } dirDate = FAT_DATE(year, month, day); dirTime = FAT_TIME(hour, minute, second); if (flags & T_ACCESS) { @@ -1652,7 +1771,7 @@ bool SdBaseFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, d->lastWriteDate = dirDate; d->lastWriteTime = dirTime; } - return vol_->cacheFlush(); + return m_vol->cacheSync(); fail: return false; @@ -1672,43 +1791,61 @@ bool SdBaseFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, bool SdBaseFile::truncate(uint32_t length) { uint32_t newPos; // error if not a normal file or read-only - if (!isFile() || !(flags_ & O_WRITE)) goto fail; - + if (!isFile() || !(m_flags & O_WRITE)) { + DBG_FAIL_MACRO; + goto fail; + } // error if length is greater than current size - if (length > fileSize_) goto fail; - + if (length > m_fileSize) { + DBG_FAIL_MACRO; + goto fail; + } // fileSize and length are zero - nothing to do - if (fileSize_ == 0) return true; + if (m_fileSize == 0) return true; // remember position for seek after truncation - newPos = curPosition_ > length ? length : curPosition_; + newPos = m_curPosition > length ? length : m_curPosition; // position to last cluster in truncated file - if (!seekSet(length)) goto fail; - + if (!seekSet(length)) { + DBG_FAIL_MACRO; + goto fail; + } if (length == 0) { // free all clusters - if (!vol_->freeChain(firstCluster_)) goto fail; - firstCluster_ = 0; + if (!m_vol->freeChain(m_firstCluster)) { + DBG_FAIL_MACRO; + goto fail; + } + m_firstCluster = 0; } else { uint32_t toFree; - if (!vol_->fatGet(curCluster_, &toFree)) goto fail; - - if (!vol_->isEOC(toFree)) { + if (!m_vol->fatGet(m_curCluster, &toFree)) { + DBG_FAIL_MACRO; + goto fail; + } + if (!m_vol->isEOC(toFree)) { // free extra clusters - if (!vol_->freeChain(toFree)) goto fail; - + if (!m_vol->freeChain(toFree)) { + DBG_FAIL_MACRO; + goto fail; + } // current cluster is end of chain - if (!vol_->fatPutEOC(curCluster_)) goto fail; + if (!m_vol->fatPutEOC(m_curCluster)) { + DBG_FAIL_MACRO; + goto fail; + } } } - fileSize_ = length; + m_fileSize = length; // need to update directory entry - flags_ |= F_FILE_DIR_DIRTY; - - if (!sync()) goto fail; + m_flags |= F_FILE_DIR_DIRTY; + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } // set file to correct position return seekSet(newPos); @@ -1731,87 +1868,152 @@ bool SdBaseFile::truncate(uint32_t length) { * for a read-only file, device is full, a corrupt file system or an I/O error. * */ -int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) { +int SdBaseFile::write(const void* buf, size_t nbyte) { // convert void* to uint8_t* - must be before goto statements const uint8_t* src = reinterpret_cast(buf); - + cache_t* pc; + uint8_t cacheOption; // number of bytes left to write - must be before goto statements - uint16_t nToWrite = nbyte; - + size_t nToWrite = nbyte; + size_t n; // error if not a normal file or is read-only - if (!isFile() || !(flags_ & O_WRITE)) goto fail; - + if (!isFile() || !(m_flags & O_WRITE)) { + DBG_FAIL_MACRO; + goto fail; + } // seek to end of file if append flag - if ((flags_ & O_APPEND) && curPosition_ != fileSize_) { - if (!seekEnd()) goto fail; + if ((m_flags & O_APPEND) && m_curPosition != m_fileSize) { + if (!seekEnd()) { + DBG_FAIL_MACRO; + goto fail; + } } - - while (nToWrite > 0) { - uint8_t blockOfCluster = vol_->blockOfCluster(curPosition_); - uint16_t blockOffset = curPosition_ & 0X1FF; + // Don't exceed max fileSize. + if (nbyte > (0XFFFFFFFF - m_curPosition)) { + DBG_FAIL_MACRO; + goto fail; + } + while (nToWrite) { + uint8_t blockOfCluster = m_vol->blockOfCluster(m_curPosition); + uint16_t blockOffset = m_curPosition & 0X1FF; if (blockOfCluster == 0 && blockOffset == 0) { // start of new cluster - if (curCluster_ != 0) { + if (m_curCluster != 0) { uint32_t next; - if (!vol_->fatGet(curCluster_, &next)) goto fail; - if (vol_->isEOC(next)) { + if (!m_vol->fatGet(m_curCluster, &next)) { + DBG_FAIL_MACRO; + goto fail; + } + if (m_vol->isEOC(next)) { // add cluster if at end of chain - if (!addCluster()) goto fail; + if (!addCluster()) { + DBG_FAIL_MACRO; + goto fail; + } } else { - curCluster_ = next; + m_curCluster = next; } } else { - if (firstCluster_ == 0) { + if (m_firstCluster == 0) { // allocate first cluster of file - if (!addCluster()) goto fail; + if (!addCluster()) { + DBG_FAIL_MACRO; + goto fail; + } } else { - curCluster_ = firstCluster_; + m_curCluster = m_firstCluster; } } } - // max space in block - uint16_t n = 512 - blockOffset; - - // lesser of space and amount to write - if (n > nToWrite) n = nToWrite; - // block for data write - uint32_t block = vol_->clusterStartBlock(curCluster_) + blockOfCluster; - if (n == 512) { - // full block - don't need to use cache - if (vol_->cacheBlockNumber() == block) { - // invalidate cache if block is in cache - vol_->cacheSetBlockNumber(0XFFFFFFFF, false); - } - if (!vol_->writeBlock(block, src)) goto fail; - } else { - if (blockOffset == 0 && curPosition_ >= fileSize_) { + uint32_t block = m_vol->clusterStartBlock(m_curCluster) + blockOfCluster; + + if (blockOffset != 0 || nToWrite < 512) { + // partial block - must use cache + if (blockOffset == 0 && m_curPosition >= m_fileSize) { // start of new block don't need to read into cache - if (!vol_->cacheFlush()) goto fail; - // set cache dirty and SD address of block - vol_->cacheSetBlockNumber(block, true); + cacheOption = SdVolume::CACHE_RESERVE_FOR_WRITE; } else { // rewrite part of block - if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail; + cacheOption = SdVolume::CACHE_FOR_WRITE; + } + pc = m_vol->cacheFetch(block, cacheOption); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; } - uint8_t* dst = vol_->cache()->data + blockOffset; + + // max space in block + uint16_t space = 512 - blockOffset; + + // lesser of space and amount to write + n = space < nToWrite ? space : nToWrite; + + uint8_t* dst = pc->data + blockOffset; memcpy(dst, src, n); + + // flush cache if all space used. + if (n == space) { + if (!m_vol->cacheWriteData()) { + DBG_FAIL_MACRO; + goto fail; + } + } + + } else if (!USE_MULTI_BLOCK_SD_IO || nToWrite < 1024) { + // use single block write command + n = 512; + if (m_vol->cacheBlockNumber() == block) { + m_vol->cacheInvalidate(); + } + if (!m_vol->writeBlock(block, src)) { + DBG_FAIL_MACRO; + goto fail; + } + } else { + // use multiple block write command + uint8_t maxBlocks = m_vol->blocksPerCluster() - blockOfCluster; + uint8_t nBlock = nToWrite >> 9; + if (nBlock > maxBlocks) nBlock = maxBlocks; + + n = 512*nBlock; + if (!m_vol->sdCard()->writeStart(block, nBlock)) { + DBG_FAIL_MACRO; + goto fail; + } + for (uint8_t b = 0; b < nBlock; b++) { + // invalidate cache if block is in cache + if ((block + b) == m_vol->cacheBlockNumber()) { + m_vol->cacheInvalidate(); + } + if (!m_vol->sdCard()->writeData(src + 512*b)) { + DBG_FAIL_MACRO; + goto fail; + } + } + if (!m_vol->sdCard()->writeStop()) { + DBG_FAIL_MACRO; + goto fail; + } } - curPosition_ += n; + m_curPosition += n; src += n; nToWrite -= n; } - if (curPosition_ > fileSize_) { + if (m_curPosition > m_fileSize) { // update fileSize and insure sync will update dir entry - fileSize_ = curPosition_; - flags_ |= F_FILE_DIR_DIRTY; - } else if (dateTime_ && nbyte) { + m_fileSize = m_curPosition; + m_flags |= F_FILE_DIR_DIRTY; + } else if (m_dateTime && nbyte) { // insure sync will update modified date and time - flags_ |= F_FILE_DIR_DIRTY; + m_flags |= F_FILE_DIR_DIRTY; } - if (flags_ & O_SYNC) { - if (!sync()) goto fail; + if (m_flags & O_SYNC) { + if (!sync()) { + DBG_FAIL_MACRO; + goto fail; + } } return nbyte; @@ -1820,8 +2022,3 @@ int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) { writeError = true; return -1; } -//------------------------------------------------------------------------------ -// suppress cpplint warnings with NOLINT comment -#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN) -void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0; // NOLINT -#endif // ALLOW_DEPRECATED_FUNCTIONS diff --git a/libs/SdFat-master/SdFat/SdBaseFile.h b/libs/SdFat-master/SdFat/SdBaseFile.h new file mode 100755 index 0000000..74bcaec --- /dev/null +++ b/libs/SdFat-master/SdFat/SdBaseFile.h @@ -0,0 +1,289 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +#ifndef SdBaseFile_h +#define SdBaseFile_h +/** + * \file + * \brief SdBaseFile class + */ +#ifdef __AVR__ +#include +#else // __AVR__ +#ifndef PGM_P +/** pointer to flash for ARM */ +#define PGM_P const char* +#endif // PGM_P +#ifndef PSTR +/** store literal string in flash for ARM */ +#define PSTR(x) (x) +#endif // PSTR +#ifndef pgm_read_byte +/** read 8-bits from flash for ARM */ +#define pgm_read_byte(addr) (*(const unsigned char*)(addr)) +#endif // pgm_read_byte +#ifndef pgm_read_word +/** read 16-bits from flash for ARM */ +#define pgm_read_word(addr) (*(const uint16_t*)(addr)) +#endif // pgm_read_word +#ifndef PROGMEM +/** store in flash for ARM */ +#define PROGMEM const +#endif // PROGMEM +#endif // __AVR__ +#include +#include +#include +#include +//------------------------------------------------------------------------------ +/** + * \struct FatPos_t + * \brief internal type for istream + * do not use in user apps + */ +struct FatPos_t { + /** stream position */ + uint32_t position; + /** cluster for position */ + uint32_t cluster; + FatPos_t() : position(0), cluster(0) {} +}; + +// values for m_type +/** This file has not been opened. */ +uint8_t const FAT_FILE_TYPE_CLOSED = 0; +/** A normal file */ +uint8_t const FAT_FILE_TYPE_NORMAL = 1; +/** A FAT12 or FAT16 root directory */ +uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2; +/** A FAT32 root directory */ +uint8_t const FAT_FILE_TYPE_ROOT32 = 3; +/** A subdirectory file*/ +uint8_t const FAT_FILE_TYPE_SUBDIR = 4; +/** Test value for directory type */ +uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED; + +//------------------------------------------------------------------------------ +/** + * \class SdBaseFile + * \brief Base class for SdFile with Print and C++ streams. + */ +class SdBaseFile { + public: + /** Create an instance. */ + SdBaseFile() : writeError(false), m_type(FAT_FILE_TYPE_CLOSED) {} + SdBaseFile(const char* path, uint8_t oflag); +#if DESTRUCTOR_CLOSES_FILE + ~SdBaseFile() {if(isOpen()) close();} +#endif // DESTRUCTOR_CLOSES_FILE + /** + * writeError is set to true if an error occurs during a write(). + * Set writeError to false before calling print() and/or write() and check + * for true after calls to print() and/or write(). + */ + bool writeError; + /** \return value of writeError */ + bool getWriteError() {return writeError;} + /** Set writeError to zero */ + void clearWriteError() {writeError = 0;} + //---------------------------------------------------------------------------- + // helpers for stream classes + /** get position for streams + * \param[out] pos struct to receive position + */ + void getpos(FatPos_t* pos); + /** set position for streams + * \param[out] pos struct with value for new position + */ + void setpos(FatPos_t* pos); + //---------------------------------------------------------------------------- + /** \return number of bytes available from yhe current position to EOF */ + uint32_t available() {return fileSize() - curPosition();} + bool close(); + bool contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock); + bool createContiguous(SdBaseFile* dirFile, + const char* path, uint32_t size); + /** \return The current cluster number for a file or directory. */ + uint32_t curCluster() const {return m_curCluster;} + /** \return The current position for a file or directory. */ + uint32_t curPosition() const {return m_curPosition;} + /** \return Current working directory */ + static SdBaseFile* cwd() {return m_cwd;} + /** Set the date/time callback function + * + * \param[in] dateTime The user's call back function. The callback + * function is of the form: + * + * \code + * void dateTime(uint16_t* date, uint16_t* time) { + * uint16_t year; + * uint8_t month, day, hour, minute, second; + * + * // User gets date and time from GPS or real-time clock here + * + * // return date using FAT_DATE macro to format fields + * *date = FAT_DATE(year, month, day); + * + * // return time using FAT_TIME macro to format fields + * *time = FAT_TIME(hour, minute, second); + * } + * \endcode + * + * Sets the function that is called when a file is created or when + * a file's directory entry is modified by sync(). All timestamps, + * access, creation, and modify, are set when a file is created. + * sync() maintains the last access date and last modify date/time. + * + * See the timestamp() function. + */ + static void dateTimeCallback( + void (*dateTime)(uint16_t* date, uint16_t* time)) { + m_dateTime = dateTime; + } + /** Cancel the date/time callback function. */ + static void dateTimeCallbackCancel() {m_dateTime = 0;} + bool dirEntry(dir_t* dir); + static void dirName(const dir_t& dir, char* name); + bool exists(const char* name); + int16_t fgets(char* str, int16_t num, char* delim = 0); + /** \return The total number of bytes in a file or directory. */ + uint32_t fileSize() const {return m_fileSize;} + /** \return The first cluster number for a file or directory. */ + uint32_t firstCluster() const {return m_firstCluster;} + bool getFilename(char* name); + /** \return True if this is a directory else false. */ + bool isDir() const {return m_type >= FAT_FILE_TYPE_MIN_DIR;} + /** \return True if this is a normal file else false. */ + bool isFile() const {return m_type == FAT_FILE_TYPE_NORMAL;} + /** \return True if this is an open file/directory else false. */ + bool isOpen() const {return m_type != FAT_FILE_TYPE_CLOSED;} + /** \return True if this is a subdirectory else false. */ + bool isSubDir() const {return m_type == FAT_FILE_TYPE_SUBDIR;} + /** \return True if this is the root directory. */ + bool isRoot() const { + return m_type == FAT_FILE_TYPE_ROOT_FIXED || m_type == FAT_FILE_TYPE_ROOT32; + } + void ls(Print* pr, uint8_t flags = 0, uint8_t indent = 0); + void ls(uint8_t flags = 0); + bool mkdir(SdBaseFile* dir, const char* path, bool pFlag = true); + // alias for backward compactability + bool makeDir(SdBaseFile* dir, const char* path) { + return mkdir(dir, path, false); + } + bool open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag); + bool open(SdBaseFile* dirFile, const char* path, uint8_t oflag); + bool open(const char* path, uint8_t oflag = O_READ); + bool openNext(SdBaseFile* dirFile, uint8_t oflag); + bool openRoot(SdVolume* vol); + int peek(); + bool printCreateDateTime(Print* pr); + static void printFatDate(uint16_t fatDate); + static void printFatDate(Print* pr, uint16_t fatDate); + static void printFatTime(uint16_t fatTime); + static void printFatTime(Print* pr, uint16_t fatTime); + int printField(float value, char term, uint8_t prec = 2); + int printField(int16_t value, char term); + int printField(uint16_t value, char term); + int printField(int32_t value, char term); + int printField(uint32_t value, char term); + bool printModifyDateTime(Print* pr); + size_t printName(); + size_t printName(Print* pr); + size_t printFileSize(Print* pr); + int16_t read(); + int read(void* buf, size_t nbyte); + int8_t readDir(dir_t* dir); + static bool remove(SdBaseFile* dirFile, const char* path); + bool remove(); + /** Set the file's current position to zero. */ + void rewind() {seekSet(0);} + bool rename(SdBaseFile* dirFile, const char* newPath); + bool rmdir(); + // for backward compatibility + bool rmDir() {return rmdir();} + bool rmRfStar(); + /** Set the files position to current position + \a pos. See seekSet(). + * \param[in] offset The new position in bytes from the current position. + * \return true for success or false for failure. + */ + bool seekCur(int32_t offset) { + return seekSet(m_curPosition + offset); + } + /** Set the files position to end-of-file + \a offset. See seekSet(). + * \param[in] offset The new position in bytes from end-of-file. + * \return true for success or false for failure. + */ + bool seekEnd(int32_t offset = 0) {return seekSet(m_fileSize + offset);} + bool seekSet(uint32_t pos); + bool sync(); + bool timestamp(SdBaseFile* file); + bool timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, + uint8_t hour, uint8_t minute, uint8_t second); + /** Type of file. You should use isFile() or isDir() instead of type() + * if possible. + * + * \return The file or directory type. + */ + uint8_t type() const {return m_type;} + bool truncate(uint32_t size); + /** \return SdVolume that contains this file. */ + SdVolume* volume() const {return m_vol;} + int write(const void* buf, size_t nbyte); +//------------------------------------------------------------------------------ + private: + // allow SdFat to set m_cwd + friend class SdFat; + /** experimental don't use */ + bool openParent(SdBaseFile* dir); + + // private functions + bool addCluster(); + cache_t* addDirCluster(); + dir_t* cacheDirEntry(uint8_t action); + int8_t lsPrintNext(Print *pr, uint8_t flags, uint8_t indent); + static bool make83Name(const char* str, uint8_t* name, const char** ptr); + bool mkdir(SdBaseFile* parent, const uint8_t dname[11]); + bool open(SdBaseFile* dirFile, const uint8_t dname[11], uint8_t oflag); + bool openCachedEntry(uint8_t cacheIndex, uint8_t oflags); + dir_t* readDirCache(); + static void setCwd(SdBaseFile* cwd) {m_cwd = cwd;} + bool setDirSize(); + + // bits defined in m_flags + // should be 0X0F + static uint8_t const F_OFLAG = (O_ACCMODE | O_APPEND | O_SYNC); + // sync of directory entry required + static uint8_t const F_FILE_DIR_DIRTY = 0X80; + + // global pointer to cwd dir + static SdBaseFile* m_cwd; + // data time callback function + static void (*m_dateTime)(uint16_t* date, uint16_t* time); + // private data + uint8_t m_flags; // See above for definition of m_flags bits + uint8_t m_type; // type of file see above for values + uint8_t m_dirIndex; // index of directory entry in dirBlock + SdVolume* m_vol; // volume where file is located + uint32_t m_curCluster; // cluster for current file position + uint32_t m_curPosition; // current file position in bytes from beginning + uint32_t m_dirBlock; // block for this files directory entry + uint32_t m_fileSize; // file size in bytes + uint32_t m_firstCluster; // first cluster of file +}; +#endif // SdBaseFile_h diff --git a/libs/SdFat-master/SdFat/SdBaseFilePrint.cpp b/libs/SdFat-master/SdFat/SdBaseFilePrint.cpp new file mode 100755 index 0000000..fbf5f5f --- /dev/null +++ b/libs/SdFat-master/SdFat/SdBaseFilePrint.cpp @@ -0,0 +1,351 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +#include +#include +//------------------------------------------------------------------------------ +/** List directory contents to stdOut. + * + * \param[in] flags The inclusive OR of + * + * LS_DATE - %Print file modification date + * + * LS_SIZE - %Print file size. + * + * LS_R - Recursive list of subdirectories. + */ +void SdBaseFile::ls(uint8_t flags) { + ls(SdFat::stdOut(), flags, 0); +} +//------------------------------------------------------------------------------ +/** List directory contents. + * + * \param[in] pr Print stream for list. + * + * \param[in] flags The inclusive OR of + * + * LS_DATE - %Print file modification date + * + * LS_SIZE - %Print file size. + * + * LS_R - Recursive list of subdirectories. + * + * \param[in] indent Amount of space before file name. Used for recursive + * list to indicate subdirectory level. + */ +void SdBaseFile::ls(Print* pr, uint8_t flags, uint8_t indent) { + if (!isDir()) { + pr->println(F("bad dir")); + return; + } + rewind(); + int8_t status; + while ((status = lsPrintNext(pr, flags, indent))) { + if (status > 1 && (flags & LS_R)) { + uint16_t index = curPosition()/32 - 1; + SdBaseFile s; + if (s.open(this, index, O_READ)) s.ls(pr, flags, indent + 2); + seekSet(32 * (index + 1)); + } + } +} +//------------------------------------------------------------------------------ +// saves 32 bytes on stack for ls recursion +// return 0 - EOF, 1 - normal file, or 2 - directory +int8_t SdBaseFile::lsPrintNext(Print *pr, uint8_t flags, uint8_t indent) { + dir_t dir; + uint8_t w = 0; + + while (1) { + if (read(&dir, sizeof(dir)) != sizeof(dir)) return 0; + if (dir.name[0] == DIR_NAME_FREE) return 0; + + // skip deleted entry and entries for . and .. + if (dir.name[0] != DIR_NAME_DELETED && dir.name[0] != '.' + && DIR_IS_FILE_OR_SUBDIR(&dir)) break; + } + // indent for dir level + for (uint8_t i = 0; i < indent; i++) pr->write(' '); + + // print name + for (uint8_t i = 0; i < 11; i++) { + if (dir.name[i] == ' ')continue; + if (i == 8) { + pr->write('.'); + w++; + } + pr->write(dir.name[i]); + w++; + } + if (DIR_IS_SUBDIR(&dir)) { + pr->write('/'); + w++; + } + if (flags & (LS_DATE | LS_SIZE)) { + while (w++ < 14) pr->write(' '); + } + // print modify date/time if requested + if (flags & LS_DATE) { + pr->write(' '); + printFatDate(pr, dir.lastWriteDate); + pr->write(' '); + printFatTime(pr, dir.lastWriteTime); + } + // print size if requested + if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { + pr->write(' '); + pr->print(dir.fileSize); + } + pr->println(); + return DIR_IS_FILE(&dir) ? 1 : 2; +} +//------------------------------------------------------------------------------ +// print uint8_t with width 2 +static void print2u(Print* pr, uint8_t v) { + if (v < 10) pr->write('0'); + pr->print(v, DEC); +} +//------------------------------------------------------------------------------ +/** Print a file's creation date and time + * + * \param[in] pr Print stream for output. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +bool SdBaseFile::printCreateDateTime(Print* pr) { + dir_t dir; + if (!dirEntry(&dir)) { + DBG_FAIL_MACRO; + goto fail; + } + printFatDate(pr, dir.creationDate); + pr->write(' '); + printFatTime(pr, dir.creationTime); + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +/** %Print a directory date field to stdOut. + * + * Format is yyyy-mm-dd. + * + * \param[in] fatDate The date field from a directory entry. + */ +void SdBaseFile::printFatDate(uint16_t fatDate) { + printFatDate(SdFat::stdOut(), fatDate); +} +//------------------------------------------------------------------------------ +/** %Print a directory date field. + * + * Format is yyyy-mm-dd. + * + * \param[in] pr Print stream for output. + * \param[in] fatDate The date field from a directory entry. + */ +void SdBaseFile::printFatDate(Print* pr, uint16_t fatDate) { + pr->print(FAT_YEAR(fatDate)); + pr->write('-'); + print2u(pr, FAT_MONTH(fatDate)); + pr->write('-'); + print2u(pr, FAT_DAY(fatDate)); +} +//------------------------------------------------------------------------------ +/** %Print a directory time field to stdOut. + * + * Format is hh:mm:ss. + * + * \param[in] fatTime The time field from a directory entry. + */ +void SdBaseFile::printFatTime(uint16_t fatTime) { + printFatTime(SdFat::stdOut(), fatTime); +} +//------------------------------------------------------------------------------ +/** %Print a directory time field. + * + * Format is hh:mm:ss. + * + * \param[in] pr Print stream for output. + * \param[in] fatTime The time field from a directory entry. + */ +void SdBaseFile::printFatTime(Print* pr, uint16_t fatTime) { + print2u(pr, FAT_HOUR(fatTime)); + pr->write(':'); + print2u(pr, FAT_MINUTE(fatTime)); + pr->write(':'); + print2u(pr, FAT_SECOND(fatTime)); +} +//------------------------------------------------------------------------------ +/** Template for SdBaseFile::printField() */ +template +static int printFieldT(SdBaseFile* file, char sign, Type value, char term) { + char buf[3*sizeof(Type) + 3]; + char* str = &buf[sizeof(buf)]; + + if (term) { + *--str = term; + if (term == '\n') { + *--str = '\r'; + } + } +#ifdef OLD_FMT + do { + Type m = value; + value /= 10; + *--str = '0' + m - 10*value; + } while (value); +#else // OLD_FMT + str = fmtDec(value, str); +#endif // OLD_FMT + if (sign) { + *--str = sign; + } + return file->write(str, &buf[sizeof(buf)] - str); +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. Use '\\n' for CR LF. + * \param[in] prec Number of digits after decimal point. + * \return The number of bytes written or -1 if an error occurs. + */ +int SdBaseFile::printField(float value, char term, uint8_t prec) { + char buf[24]; + char* str = &buf[sizeof(buf)]; + if (term) { + *--str = term; + if (term == '\n') { + *--str = '\r'; + } + } + str = fmtFloat(value, str, prec); + return write(str, buf + sizeof(buf) - str); +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. Use '\\n' for CR LF. + * \return The number of bytes written or -1 if an error occurs. + */ +int SdBaseFile::printField(uint16_t value, char term) { + return printFieldT(this, 0, value, term); +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. Use '\\n' for CR LF. + * \return The number of bytes written or -1 if an error occurs. + */ +int SdBaseFile::printField(int16_t value, char term) { + char sign = 0; + if (value < 0) { + sign = '-'; + value = -value; + } + return printFieldT(this, sign, (uint16_t)value, term); +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. Use '\\n' for CR LF. + * \return The number of bytes written or -1 if an error occurs. + */ +int SdBaseFile::printField(uint32_t value, char term) { + return printFieldT(this, 0, value, term); +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. Use '\\n' for CR LF. + * \return The number of bytes written or -1 if an error occurs. + */ +int SdBaseFile::printField(int32_t value, char term) { + char sign = 0; + if (value < 0) { + sign = '-'; + value = -value; + } + return printFieldT(this, sign, (uint32_t)value, term); +} +//------------------------------------------------------------------------------ +/** Print a file's modify date and time + * + * \param[in] pr Print stream for output. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +bool SdBaseFile::printModifyDateTime(Print* pr) { + dir_t dir; + if (!dirEntry(&dir)) { + DBG_FAIL_MACRO; + goto fail; + } + printFatDate(pr, dir.lastWriteDate); + pr->write(' '); + printFatTime(pr, dir.lastWriteTime); + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +/** Print a file's name + * + * \param[in] pr Print stream for output. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +size_t SdBaseFile::printName(Print* pr) { + char name[13]; + if (!getFilename(name)) { + DBG_FAIL_MACRO; + goto fail; + } + return pr->print(name); + + fail: + return 0; +} +//------------------------------------------------------------------------------ +/** Print a file's name to stdOut + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +size_t SdBaseFile::printName() { + return printName(SdFat::stdOut()); +} +//------------------------------------------------------------------------------ +/** Print a file's size. + * + * \param[in] pr Print stream for output. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +size_t SdBaseFile::printFileSize(Print* pr) { + char buf[10]; + char *ptr = fmtDec(fileSize(), buf + sizeof(buf)); + while (ptr > buf) *--ptr = ' '; + return pr->write(reinterpret_cast(buf), sizeof(buf)); +} diff --git a/libs/SdFatBeta20120108/SdFat/SdFat.cpp b/libs/SdFat-master/SdFat/SdFat.cpp similarity index 59% rename from libs/SdFatBeta20120108/SdFat/SdFat.cpp rename to libs/SdFat-master/SdFat/SdFat.cpp index 7d4c376..30c54c1 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFat.cpp +++ b/libs/SdFat-master/SdFat/SdFat.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -18,43 +18,28 @@ * . */ #include - //------------------------------------------------------------------------------ #if USE_SERIAL_FOR_STD_OUT || !defined(UDR0) -Print* SdFat::stdOut_ = &Serial; +Print* SdFat::m_stdOut = &Serial; #else // USE_SERIAL_FOR_STD_OUT -#if ARDUINO < 100 -class DefaultSerial : public Print { - public: - void write(uint8_t b); -}; -void DefaultSerial::write(uint8_t b) { - while (((1 << UDRIE0) & UCSR0B) || !(UCSR0A & (1 << UDRE0))) {} - UDR0 = b; -} -#else // ARDUINO < 100 -class DefaultSerial : public Print { - public: - size_t write(uint8_t b); -}; -size_t DefaultSerial::write(uint8_t b) { - while (((1 << UDRIE0) & UCSR0B) || !(UCSR0A & (1 << UDRE0))) {} - UDR0 = b; - return 1; -} -#endif // ARDUINO < 100 -//------------------------------------------------------------------------------ -static DefaultSerial defaultStdOut; - -Print* SdFat::stdOut_ = &defaultStdOut;//&Serial; +#include +Print* SdFat::m_stdOut = &MiniSerial; #endif // USE_SERIAL_FOR_STD_OUT //------------------------------------------------------------------------------ -static void pstrPrint(PGM_P str) { - for (uint8_t c; (c = pgm_read_byte(str)); str++) SdFat::stdOut()->write(c); -} -static void pstrPrintln(PGM_P str) { - pstrPrint(str); - SdFat::stdOut()->println(); +/** + * Initialize an SdFat object. + * + * Initializes the SD card, SD volume, and root directory. + * + * \param[in] chipSelectPin SD chip select pin. See Sd2Card::init(). + * \param[in] sckDivisor value for SPI SCK divisor. See Sd2Card::init(). + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. + */ +bool SdFat::begin(uint8_t chipSelectPin, uint8_t sckDivisor) { + return m_card.begin(chipSelectPin, sckDivisor) + && m_vol.init(&m_card) && chdir(1); } //------------------------------------------------------------------------------ /** Change a volume's working directory to root @@ -70,9 +55,9 @@ static void pstrPrintln(PGM_P str) { * the value zero, false, is returned for failure. */ bool SdFat::chdir(bool set_cwd) { - if (set_cwd) SdBaseFile::cwd_ = &vwd_; - vwd_.close(); - return vwd_.openRoot(&vol_); + if (set_cwd) SdBaseFile::setCwd(&m_vwd); + if (m_vwd.isOpen()) m_vwd.close(); + return m_vwd.openRoot(&m_vol); } //------------------------------------------------------------------------------ /** Change a volume's working directory @@ -97,11 +82,11 @@ bool SdFat::chdir(bool set_cwd) { */ bool SdFat::chdir(const char *path, bool set_cwd) { SdBaseFile dir; - if (path[0] == '/' && path[1] == '\0') return chdir(set_cwd); - if (!dir.open(&vwd_, path, O_READ)) goto fail; + dir.open(&m_vwd, path, O_READ); + // Check for correctly open directory. if (!dir.isDir()) goto fail; - vwd_ = dir; - if (set_cwd) SdBaseFile::cwd_ = &vwd_; + m_vwd = dir; + if (set_cwd) SdBaseFile::setCwd(&m_vwd); return true; fail: @@ -117,58 +102,7 @@ bool SdFat::chdir(const char *path, bool set_cwd) { * This is like the Windows/DOS \: command. */ void SdFat::chvol() { - SdBaseFile::cwd_ = &vwd_; -} -//------------------------------------------------------------------------------ -/** %Print any SD error code and halt. */ -void SdFat::errorHalt() { - errorPrint(); - while (1); -} -//------------------------------------------------------------------------------ -/** %Print msg, any SD error code, and halt. - * - * \param[in] msg Message to print. - */ -void SdFat::errorHalt(char const* msg) { - errorPrint(msg); - while (1); -} -//------------------------------------------------------------------------------ -/** %Print msg, any SD error code, and halt. - * - * \param[in] msg Message in program space (flash memory) to print. - */ -void SdFat::errorHalt_P(PGM_P msg) { - errorPrint_P(msg); - while (1); -} -//------------------------------------------------------------------------------ -/** %Print any SD error code. */ -void SdFat::errorPrint() { - if (!card_.errorCode()) return; - pstrPrint(PSTR("SD errorCode: 0X")); - stdOut_->println(card_.errorCode(), HEX); -} -//------------------------------------------------------------------------------ -/** %Print msg, any SD error code. - * - * \param[in] msg Message to print. - */ -void SdFat::errorPrint(char const* msg) { - pstrPrint(PSTR("error: ")); - stdOut_->println(msg); - errorPrint(); -} -//------------------------------------------------------------------------------ -/** %Print msg, any SD error code. - * - * \param[in] msg Message in program space (flash memory) to print. - */ -void SdFat::errorPrint_P(PGM_P msg) { - pstrPrint(PSTR("error: ")); - pstrPrintln(msg); - errorPrint(); + SdBaseFile::setCwd(&m_vwd); } //------------------------------------------------------------------------------ /** @@ -179,84 +113,42 @@ void SdFat::errorPrint_P(PGM_P msg) { * \return true if the file exists else false. */ bool SdFat::exists(const char* name) { - return vwd_.exists(name); + return m_vwd.exists(name); } //------------------------------------------------------------------------------ -/** - * Initialize an SdFat object. +/** List the directory contents of the volume working directory to stdOut. * - * Initializes the SD card, SD volume, and root directory. + * \param[in] flags The inclusive OR of * - * \param[in] sckRateID value for SPI SCK rate. See Sd2Card::init(). - * \param[in] chipSelectPin SD chip select pin. See Sd2Card::init(). + * LS_DATE - %Print file modification date * - * \return The value one, true, is returned for success and - * the value zero, false, is returned for failure. - */ -bool SdFat::init(uint8_t sckRateID, uint8_t chipSelectPin) { - return card_.init(sckRateID, chipSelectPin) && vol_.init(&card_) && chdir(1); -} -//------------------------------------------------------------------------------ -/** %Print error details and halt after SdFat::init() fails. */ -void SdFat::initErrorHalt() { - initErrorPrint(); - while (1); -} -//------------------------------------------------------------------------------ -/**Print message, error details, and halt after SdFat::init() fails. + * LS_SIZE - %Print file size. * - * \param[in] msg Message to print. + * LS_R - Recursive list of subdirectories. */ -void SdFat::initErrorHalt(char const *msg) { - stdOut_->println(msg); - initErrorHalt(); +void SdFat::ls(uint8_t flags) { + m_vwd.ls(m_stdOut, flags); } //------------------------------------------------------------------------------ -/**Print message, error details, and halt after SdFat::init() fails. +/** List the directory contents of the volume working directory to stdOut. * - * \param[in] msg Message in program space (flash memory) to print. - */ -void SdFat::initErrorHalt_P(PGM_P msg) { - pstrPrintln(msg); - initErrorHalt(); -} -//------------------------------------------------------------------------------ -/** Print error details after SdFat::init() fails. */ -void SdFat::initErrorPrint() { - if (card_.errorCode()) { - pstrPrintln(PSTR("Can't access SD card. Do not reformat.")); - if (card_.errorCode() == SD_CARD_ERROR_CMD0) { - pstrPrintln(PSTR("No card, wrong chip select pin, or SPI problem?")); - } - errorPrint(); - } else if (vol_.fatType() == 0) { - pstrPrintln(PSTR("Invalid format, reformat SD.")); - } else if (!vwd_.isOpen()) { - pstrPrintln(PSTR("Can't open root directory.")); - } else { - pstrPrintln(PSTR("No error found.")); - } -} -//------------------------------------------------------------------------------ -/**Print message and error details and halt after SdFat::init() fails. + * \param[in] path directory to list. * - * \param[in] msg Message to print. - */ -void SdFat::initErrorPrint(char const *msg) { - stdOut_->println(msg); - initErrorPrint(); -} -//------------------------------------------------------------------------------ -/**Print message and error details after SdFat::init() fails. + * \param[in] flags The inclusive OR of * - * \param[in] msg Message in program space (flash memory) to print. + * LS_DATE - %Print file modification date + * + * LS_SIZE - %Print file size. + * + * LS_R - Recursive list of subdirectories. */ -void SdFat::initErrorPrint_P(PGM_P msg) { - pstrPrintln(msg); - initErrorHalt(); +void SdFat::ls(const char* path, uint8_t flags) { + ls(m_stdOut, path, flags); } //------------------------------------------------------------------------------ -/** List the directory contents of the volume working directory to stdOut. +/** List the directory contents of the volume working directory. + * + * \param[in] pr Print stream for the list. * * \param[in] flags The inclusive OR of * @@ -266,13 +158,15 @@ void SdFat::initErrorPrint_P(PGM_P msg) { * * LS_R - Recursive list of subdirectories. */ -void SdFat::ls(uint8_t flags) { - vwd_.ls(stdOut_, flags); +void SdFat::ls(Print* pr, uint8_t flags) { + m_vwd.ls(pr, flags); } //------------------------------------------------------------------------------ -/** List the directory contents of the volume working directory. +/** List the directory contents of the volume working directory to stdOut. * - * \param[in] pr Print stream for list. + * \param[in] pr Print stream for the list. + * + * \param[in] path directory to list. * * \param[in] flags The inclusive OR of * @@ -282,8 +176,9 @@ void SdFat::ls(uint8_t flags) { * * LS_R - Recursive list of subdirectories. */ -void SdFat::ls(Print* pr, uint8_t flags) { - vwd_.ls(pr, flags); +void SdFat::ls(Print* pr, const char* path, uint8_t flags) { + SdBaseFile dir(path, O_READ); + dir.ls(pr, flags); } //------------------------------------------------------------------------------ /** Make a subdirectory in the volume working directory. @@ -297,7 +192,7 @@ void SdFat::ls(Print* pr, uint8_t flags) { */ bool SdFat::mkdir(const char* path, bool pFlag) { SdBaseFile sub; - return sub.mkdir(&vwd_, path, pFlag); + return sub.mkdir(&m_vwd, path, pFlag); } //------------------------------------------------------------------------------ /** Remove a file from the volume working directory. @@ -308,7 +203,7 @@ bool SdFat::mkdir(const char* path, bool pFlag) { * the value zero, false, is returned for failure. */ bool SdFat::remove(const char* path) { - return SdBaseFile::remove(&vwd_, path); + return SdBaseFile::remove(&m_vwd, path); } //------------------------------------------------------------------------------ /** Rename a file or subdirectory. @@ -329,7 +224,7 @@ bool SdFat::remove(const char* path) { bool SdFat::rename(const char *oldPath, const char *newPath) { SdBaseFile file; if (!file.open(oldPath, O_READ)) return false; - return file.rename(&vwd_, newPath); + return file.rename(&m_vwd, newPath); } //------------------------------------------------------------------------------ /** Remove a subdirectory from the volume's working directory. diff --git a/libs/SdFatBeta20120108/SdFat/SdFat.h b/libs/SdFat-master/SdFat/SdFat.h similarity index 61% rename from libs/SdFatBeta20120108/SdFat/SdFat.h rename to libs/SdFat-master/SdFat/SdFat.h index 019108f..535f6d9 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFat.h +++ b/libs/SdFat-master/SdFat/SdFat.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -23,12 +23,23 @@ * \file * \brief SdFat class */ +//------------------------------------------------------------------------------ +/** Macro for debug. */ +#define DBG_FAIL_MACRO // Serial.print(__FILE__);Serial.println(__LINE__) +//------------------------------------------------------------------------------ +/** SdFat version YYYYMMDD */ +#define SD_FAT_VERSION 20141111 +//------------------------------------------------------------------------------ +/** error if old IDE */ +#if !defined(ARDUINO) || ARDUINO < 100 +#error Arduino IDE must be 1.0 or greater +#endif // ARDUINO < 100 +//------------------------------------------------------------------------------ #include #include +#include #include -//------------------------------------------------------------------------------ -/** SdFat version YYYYMMDD */ -#define SD_FAT_VERSION 20120108 +#include //------------------------------------------------------------------------------ /** * \class SdFat @@ -38,50 +49,64 @@ class SdFat { public: SdFat() {} /** \return a pointer to the Sd2Card object. */ - Sd2Card* card() {return &card_;} + Sd2Card* card() {return &m_card;} bool chdir(bool set_cwd = false); bool chdir(const char* path, bool set_cwd = false); void chvol(); void errorHalt(); - void errorHalt_P(PGM_P msg); void errorHalt(char const *msg); void errorPrint(); - void errorPrint_P(PGM_P msg); void errorPrint(char const *msg); bool exists(const char* name); - bool init(uint8_t sckRateID = SPI_FULL_SPEED, - uint8_t chipSelectPin = SD_CHIP_SELECT_PIN); + bool begin(uint8_t chipSelectPin = SD_CHIP_SELECT_PIN, + uint8_t sckDivisor = SPI_FULL_SPEED); void initErrorHalt(); void initErrorHalt(char const *msg); - void initErrorHalt_P(PGM_P msg); void initErrorPrint(); void initErrorPrint(char const *msg); - void initErrorPrint_P(PGM_P msg); void ls(uint8_t flags = 0); + void ls(const char* path, uint8_t flags = 0); void ls(Print* pr, uint8_t flags = 0); + void ls(Print* pr, const char* path, uint8_t flags = 0); bool mkdir(const char* path, bool pFlag = true); bool remove(const char* path); bool rename(const char *oldPath, const char *newPath); bool rmdir(const char* path); - bool truncate(const char* path, uint32_t length); /** \return a pointer to the SdVolume object. */ - SdVolume* vol() {return &vol_;} + SdVolume* vol() {return &m_vol;} /** \return a pointer to the volume working directory. */ - SdBaseFile* vwd() {return &vwd_;} + SdBaseFile* vwd() {return &m_vwd;} + //---------------------------------------------------------------------------- + void errorHalt_P(PGM_P msg); + void errorPrint_P(PGM_P msg); + void initErrorHalt_P(PGM_P msg); + void initErrorPrint_P(PGM_P msg); //---------------------------------------------------------------------------- - // static functions for stdOut /** * Set stdOut Print stream for messages. * \param[in] stream The new Print stream. */ - static void setStdOut(Print* stream) {stdOut_ = stream;} + static void setStdOut(Print* stream) {m_stdOut = stream;} /** \return Print stream for messages. */ - static Print* stdOut() {return stdOut_;} + static Print* stdOut() {return m_stdOut;} + //---------------------------------------------------------------------------- + /** open a file + * + * \param[in] path location of file to be opened. + * \param[in] mode open mode flags. + * \return a File object. + */ + File open(const char *path, uint8_t mode = FILE_READ) { + File tmpFile; + tmpFile.open(&m_vwd, path, mode); + return tmpFile; + } + private: - Sd2Card card_; - SdVolume vol_; - SdBaseFile vwd_; - static Print* stdOut_; + Sd2Card m_card; + SdVolume m_vol; + SdBaseFile m_vwd; + static Print* m_stdOut; }; #endif // SdFat_h diff --git a/libs/SdFat-master/SdFat/SdFatConfig.h b/libs/SdFat-master/SdFat/SdFatConfig.h new file mode 100755 index 0000000..376eb5a --- /dev/null +++ b/libs/SdFat-master/SdFat/SdFatConfig.h @@ -0,0 +1,205 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +/** + * \file + * \brief configuration definitions + */ +#ifndef SdFatConfig_h +#define SdFatConfig_h +#include +#ifdef __AVR__ +#include +#endif // __AVR__ +//------------------------------------------------------------------------------ +/** + * Set SD_FILE_USES_STREAM nonzero to use Stream instead of Print for SdFile. + * Using Stream will use more flash and may cause compatibility problems + * with code written for older versions of SdFat. + */ +#define SD_FILE_USES_STREAM 0 + +//------------------------------------------------------------------------------ +/** + * To enable SD card CRC checking set USE_SD_CRC nonzero. + * + * Set USE_SD_CRC to 1 to use a smaller slower CRC-CCITT function. + * + * Set USE_SD_CRC to 2 to used a larger faster table driven CRC-CCITT function. + */ +#define USE_SD_CRC 0 +//------------------------------------------------------------------------------ +/** + * To use multiple SD cards set USE_MULTIPLE_CARDS nonzero. + * + * Using multiple cards costs about 200 bytes of flash. + * + * Each card requires about 550 bytes of SRAM so use of a Mega is recommended. + */ +#define USE_MULTIPLE_CARDS 0 +//------------------------------------------------------------------------------ +/** + * Set DESTRUCTOR_CLOSES_FILE nonzero to close a file in its destructor. + * + * Causes use of lots of heap in ARM. + */ +#define DESTRUCTOR_CLOSES_FILE 0 +//------------------------------------------------------------------------------ +/** + * For AVR + * + * Set USE_SERIAL_FOR_STD_OUT nonzero to use Serial (the HardwareSerial class) + * for error messages and output from print functions like ls(). + * + * If USE_SERIAL_FOR_STD_OUT is zero, a small non-interrupt driven class + * is used to output messages to serial port zero. This allows an alternate + * Serial library like SerialPort to be used with SdFat. + * + * You can redirect stdOut with SdFat::setStdOut(Print* stream) and + * get the current stream with SdFat::stdOut(). + */ +#define USE_SERIAL_FOR_STD_OUT 0 +//------------------------------------------------------------------------------ +/** + * Set FAT12_SUPPORT nonzero to enable use if FAT12 volumes. + * FAT12 has not been well tested and requires additional flash. + */ +#define FAT12_SUPPORT 0 +//------------------------------------------------------------------------------ +/** + * Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature + * of the standard Arduino SPI library. You must include SPI.h in your + * sketches when ENABLE_SPI_TRANSACTION is nonzero. + */ +#define ENABLE_SPI_TRANSACTION 0 +//------------------------------------------------------------------------------ +/** + * Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during + * SD card busy waits. + * + * This will allow interrupt routines to access the SPI bus if + * ENABLE_SPI_TRANSACTION is nonzero. + * + * Setting ENABLE_SPI_YIELD will introduce some extra overhead and will + * slightly slow transfer rates. A few older SD cards may fail when + * ENABLE_SPI_YIELD is nonzero. + */ +#define ENABLE_SPI_YIELD 0 +//------------------------------------------------------------------------------ +/** + * Set USE_ARDUINO_SPI_LIBRARY nonzero to force use of Arduino Standard + * SPI library. This will override native and software SPI for all boards. + */ +#define USE_ARDUINO_SPI_LIBRARY 0 +//------------------------------------------------------------------------------ +/** + * Set AVR_SOFT_SPI nonzero to use software SPI on all AVR Arduinos. + */ +#define AVR_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Set DUE_SOFT_SPI nonzero to use software SPI on Due Arduinos. + */ +#define DUE_SOFT_SPI 0 +//------------------------------------------------------------------------------ + +/** + * Set LEONARDO_SOFT_SPI nonzero to use software SPI on Leonardo Arduinos. + * LEONARDO_SOFT_SPI allows an unmodified 328 Shield to be used + * on Leonardo Arduinos. + */ +#define LEONARDO_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Set MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos. + * MEGA_SOFT_SPI allows an unmodified 328 Shield to be used + * on Mega Arduinos. + */ +#define MEGA_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Set TEENSY3_SOFT_SPI nonzero to use software SPI on Teensy 3.x boards. + */ +#define TEENSY3_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Define software SPI pins. Default allows Uno shields to be used on other + * boards. + */ +// define software SPI pins +/** Default Software SPI chip select pin */ +uint8_t const SOFT_SPI_CS_PIN = 10; +/** Software SPI Master Out Slave In pin */ +uint8_t const SOFT_SPI_MOSI_PIN = 11; +/** Software SPI Master In Slave Out pin */ +uint8_t const SOFT_SPI_MISO_PIN = 12; +/** Software SPI Clock pin */ +uint8_t const SOFT_SPI_SCK_PIN = 13; +//------------------------------------------------------------------------------ +/** + * Call flush for endl if ENDL_CALLS_FLUSH is nonzero + * + * The standard for iostreams is to call flush. This is very costly for + * SdFat. Each call to flush causes 2048 bytes of I/O to the SD. + * + * SdFat has a single 512 byte buffer for SD I/O so it must write the current + * data block to the SD, read the directory block from the SD, update the + * directory entry, write the directory block to the SD and read the data + * block back into the buffer. + * + * The SD flash memory controller is not designed for this many rewrites + * so performance may be reduced by more than a factor of 100. + * + * If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force + * all data to be written to the SD. + */ +#define ENDL_CALLS_FLUSH 0 +//------------------------------------------------------------------------------ +/** + * SPI SCK divisor for SD initialization commands. + * or greater + */ +#ifdef __AVR__ +const uint8_t SPI_SCK_INIT_DIVISOR = 64; +#else +const uint8_t SPI_SCK_INIT_DIVISOR = 128; +#endif +//------------------------------------------------------------------------------ +/** + * Set USE_SEPARATE_FAT_CACHE nonzero to use a second 512 byte cache + * for FAT table entries. Improves performance for large writes that + * are not a multiple of 512 bytes. + */ +#ifdef __arm__ +#define USE_SEPARATE_FAT_CACHE 1 +#else // __arm__ +#define USE_SEPARATE_FAT_CACHE 0 +#endif // __arm__ +//------------------------------------------------------------------------------ +/** + * Set USE_MULTI_BLOCK_SD_IO nonzero to use multi-block SD read/write. + * + * Don't use mult-block read/write on small AVR boards. + */ +#if defined(RAMEND) && RAMEND < 3000 +#define USE_MULTI_BLOCK_SD_IO 0 +#else // RAMEND +#define USE_MULTI_BLOCK_SD_IO 1 +#endif // RAMEND +#endif // SdFatConfig_h diff --git a/libs/SdFat-master/SdFat/SdFatErrorPrint.cpp b/libs/SdFat-master/SdFat/SdFatErrorPrint.cpp new file mode 100755 index 0000000..9240301 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdFatErrorPrint.cpp @@ -0,0 +1,145 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +#include +#ifndef PSTR +#define PSTR(x) x +#define PGM_P const char* +#endif +//------------------------------------------------------------------------------ +static void pstrPrint(PGM_P str) { + for (uint8_t c; (c = pgm_read_byte(str)); str++) SdFat::stdOut()->write(c); +} +//------------------------------------------------------------------------------ +static void pstrPrintln(PGM_P str) { + pstrPrint(str); + SdFat::stdOut()->println(); +} +//------------------------------------------------------------------------------ +/** %Print any SD error code and halt. */ +void SdFat::errorHalt() { + errorPrint(); + while (1) {} +} +//------------------------------------------------------------------------------ +/** %Print msg, any SD error code, and halt. + * + * \param[in] msg Message to print. + */ +void SdFat::errorHalt(char const* msg) { + errorPrint(msg); + while (1) {} +} +//------------------------------------------------------------------------------ +/** %Print msg, any SD error code, and halt. + * + * \param[in] msg Message in program space (flash memory) to print. + */ +void SdFat::errorHalt_P(PGM_P msg) { + errorPrint_P(msg); + while (1) {} +} +//------------------------------------------------------------------------------ +/** %Print any SD error code. */ +void SdFat::errorPrint() { + if (!m_card.errorCode()) return; + pstrPrint(PSTR("SD errorCode: 0X")); + m_stdOut->print(m_card.errorCode(), HEX); + pstrPrint(PSTR(",0X")); + m_stdOut->println(m_card.errorData(), HEX); +} +//------------------------------------------------------------------------------ +/** %Print msg, any SD error code. + * + * \param[in] msg Message to print. + */ +void SdFat::errorPrint(char const* msg) { + pstrPrint(PSTR("error: ")); + m_stdOut->println(msg); + errorPrint(); +} +//------------------------------------------------------------------------------ +/** %Print msg, any SD error code. + * + * \param[in] msg Message in program space (flash memory) to print. + */ +void SdFat::errorPrint_P(PGM_P msg) { + pstrPrint(PSTR("error: ")); + pstrPrintln(msg); + errorPrint(); +} +//------------------------------------------------------------------------------ +/** %Print error details and halt after SdFat::init() fails. */ +void SdFat::initErrorHalt() { + initErrorPrint(); + while (1) {} +} +//------------------------------------------------------------------------------ +/**Print message, error details, and halt after SdFat::init() fails. + * + * \param[in] msg Message to print. + */ +void SdFat::initErrorHalt(char const *msg) { + m_stdOut->println(msg); + initErrorHalt(); +} +//------------------------------------------------------------------------------ +/**Print message, error details, and halt after SdFat::init() fails. + * + * \param[in] msg Message in program space (flash memory) to print. + */ +void SdFat::initErrorHalt_P(PGM_P msg) { + pstrPrintln(msg); + initErrorHalt(); +} +//------------------------------------------------------------------------------ +/** Print error details after SdFat::init() fails. */ +void SdFat::initErrorPrint() { + if (m_card.errorCode()) { + pstrPrintln(PSTR("Can't access SD card. Do not reformat.")); + if (m_card.errorCode() == SD_CARD_ERROR_CMD0) { + pstrPrintln(PSTR("No card, wrong chip select pin, or SPI problem?")); + } + errorPrint(); + } else if (m_vol.fatType() == 0) { + pstrPrintln(PSTR("Invalid format, reformat SD.")); + } else if (!m_vwd.isOpen()) { + pstrPrintln(PSTR("Can't open root directory.")); + } else { + pstrPrintln(PSTR("No error found.")); + } +} +//------------------------------------------------------------------------------ +/**Print message and error details and halt after SdFat::init() fails. + * + * \param[in] msg Message to print. + */ +void SdFat::initErrorPrint(char const *msg) { + m_stdOut->println(msg); + initErrorPrint(); +} +//------------------------------------------------------------------------------ +/**Print message and error details after SdFat::init() fails. + * + * \param[in] msg Message in program space (flash memory) to print. + */ +void SdFat::initErrorPrint_P(PGM_P msg) { + pstrPrintln(msg); + initErrorHalt(); +} diff --git a/libs/SdFatBeta20120108/SdFat/SdFatUtil.cpp b/libs/SdFat-master/SdFat/SdFatUtil.cpp similarity index 81% rename from libs/SdFatBeta20120108/SdFat/SdFatUtil.cpp rename to libs/SdFat-master/SdFat/SdFatUtil.cpp index 96ad149..b0b2aa8 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFatUtil.cpp +++ b/libs/SdFat-master/SdFat/SdFatUtil.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2008 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -17,26 +17,27 @@ * along with the Arduino SdFat Library. If not, see * . */ +#include #include #include +#ifdef __arm__ +// should use uinstd.h to define sbrk but Due causes a conflict +extern "C" char* sbrk(int incr); +#else // __ARM__ +extern char *__brkval; +extern char __bss_end; +#endif // __arm__ //------------------------------------------------------------------------------ /** Amount of free RAM * \return The number of free bytes. */ int SdFatUtil::FreeRam() { - extern int __bss_end; - extern int* __brkval; - int free_memory; - if (reinterpret_cast(__brkval) == 0) { - // if no heap use from end of bss section - free_memory = reinterpret_cast(&free_memory) - - reinterpret_cast(&__bss_end); - } else { - // use from top of stack to heap - free_memory = reinterpret_cast(&free_memory) - - reinterpret_cast(__brkval); - } - return free_memory; + char top; +#ifdef __arm__ + return &top - reinterpret_cast(sbrk(0)); +#else // __arm__ + return __brkval ? &top - __brkval : &top - &__bss_end; +#endif // __arm__ } //------------------------------------------------------------------------------ /** %Print a string in flash memory. diff --git a/libs/SdFatBeta20120108/SdFat/SdFatUtil.h b/libs/SdFat-master/SdFat/SdFatUtil.h similarity index 88% rename from libs/SdFatBeta20120108/SdFat/SdFatUtil.h rename to libs/SdFat-master/SdFat/SdFatUtil.h index 7c4064f..54dbab6 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFatUtil.h +++ b/libs/SdFat-master/SdFat/SdFatUtil.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2008 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -23,12 +23,7 @@ * \file * \brief Useful utility functions. */ -#include -#if ARDUINO < 100 -#include -#else // ARDUINO -#include -#endif // ARDUINO +#include /** Store and print a string in flash memory.*/ #define PgmPrint(x) SerialPrint_P(PSTR(x)) /** Store and print a string in flash memory followed by a CR/LF.*/ @@ -41,6 +36,5 @@ namespace SdFatUtil { void SerialPrint_P(PGM_P str); void SerialPrintln_P(PGM_P str); } - using namespace SdFatUtil; // NOLINT #endif // #define SdFatUtil_h diff --git a/libs/SdFat-master/SdFat/SdFatmainpage.h b/libs/SdFat-master/SdFat/SdFatmainpage.h new file mode 100755 index 0000000..cbad290 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdFatmainpage.h @@ -0,0 +1,264 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ + +/** +\mainpage Arduino %SdFat Library +

Copyright © 2012, 2013, 2014 by William Greiman +
+ +\section Intro Introduction +The Arduino %SdFat Library is a minimal implementation of FAT16 and FAT32 +file systems on SD flash memory cards. Standard SD and high capacity SDHC +cards are supported. + +Experimental support for FAT12 can be enabled by setting FAT12_SUPPORT +nonzero in SdFatConfig.h. + +The %SdFat library only supports short 8.3 names. + +The main classes in %SdFat are SdFat, SdBaseFile, SdFile, File, StdioStream, +\ref fstream, \ref ifstream, and \ref ofstream. + +The SdFat class maintains a FAT volume, a current working directory, +and simplifies initialization of other classes. + +The SdBaseFile class provides basic file access functions such as open(), +binary read(), binary write(), close(), remove(), and sync(). SdBaseFile +is the smallest file class. + +The SdFile class has all the SdBaseFile class functions plus the Arduino +Print class functions. + +The File class has all the SdBaseFile functions plus the functions in +the Arduino SD.h File class. This provides compatibility with the +Arduino SD.h library. + +The StdioStream class implements functions similar to Linux/Unix standard +buffered input/output. + +The \ref fstream class implements C++ iostreams for both reading and writing +text files. + +The \ref ifstream class implements C++ iostreams for reading text files. + +The \ref ofstream class implements C++ iostreams for writing text files. + +The classes \ref ibufstream and \ref obufstream format and parse character + strings in memory buffers. + +the classes ArduinoInStream and ArduinoOutStream provide iostream functions +for Serial, LiquidCrystal, and other devices. + +A number of example are provided in the %SdFat/examples folder. These were +developed to test %SdFat and illustrate its use. + +\section Install Installation + +You must manually install SdFat by copying the SdFat folder from the download +package to the Arduino libraries folder in you sketch book. + +See the Manual installation section of this guide. + +http://arduino.cc/en/Guide/Libraries + +\section SDconfig SdFat Configuration + +Several configuration options may be changed by editing the SdFatConfig.h +file in the SdFat folder. + +Set SD_FILE_USES_STREAM nonzero to use Stream instead of Print for SdFile. +Using Stream will use more flash. + +To enable SD card CRC checking set USE_SD_CRC nonzero. + +To use multiple SD cards set USE_MULTIPLE_CARDS nonzero. + +Set FAT12_SUPPORT nonzero to enable use of FAT12 volumes. +FAT12 has not been well tested and requires additional flash. + +Set USE_ARDUINO_SPI_LIBRARY nonzero to force use of Arduino Standard +SPI library. This will override native and software SPI for all boards. + +Use of software SPI can be enabled for selected boards by setting the symbols +AVR_SOFT_SPI, DUE_SOFT_SPI, LEONARDO_SOFT_SPI, MEGA_SOFT_SPI, +and TEENSY3_SOFT_SPI. + +Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature +of the standard Arduino SPI library. You must include SPI.h in your +sketches when ENABLE_SPI_TRANSACTION is nonzero. + +Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during +SD card busy waits. + +\section SDcard SD\SDHC Cards + +Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and +most consumer devices use the 4-bit parallel SD protocol. A card that +functions well on A PC or Mac may not work well on the Arduino. + +Most cards have good SPI read performance but cards vary widely in SPI +write performance. Write performance is limited by how efficiently the +card manages internal erase/remapping operations. The Arduino cannot +optimize writes to reduce erase operations because of its limit RAM. + +SanDisk cards generally have good write performance. They seem to have +more internal RAM buffering than other cards and therefore can limit +the number of flash erase operations that the Arduino forces due to its +limited RAM. + +\section Hardware Hardware Configuration + +%SdFat was developed using an + Adafruit Industries +Data Logging Shield. + +The hardware interface to the SD card should not use a resistor based level +shifter. %SdFat sets the SPI bus frequency to 8 MHz which results in signal +rise times that are too slow for the edge detectors in many newer SD card +controllers when resistor voltage dividers are used. + +The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like the +74HC4050N based circuit shown in the file SdLevel.png. The Adafruit Wave Shield +uses a 74AHC125N. Gravitech sells SD and MicroSD Card Adapters based on the +74LCX245. + +If you are using a resistor based level shifter and are having problems try +setting the SPI bus frequency to 4 MHz. This can be done by using +card.init(SPI_HALF_SPEED) to initialize the SD card. + +\section comment Bugs and Comments + +If you wish to report bugs or have comments, send email to fat16lib@sbcglobal.net. + +\section SdFatClass SdFat Usage + +%SdFat uses a slightly restricted form of short names. +Short names are limited to 8 characters followed by an optional period (.) +and extension of up to 3 characters. The characters may be any combination +of letters and digits. The following special characters are also allowed: + +$ % ' - _ @ ~ ` ! ( ) { } ^ # & + +Short names are always converted to upper case and their original case +value is lost. + +An application which writes to a file using print(), println() or +\link SdFile::write write() \endlink must call \link SdFile::sync() sync() \endlink +at the appropriate time to force data and directory information to be written +to the SD Card. Data and directory information are also written to the SD card +when \link SdFile::close() close() \endlink is called. + +Applications must use care calling \link SdFile::sync() sync() \endlink +since 2048 bytes of I/O is required to update file and +directory information. This includes writing the current data block, reading +the block that contains the directory entry for update, writing the directory +block back and reading back the current data block. + +It is possible to open a file with two or more instances of a file object. +A file may be corrupted if data is written to the file by more than one +instance of a file object. + +\section HowTo How to format SD Cards as FAT Volumes + +The best way to restore an SD card's format on a PC or Mac is to use +SDFormatter which can be downloaded from: + +http://www.sdcard.org/downloads + +A formatter sketch, SdFormatter.ino, is included in the +%SdFat/examples/SdFormatter directory. This sketch attempts to +emulate SD Association's SDFormatter. + +SDFormatter aligns flash erase boundaries with file +system structures which reduces write latency and file system overhead. + +The PC/Mac SDFormatter does not have an option for FAT type so it may format +very small cards as FAT12. Use the SdFat formatter to force FAT16 +formatting of small cards. + +Do not format the SD card with an OS utility, OS utilities do not format SD +cards in conformance with the SD standard. + +You should use a freshly formatted SD card for best performance. FAT +file systems become slower if many files have been created and deleted. +This is because the directory entry for a deleted file is marked as deleted, +but is not deleted. When a new file is created, these entries must be scanned +before creating the file. Also files can become +fragmented which causes reads and writes to be slower. + +\section ExampleFilder Examples + +A number of examples are provided in the SdFat/examples folder. +See the html documentation for a list. + +To access these examples from the Arduino development environment +go to: %File -> Examples -> %SdFat -> \ + +Compile, upload to your Arduino and click on Serial Monitor to run +the example. + +Here is a list: + +AnalogBinLogger - Fast AVR ADC logger - see the AnalogBinLoggerExtras folder. + +bench - A read/write benchmark. + +cin_cout - Demo of ArduinoInStream and ArduinoOutStream. + +dataLogger - A simple modifiable data logger. + +directoryFunctions - Demo of chdir(), ls(), mkdir(), and rmdir(). + +fgets - Demo of the fgets read line/string function. + +formating - Print a table with various formatting options. + +getline - Example of getline from section 27.7.1.3 of the C++ standard. + +LowLatencyLogger - A modifiable data logger for higher data rates. + +OpenNext - Open all files in the root dir and print their filename. + +PrintBenchmark - A simple benchmark for printing to a text file. + +QuickStart - A sketch to quickly test your SD card and SD shield/module. + +RawWrite - A test of raw write functions for contiguous files. + +readCSV - Read a comma-separated value file using iostream extractors. + +ReadWriteSdFat - SdFat version of Arduino SD ReadWrite example. + +rename - A demo of SdFat::rename(old, new) and SdFile::rename(dirFile, newPath). + +SdFormatter - This sketch will format an SD or SDHC card. + +SdInfo - Initialize an SD card and analyze its structure for trouble shooting. + +StdioBench - Demo and test of stdio style stream. + +StreamParseInt - Simple demo of parseInt() Stream member function. + +StressTest - Create and write files until the SD is full. + +Timestamp - Sets file create, modify, and access timestamps. + +TwoCards - Example using two SD cards. + */ diff --git a/libs/SdFatBeta20120108/SdFat/SdFile.cpp b/libs/SdFat-master/SdFat/SdFile.cpp similarity index 83% rename from libs/SdFatBeta20120108/SdFat/SdFile.cpp rename to libs/SdFat-master/SdFat/SdFile.cpp index 2a9dd58..3ad7b65 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFile.cpp +++ b/libs/SdFat-master/SdFat/SdFile.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -43,41 +43,31 @@ SdFile::SdFile(const char* path, uint8_t oflag) : SdBaseFile(path, oflag) { * for a read-only file, device is full, a corrupt file system or an I/O error. * */ -int16_t SdFile::write(const void* buf, uint16_t nbyte) { +int SdFile::write(const void* buf, size_t nbyte) { return SdBaseFile::write(buf, nbyte); } //------------------------------------------------------------------------------ /** Write a byte to a file. Required by the Arduino Print class. * \param[in] b the byte to be written. - * Use writeError to check for errors. + * Use getWriteError to check for errors. + * \return 1 for success and 0 for failure. */ -#if ARDUINO < 100 -void SdFile::write(uint8_t b) { - SdBaseFile::write(&b, 1); -} -#else // ARDUINO < 100 size_t SdFile::write(uint8_t b) { return SdBaseFile::write(&b, 1) == 1 ? 1 : 0; } -#endif // ARDUINO < 100 //------------------------------------------------------------------------------ /** Write a string to a file. Used by the Arduino Print class. * \param[in] str Pointer to the string. - * Use writeError to check for errors. + * Use getWriteError to check for errors. + * \return count of characters written for success or -1 for failure. */ -#if ARDUINO < 100 -void SdFile::write(const char* str) { - SdBaseFile::write(str, strlen(str)); -} -#else // ARDUINO < 100 -int16_t SdFile::write(const char* str) { +int SdFile::write(const char* str) { return SdBaseFile::write(str, strlen(str)); } -#endif // ARDUINO < 100 //------------------------------------------------------------------------------ /** Write a PROGMEM string to a file. * \param[in] str Pointer to the PROGMEM string. - * Use writeError to check for errors. + * Use getWriteError to check for errors. */ void SdFile::write_P(PGM_P str) { for (uint8_t c; (c = pgm_read_byte(str)); str++) write(c); @@ -85,7 +75,7 @@ void SdFile::write_P(PGM_P str) { //------------------------------------------------------------------------------ /** Write a PROGMEM string followed by CR/LF to a file. * \param[in] str Pointer to the PROGMEM string. - * Use writeError to check for errors. + * Use getWriteError to check for errors. */ void SdFile::writeln_P(PGM_P str) { write_P(str); diff --git a/libs/SdFat-master/SdFat/SdFile.h b/libs/SdFat-master/SdFat/SdFile.h new file mode 100755 index 0000000..8a2dd04 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdFile.h @@ -0,0 +1,257 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +/** + * \file + * \brief SdFile class + */ +#ifndef SdFile_h +#define SdFile_h +#include +#include +//------------------------------------------------------------------------------ +/** + * \class SdFile + * \brief SdBaseFile with Arduino Stream. + */ +#if SD_FILE_USES_STREAM +class SdFile : public SdBaseFile, public Stream { +#else // SD_FILE_USES_STREAM +class SdFile : public SdBaseFile, public Print { +#endif // SD_FILE_USES_STREAM + public: + SdFile() {} + SdFile(const char* name, uint8_t oflag); +#if DESTRUCTOR_CLOSES_FILE + ~SdFile() {} +#endif // DESTRUCTOR_CLOSES_FILE + /** \return number of bytes available from the current position to EOF + * or INT_MAX if more than INT_MAX bytes are available. + */ + int available() { + uint32_t n = SdBaseFile::available(); + return n > INT_MAX ? INT_MAX : n; + } + /** Ensure that any bytes written to the file are saved to the SD card. */ + void flush() {SdBaseFile::sync();} + /** Return the next available byte without consuming it. + * + * \return The byte if no error and not at eof else -1; + */ + int peek() {return SdBaseFile::peek();} + /** Read the next byte from a file. + * + * \return For success return the next byte in the file as an int. + * If an error occurs or end of file is reached return -1. + */ + int read() {return SdBaseFile::read();} + /** Read data from a file starting at the current position. + * + * \param[out] buf Pointer to the location that will receive the data. + * + * \param[in] nbyte Maximum number of bytes to read. + * + * \return For success read() returns the number of bytes read. + * A value less than \a nbyte, including zero, will be returned + * if end of file is reached. + * If an error occurs, read() returns -1. Possible errors include + * read() called before a file has been opened, corrupt file system + * or an I/O error occurred. + */ + int read(void* buf, size_t nbyte) {return SdBaseFile::read(buf, nbyte);} + /** \return value of writeError */ + bool getWriteError() {return SdBaseFile::getWriteError();} + /** Set writeError to zero */ + void clearWriteError() {SdBaseFile::clearWriteError();} + size_t write(uint8_t b); + + int write(const char* str); + /** Write data to an open file. + * + * \note Data is moved to the cache but may not be written to the + * storage device until sync() is called. + * + * \param[in] buf Pointer to the location of the data to be written. + * + * \param[in] nbyte Number of bytes to write. + * + * \return For success write() returns the number of bytes written, always + * \a nbyte. If an error occurs, write() returns -1. Possible errors + * include write() is called before a file has been opened, write is called + * for a read-only file, device is full, a corrupt file system or an + * I/O error. + */ + int write(const void* buf, size_t nbyte); + /** Write data to an open file. Form required by Print. + * + * \note Data is moved to the cache but may not be written to the + * storage device until sync() is called. + * + * \param[in] buf Pointer to the location of the data to be written. + * + * \param[in] size Number of bytes to write. + * + * \return For success write() returns the number of bytes written, always + * \a nbyte. If an error occurs, write() returns -1. Possible errors + * include write() is called before a file has been opened, write is called + * for a read-only file, device is full, a corrupt file system or an + * I/O error. + */ + size_t write(const uint8_t *buf, size_t size) { + return SdBaseFile::write(buf, size);} + void write_P(PGM_P str); + void writeln_P(PGM_P str); +}; +//------------------------------------------------------------------------------ +/** Arduino SD.h style flag for open for read. */ +#define FILE_READ O_READ +/** Arduino SD.h style flag for open at EOF for read/write with create. */ +#define FILE_WRITE (O_RDWR | O_CREAT | O_AT_END) +/** + * \class File + * \brief Arduino SD.h style File API + */ +class File : public SdBaseFile, public Stream { + public: + /** The parenthesis operator. + * + * \return true if a file is open. + */ + operator bool() {return isOpen();} + /** \return number of bytes available from the current position to EOF + * or INT_MAX if more than INT_MAX bytes are available. + */ + int available() { + uint32_t n = SdBaseFile::available(); + return n > INT_MAX ? INT_MAX : n; + } + /** Set writeError to zero */ + void clearWriteError() {SdBaseFile::clearWriteError();} + /** Ensure that any bytes written to the file are saved to the SD card. */ + void flush() {sync();} + /** \return value of writeError */ + bool getWriteError() {return SdBaseFile::getWriteError();} + /** This function reports if the current file is a directory or not. + * \return true if the file is a directory. + */ + bool isDirectory() {return isDir();} + /** \return a pointer to the file's name. */ + char* name() { + m_name[0] = 0; + getFilename(m_name); + return m_name; + } + /** Return the next available byte without consuming it. + * + * \return The byte if no error and not at eof else -1; + */ + int peek() {return SdBaseFile::peek();} + /** \return the current file position. */ + uint32_t position() {return curPosition();} + /** Opens the next file or folder in a directory. + * + * \param[in] mode open mode flags. + * \return a File object. + */ + File openNextFile(uint8_t mode = O_READ) { + File tmpFile; + tmpFile.openNext(this, mode); + return tmpFile; + } + /** Read the next byte from a file. + * + * \return For success return the next byte in the file as an int. + * If an error occurs or end of file is reached return -1. + */ + int read() {return SdBaseFile::read();} + /** Read data from a file starting at the current position. + * + * \param[out] buf Pointer to the location that will receive the data. + * + * \param[in] nbyte Maximum number of bytes to read. + * + * \return For success read() returns the number of bytes read. + * A value less than \a nbyte, including zero, will be returned + * if end of file is reached. + * If an error occurs, read() returns -1. Possible errors include + * read() called before a file has been opened, corrupt file system + * or an I/O error occurred. + */ + int read(void* buf, size_t nbyte) {return SdBaseFile::read(buf, nbyte);} + /** Rewind a file if it is a directory */ + void rewindDirectory() { + if (isDir()) rewind(); + } + /** + * Seek to a new position in the file, which must be between + * 0 and the size of the file (inclusive). + * + * \param[in] pos the new file position. + * \return true for success else false. + */ + bool seek(uint32_t pos) {return seekSet(pos);} + /** \return the file's size. */ + uint32_t size() {return fileSize();} + /** Write a byte to a file. Required by the Arduino Print class. + * \param[in] b the byte to be written. + * Use getWriteError to check for errors. + * \return 1 for success and 0 for failure. + */ + size_t write(uint8_t b) { + return SdBaseFile::write(&b, 1) == 1 ? 1 : 0; + } + /** Write data to an open file. + * + * \note Data is moved to the cache but may not be written to the + * storage device until sync() is called. + * + * \param[in] buf Pointer to the location of the data to be written. + * + * \param[in] nbyte Number of bytes to write. + * + * \return For success write() returns the number of bytes written, always + * \a nbyte. If an error occurs, write() returns -1. Possible errors + * include write() is called before a file has been opened, write is called + * for a read-only file, device is full, a corrupt file system or an + * I/O error. + */ + int write(const void* buf, size_t nbyte); + /** Write data to an open file. Form required by Print. + * + * \note Data is moved to the cache but may not be written to the + * storage device until sync() is called. + * + * \param[in] buf Pointer to the location of the data to be written. + * + * \param[in] size Number of bytes to write. + * + * \return For success write() returns the number of bytes written, always + * \a nbyte. If an error occurs, write() returns -1. Possible errors + * include write() is called before a file has been opened, write is called + * for a read-only file, device is full, a corrupt file system or an + * I/O error. + */ + size_t write(const uint8_t *buf, size_t size) { + return SdBaseFile::write(buf, size); + } + + private: + char m_name[13]; +}; +#endif // SdFile_h diff --git a/libs/SdFatBeta20120108/SdFat/SdInfo.h b/libs/SdFat-master/SdFat/SdInfo.h similarity index 88% rename from libs/SdFatBeta20120108/SdFat/SdInfo.h rename to libs/SdFat-master/SdFat/SdInfo.h index 9d8a882..7c518da 100755 --- a/libs/SdFatBeta20120108/SdFat/SdInfo.h +++ b/libs/SdFat-master/SdFat/SdInfo.h @@ -1,5 +1,5 @@ /* Arduino Sd2Card Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino Sd2Card Library * @@ -31,6 +31,32 @@ // // http://www.sdcard.org/developers/tech/sdcard/pls/simplified_specs //------------------------------------------------------------------------------ +// SPI divisor constants +/** Set SCK to max rate of F_CPU/2. */ +uint8_t const SPI_FULL_SPEED = 2; +/** Set SCK rate to F_CPU/3 for Due */ +uint8_t const SPI_DIV3_SPEED = 3; +/** Set SCK rate to F_CPU/4. */ +uint8_t const SPI_HALF_SPEED = 4; +/** Set SCK rate to F_CPU/6 for Due */ +uint8_t const SPI_DIV6_SPEED = 6; +/** Set SCK rate to F_CPU/8. */ +uint8_t const SPI_QUARTER_SPEED = 8; +/** Set SCK rate to F_CPU/16. */ +uint8_t const SPI_EIGHTH_SPEED = 16; +/** Set SCK rate to F_CPU/32. */ +uint8_t const SPI_SIXTEENTH_SPEED = 32; +//------------------------------------------------------------------------------ +// SD operation timeouts +/** init timeout ms */ +uint16_t const SD_INIT_TIMEOUT = 2000; +/** erase timeout ms */ +uint16_t const SD_ERASE_TIMEOUT = 10000; +/** read timeout ms */ +uint16_t const SD_READ_TIMEOUT = 300; +/** write time out ms */ +uint16_t const SD_WRITE_TIMEOUT = 600; +//------------------------------------------------------------------------------ // SD card commands /** GO_IDLE_STATE - init card in spi mode if CS low */ uint8_t const CMD0 = 0X00; @@ -63,6 +89,8 @@ uint8_t const CMD38 = 0X26; uint8_t const CMD55 = 0X37; /** READ_OCR - read the OCR register of a card */ uint8_t const CMD58 = 0X3A; +/** CRC_ON_OFF - enable or disable CRC checking */ +uint8_t const CMD59 = 0X3B; /** SET_WR_BLK_ERASE_COUNT - Set the number of write blocks to be pre-erased before writing */ uint8_t const ACMD23 = 0X17; @@ -121,7 +149,7 @@ typedef struct CID { unsigned char always1 : 1; /** CRC7 checksum */ unsigned char crc : 7; -}cid_t; +}__attribute__((packed)) cid_t; //------------------------------------------------------------------------------ /** CSD for version 1.00 cards */ typedef struct CSDV1 { @@ -183,7 +211,7 @@ typedef struct CSDV1 { // byte 15 unsigned char always1 : 1; unsigned char crc : 7; -}csd1_t; +}__attribute__((packed)) csd1_t; //------------------------------------------------------------------------------ /** CSD for version 2.00 cards */ typedef struct CSDV2 { @@ -215,10 +243,10 @@ typedef struct CSDV2 { /** fixed to 0 - no partial read */ unsigned char read_bl_partial : 1; // byte 7 - /** not used */ - unsigned char reserved3 : 2; /** high part of card size */ unsigned char c_size_high : 6; + /** not used */ + unsigned char reserved3 : 2; // byte 8 /** middle part of card size */ unsigned char c_size_mid; @@ -265,7 +293,7 @@ typedef struct CSDV2 { unsigned char always1 : 1; /** checksum */ unsigned char crc : 7; -}csd2_t; +}__attribute__((packed)) csd2_t; //------------------------------------------------------------------------------ /** union of old and new style CSD register */ union csd_t { diff --git a/libs/SdFat-master/SdFat/SdSpi.h b/libs/SdFat-master/SdFat/SdSpi.h new file mode 100755 index 0000000..61c4f95 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpi.h @@ -0,0 +1,173 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ + /** + * \file + * \brief SdSpi class for V2 SD/SDHC cards + */ +#ifndef SdSpi_h +#define SdSpi_h +#include +#include + +#if !USE_ARDUINO_SPI_LIBRARY +// AVR Arduinos +#ifdef __AVR__ +#if AVR_SOFT_SPI +#define USE_SOFTWARE_SPI 1 +#elif LEONARDO_SOFT_SPI && defined(__AVR_ATmega32U4__) && !defined(CORE_TEENSY) +#define USE_SOFTWARE_SPI 1 +#elif MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)\ + ||defined(__AVR_ATmega2560__)) +#define USE_SOFTWARE_SPI 1 +#else // USE_SOFTWARE_SPI +#define USE_NATIVE_AVR_SPI 1 +#endif // USE_SOFTWARE_SPI +#endif // __AVR__ +// Due +#if defined(__arm__) && !defined(CORE_TEENSY) +#if DUE_SOFT_SPI +#define USE_SOFTWARE_SPI 1 +#else // DUE_SOFT_SPI +/** Nonzero - use native SAM3X SPI */ +#define USE_NATIVE_SAM3X_SPI 1 +#endif // DUE_SOFT_SPI +#endif // defined(__arm__) && !defined(CORE_TEENSY) +// Teensy 3.0 +#if defined(__arm__) && defined(CORE_TEENSY) +#if TEENSY3_SOFT_SPI +#define USE_SOFTWARE_SPI 1 +#else // TEENSY3_SOFT_SPI +/** Nonzero - use native MK20DX128 SPI */ +#define USE_NATIVE_TEENSY3_SPI 1 +#endif // TEENSY3_SOFT_SPI +#endif // defined(__arm__) && defined(CORE_TEENSY) +#endif // !USE_ARDUINO_SPI_LIBRARY + +#ifndef USE_SOFTWARE_SPI +#define USE_SOFTWARE_SPI 0 +#endif // USE_SOFTWARE_SPI + +#ifndef USE_NATIVE_AVR_SPI +#define USE_NATIVE_AVR_SPI 0 +#endif + +#ifndef USE_NATIVE_SAM3X_SPI +#define USE_NATIVE_SAM3X_SPI 0 +#endif // USE_NATIVE_SAM3X_SPI + +#ifndef USE_NATIVE_TEENSY3_SPI +#define USE_NATIVE_TEENSY3_SPI 0 +#endif // USE_NATIVE_TEENSY3_SPI +//------------------------------------------------------------------------------ +// define default chip select pin +// +#if !USE_SOFTWARE_SPI +/** The default chip select pin for the SD card is SS. */ +uint8_t const SD_CHIP_SELECT_PIN = SS; +#else // USE_AVR_SOFTWARE_SPI +/** SPI chip select pin for software SPI. */ +uint8_t const SD_CHIP_SELECT_PIN = SOFT_SPI_CS_PIN; +#endif // USE_AVR_SOFTWARE_SPI + +//------------------------------------------------------------------------------ +/** + * \class SdSpi + * \brief SPI class for access to SD and SDHC flash memory cards. + */ +class SdSpi { + public: + /** Initialize the SPI bus */ + void begin(); + /** Set SPI options for access to SD/SDHC cards. + * + * \param[in] spiDivisor SCK clock divider relative to the system clock. + */ + void init(uint8_t spiDivisor); + /** Receive a byte. + * + * \return The byte. + */ + uint8_t receive(); + /** Receive multiple bytes. + * + * \param[out] buf Buffer to receive the data. + * \param[in] n Number of bytes to receive. + * + * \return Zero for no error or nonzero error code. + */ + uint8_t receive(uint8_t* buf, size_t n); + /** Send a byte. + * + * \param[in] data Byte to send + */ + void send(uint8_t data); + /** Send multiple bytes. + * + * \param[in] buf Buffer for data to be sent. + * \param[in] n Number of bytes to send. + */ + void send(const uint8_t* buf, size_t n); +}; +//------------------------------------------------------------------------------ +// Use of inline for AVR results in up to 10% better write performance. +// Inline also save a little flash memory. +/** inline avr native functions if nonzero. */ +#define USE_AVR_NATIVE_SPI_INLINE 1 +#if USE_NATIVE_AVR_SPI && USE_AVR_NATIVE_SPI_INLINE +inline uint8_t SdSpi::receive() { + SPDR = 0XFF; + while (!(SPSR & (1 << SPIF))) {} + return SPDR; +} +inline uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + if (n-- == 0) return 0; + SPDR = 0XFF; + for (size_t i = 0; i < n; i++) { + while (!(SPSR & (1 << SPIF))) {} + uint8_t b = SPDR; + SPDR = 0XFF; + buf[i] = b; + } + while (!(SPSR & (1 << SPIF))) {} + buf[n] = SPDR; + return 0; +} +inline void SdSpi::send(uint8_t data) { + SPDR = data; + while (!(SPSR & (1 << SPIF))) {} +} +inline void SdSpi::send(const uint8_t* buf , size_t n) { + if (n == 0) return; + SPDR = buf[0]; + if (n > 1) { + uint8_t b = buf[1]; + size_t i = 2; + while (1) { + while (!(SPSR & (1 << SPIF))) {} + SPDR = b; + if (i == n) break; + b = buf[i++]; + } + } + while (!(SPSR & (1 << SPIF))) {} +} +#endif // USE_NATIVE_AVR_SPI && USE_AVR_NATIVE_SPI_INLINE +#endif // SdSpi_h + diff --git a/libs/SdFat-master/SdFat/SdSpiAVR.cpp b/libs/SdFat-master/SdFat/SdSpiAVR.cpp new file mode 100755 index 0000000..d6b82ff --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpiAVR.cpp @@ -0,0 +1,86 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ +#include +#if USE_NATIVE_AVR_SPI +//------------------------------------------------------------------------------ +void SdSpi::begin() { + // set SS high - may be chip select for another SPI device + digitalWrite(SS, HIGH); + + // SS must be in output mode even it is not chip select + pinMode(SS, OUTPUT); + pinMode(MISO, INPUT); + pinMode(MOSI, OUTPUT); + pinMode(SCK, OUTPUT); +} +//------------------------------------------------------------------------------ +void SdSpi::init(uint8_t sckDivisor) { + uint8_t r = 0; + + for (uint8_t b = 2; sckDivisor > b && r < 6; b <<= 1, r++) {} + // See avr processor documentation + SPCR = (1 << SPE) | (1 << MSTR) | (r >> 1); + SPSR = r & 1 || r == 6 ? 0 : 1 << SPI2X; +} +#if !USE_AVR_NATIVE_SPI_INLINE +//------------------------------------------------------------------------------ +uint8_t SdSpi::receive() { + SPDR = 0XFF; + while (!(SPSR & (1 << SPIF))) {} + return SPDR; +} +//------------------------------------------------------------------------------ +uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + if (n-- == 0) return 0; + SPDR = 0XFF; + for (size_t i = 0; i < n; i++) { + while (!(SPSR & (1 << SPIF))) {} + uint8_t b = SPDR; + SPDR = 0XFF; + buf[i] = b; + } + while (!(SPSR & (1 << SPIF))) {} + buf[n] = SPDR; + return 0; +} +//------------------------------------------------------------------------------ +void SdSpi::send(uint8_t data) { + SPDR = data; + while (!(SPSR & (1 << SPIF))) {} +} +//------------------------------------------------------------------------------ +void SdSpi::send(const uint8_t* buf , size_t n) { + if (n == 0) return; + SPDR = buf[0]; + if (n > 1) { + uint8_t b = buf[1]; + size_t i = 2; + while (1) { + while (!(SPSR & (1 << SPIF))) {} + SPDR = b; + if (i == n) break; + b = buf[i++]; + } + } + while (!(SPSR & (1 << SPIF))) {} +} +#endif // !USE_AVR_NATIVE_SPI_INLINE +#endif // USE_NATIVE_AVR_SPI + diff --git a/libs/SdFat-master/SdFat/SdSpiArduino.cpp b/libs/SdFat-master/SdFat/SdSpiArduino.cpp new file mode 100755 index 0000000..be5e3d8 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpiArduino.cpp @@ -0,0 +1,70 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ +#include +#if USE_ARDUINO_SPI_LIBRARY +#include +//------------------------------------------------------------------------------ +void SdSpi::begin() { + SPI.begin(); +} +//------------------------------------------------------------------------------ +void SdSpi::init(uint8_t sckDivisor) { + SPI.setBitOrder(MSBFIRST); + SPI.setDataMode(SPI_MODE0); +#ifndef SPI_CLOCK_DIV128 + SPI.setClockDivider(sckDivisor); +#else // SPI_CLOCK_DIV128 + int v; + if (sckDivisor <= 2) v = SPI_CLOCK_DIV2; + else if (sckDivisor <= 4) v = SPI_CLOCK_DIV4; + else if (sckDivisor <= 8) v = SPI_CLOCK_DIV8; + else if (sckDivisor <= 16) v = SPI_CLOCK_DIV16; + else if (sckDivisor <= 32) v = SPI_CLOCK_DIV32; + else if (sckDivisor <= 64) v = SPI_CLOCK_DIV64; + else v = SPI_CLOCK_DIV128; + SPI.setClockDivider(v); +#endif // SPI_CLOCK_DIV128 +} +//------------------------------------------------------------------------------ +/** SPI receive a byte */ +uint8_t SdSpi::receive() { + return SPI.transfer(0XFF); +} +//------------------------------------------------------------------------------ +/** SPI receive multiple bytes */ +uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + for (size_t i = 0; i < n; i++) { + buf[i] = SPI.transfer(0XFF); + } + return 0; +} +//------------------------------------------------------------------------------ +/** SPI send a byte */ +void SdSpi::send(uint8_t b) { + SPI.transfer(b); +} +//------------------------------------------------------------------------------ +/** SPI send multiple bytes */ +void SdSpi::send(const uint8_t* buf , size_t n) { + for (size_t i = 0; i < n; i++) { + SPI.transfer(buf[i]); + } +} +#endif // USE_ARDUINO_SPI_LIBRARY diff --git a/libs/SdFat-master/SdFat/SdSpiSAM3X.cpp b/libs/SdFat-master/SdFat/SdSpiSAM3X.cpp new file mode 100755 index 0000000..d8f38c4 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpiSAM3X.cpp @@ -0,0 +1,216 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ +#include +#if USE_NATIVE_SAM3X_SPI +/** Use SAM3X DMAC if nonzero */ +#define USE_SAM3X_DMAC 1 +/** Use extra Bus Matrix arbitration fix if nonzero */ +#define USE_SAM3X_BUS_MATRIX_FIX 0 +/** Time in ms for DMA receive timeout */ +#define SAM3X_DMA_TIMEOUT 100 +/** chip select register number */ +#define SPI_CHIP_SEL 3 +/** DMAC receive channel */ +#define SPI_DMAC_RX_CH 1 +/** DMAC transmit channel */ +#define SPI_DMAC_TX_CH 0 +/** DMAC Channel HW Interface Number for SPI TX. */ +#define SPI_TX_IDX 1 +/** DMAC Channel HW Interface Number for SPI RX. */ +#define SPI_RX_IDX 2 +//------------------------------------------------------------------------------ +/** Disable DMA Controller. */ +static void dmac_disable() { + DMAC->DMAC_EN &= (~DMAC_EN_ENABLE); +} +/** Enable DMA Controller. */ +static void dmac_enable() { + DMAC->DMAC_EN = DMAC_EN_ENABLE; +} +/** Disable DMA Channel. */ +static void dmac_channel_disable(uint32_t ul_num) { + DMAC->DMAC_CHDR = DMAC_CHDR_DIS0 << ul_num; +} +/** Enable DMA Channel. */ +static void dmac_channel_enable(uint32_t ul_num) { + DMAC->DMAC_CHER = DMAC_CHER_ENA0 << ul_num; +} +/** Poll for transfer complete. */ +static bool dmac_channel_transfer_done(uint32_t ul_num) { + return (DMAC->DMAC_CHSR & (DMAC_CHSR_ENA0 << ul_num)) ? false : true; +} +//------------------------------------------------------------------------------ +void SdSpi::begin() { + PIO_Configure( + g_APinDescription[PIN_SPI_MOSI].pPort, + g_APinDescription[PIN_SPI_MOSI].ulPinType, + g_APinDescription[PIN_SPI_MOSI].ulPin, + g_APinDescription[PIN_SPI_MOSI].ulPinConfiguration); + PIO_Configure( + g_APinDescription[PIN_SPI_MISO].pPort, + g_APinDescription[PIN_SPI_MISO].ulPinType, + g_APinDescription[PIN_SPI_MISO].ulPin, + g_APinDescription[PIN_SPI_MISO].ulPinConfiguration); + PIO_Configure( + g_APinDescription[PIN_SPI_SCK].pPort, + g_APinDescription[PIN_SPI_SCK].ulPinType, + g_APinDescription[PIN_SPI_SCK].ulPin, + g_APinDescription[PIN_SPI_SCK].ulPinConfiguration); + pmc_enable_periph_clk(ID_SPI0); +#if USE_SAM3X_DMAC + pmc_enable_periph_clk(ID_DMAC); + dmac_disable(); + DMAC->DMAC_GCFG = DMAC_GCFG_ARB_CFG_FIXED; + dmac_enable(); +#if USE_SAM3X_BUS_MATRIX_FIX + MATRIX->MATRIX_WPMR = 0x4d415400; + MATRIX->MATRIX_MCFG[1] = 1; + MATRIX->MATRIX_MCFG[2] = 1; + MATRIX->MATRIX_SCFG[0] = 0x01000010; + MATRIX->MATRIX_SCFG[1] = 0x01000010; + MATRIX->MATRIX_SCFG[7] = 0x01000010; +#endif // USE_SAM3X_BUS_MATRIX_FIX +#endif // USE_SAM3X_DMAC +} +//------------------------------------------------------------------------------ +// start RX DMA +static void spiDmaRX(uint8_t* dst, uint16_t count) { + dmac_channel_disable(SPI_DMAC_RX_CH); + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_SADDR = (uint32_t)&SPI0->SPI_RDR; + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_DADDR = (uint32_t)dst; + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_DSCR = 0; + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_CTRLA = count | + DMAC_CTRLA_SRC_WIDTH_BYTE | DMAC_CTRLA_DST_WIDTH_BYTE; + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_CTRLB = DMAC_CTRLB_SRC_DSCR | + DMAC_CTRLB_DST_DSCR | DMAC_CTRLB_FC_PER2MEM_DMA_FC | + DMAC_CTRLB_SRC_INCR_FIXED | DMAC_CTRLB_DST_INCR_INCREMENTING; + DMAC->DMAC_CH_NUM[SPI_DMAC_RX_CH].DMAC_CFG = DMAC_CFG_SRC_PER(SPI_RX_IDX) | + DMAC_CFG_SRC_H2SEL | DMAC_CFG_SOD | DMAC_CFG_FIFOCFG_ASAP_CFG; + dmac_channel_enable(SPI_DMAC_RX_CH); +} +//------------------------------------------------------------------------------ +// start TX DMA +static void spiDmaTX(const uint8_t* src, uint16_t count) { + static uint8_t ff = 0XFF; + uint32_t src_incr = DMAC_CTRLB_SRC_INCR_INCREMENTING; + if (!src) { + src = &ff; + src_incr = DMAC_CTRLB_SRC_INCR_FIXED; + } + dmac_channel_disable(SPI_DMAC_TX_CH); + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_SADDR = (uint32_t)src; + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_DADDR = (uint32_t)&SPI0->SPI_TDR; + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_DSCR = 0; + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_CTRLA = count | + DMAC_CTRLA_SRC_WIDTH_BYTE | DMAC_CTRLA_DST_WIDTH_BYTE; + + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_CTRLB = DMAC_CTRLB_SRC_DSCR | + DMAC_CTRLB_DST_DSCR | DMAC_CTRLB_FC_MEM2PER_DMA_FC | + src_incr | DMAC_CTRLB_DST_INCR_FIXED; + + DMAC->DMAC_CH_NUM[SPI_DMAC_TX_CH].DMAC_CFG = DMAC_CFG_DST_PER(SPI_TX_IDX) | + DMAC_CFG_DST_H2SEL | DMAC_CFG_SOD | DMAC_CFG_FIFOCFG_ALAP_CFG; + + dmac_channel_enable(SPI_DMAC_TX_CH); +} +//------------------------------------------------------------------------------ +// initialize SPI controller +void SdSpi::init(uint8_t sckDivisor) { + uint8_t scbr = sckDivisor; + Spi* pSpi = SPI0; + // disable SPI + pSpi->SPI_CR = SPI_CR_SPIDIS; + // reset SPI + pSpi->SPI_CR = SPI_CR_SWRST; + // no mode fault detection, set master mode + pSpi->SPI_MR = SPI_PCS(SPI_CHIP_SEL) | SPI_MR_MODFDIS | SPI_MR_MSTR; + // mode 0, 8-bit, + pSpi->SPI_CSR[SPI_CHIP_SEL] = SPI_CSR_SCBR(scbr) | SPI_CSR_NCPHA; + // enable SPI + pSpi->SPI_CR |= SPI_CR_SPIEN; +} +//------------------------------------------------------------------------------ +static inline uint8_t spiTransfer(uint8_t b) { + Spi* pSpi = SPI0; + + pSpi->SPI_TDR = b; + while ((pSpi->SPI_SR & SPI_SR_RDRF) == 0) {} + b = pSpi->SPI_RDR; + return b; +} +//------------------------------------------------------------------------------ +/** SPI receive a byte */ +uint8_t SdSpi::receive() { + return spiTransfer(0XFF); +} +//------------------------------------------------------------------------------ +/** SPI receive multiple bytes */ +uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + Spi* pSpi = SPI0; + int rtn = 0; +#if USE_SAM3X_DMAC + // clear overrun error + uint32_t s = pSpi->SPI_SR; + + spiDmaRX(buf, n); + spiDmaTX(0, n); + + uint32_t m = millis(); + while (!dmac_channel_transfer_done(SPI_DMAC_RX_CH)) { + if ((millis() - m) > SAM3X_DMA_TIMEOUT) { + dmac_channel_disable(SPI_DMAC_RX_CH); + dmac_channel_disable(SPI_DMAC_TX_CH); + rtn = 2; + break; + } + } + if (pSpi->SPI_SR & SPI_SR_OVRES) rtn |= 1; +#else // USE_SAM3X_DMAC + for (size_t i = 0; i < n; i++) { + pSpi->SPI_TDR = 0XFF; + while ((pSpi->SPI_SR & SPI_SR_RDRF) == 0) {} + buf[i] = pSpi->SPI_RDR; + } +#endif // USE_SAM3X_DMAC + return rtn; +} +//------------------------------------------------------------------------------ +/** SPI send a byte */ +void SdSpi::send(uint8_t b) { + spiTransfer(b); +} +//------------------------------------------------------------------------------ +void SdSpi::send(const uint8_t* buf , size_t n) { + Spi* pSpi = SPI0; +#if USE_SAM3X_DMAC + spiDmaTX(buf, n); + while (!dmac_channel_transfer_done(SPI_DMAC_TX_CH)) {} +#else // #if USE_SAM3X_DMAC + while ((pSpi->SPI_SR & SPI_SR_TXEMPTY) == 0) {} + for (size_t i = 0; i < n; i++) { + pSpi->SPI_TDR = buf[i]; + while ((pSpi->SPI_SR & SPI_SR_TDRE) == 0) {} + } +#endif // #if USE_SAM3X_DMAC + while ((pSpi->SPI_SR & SPI_SR_TXEMPTY) == 0) {} + // leave RDR empty + uint8_t b = pSpi->SPI_RDR; +} +#endif // USE_NATIVE_SAM3X_SPI diff --git a/libs/SdFat-master/SdFat/SdSpiSoft.cpp b/libs/SdFat-master/SdFat/SdSpiSoft.cpp new file mode 100755 index 0000000..9d1e578 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpiSoft.cpp @@ -0,0 +1,61 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ +#include +#if USE_SOFTWARE_SPI +#include +static +SoftSPI softSpiBus; +//------------------------------------------------------------------------------ +/** + * initialize SPI pins + */ +void SdSpi::begin() { + softSpiBus.begin(); +} +//------------------------------------------------------------------------------ +/** + * Initialize hardware SPI - dummy for soft SPI + */ +void SdSpi::init(uint8_t sckDivisor) {} +//------------------------------------------------------------------------------ +/** Soft SPI receive byte */ +uint8_t SdSpi::receive() { + return softSpiBus.receive(); +} +//------------------------------------------------------------------------------ +/** Soft SPI read data */ +uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + for (size_t i = 0; i < n; i++) { + buf[i] = receive(); + } + return 0; +} +//------------------------------------------------------------------------------ +/** Soft SPI send byte */ +void SdSpi::send(uint8_t data) { + softSpiBus.send(data); +} +//------------------------------------------------------------------------------ +void SdSpi::send(const uint8_t* buf , size_t n) { + for (size_t i = 0; i < n; i++) { + send(buf[i]); + } +} +#endif // USE_SOFTWARE_SPI \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/SdSpiTeensy3.cpp b/libs/SdFat-master/SdFat/SdSpiTeensy3.cpp new file mode 100755 index 0000000..9c938ea --- /dev/null +++ b/libs/SdFat-master/SdFat/SdSpiTeensy3.cpp @@ -0,0 +1,223 @@ +/* Arduino SdSpi Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino SdSpi Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdSpi Library. If not, see + * . + */ +#include +#if USE_NATIVE_TEENSY3_SPI +// Teensy 3.0 functions +#include +// use 16-bit frame if SPI_USE_8BIT_FRAME is zero +#define SPI_USE_8BIT_FRAME 0 +// Limit initial fifo to three entries to avoid fifo overrun +#define SPI_INITIAL_FIFO_DEPTH 3 +// define some symbols that are not in mk20dx128.h +#ifndef SPI_SR_RXCTR +#define SPI_SR_RXCTR 0XF0 +#endif // SPI_SR_RXCTR +#ifndef SPI_PUSHR_CONT +#define SPI_PUSHR_CONT 0X80000000 +#endif // SPI_PUSHR_CONT +#ifndef SPI_PUSHR_CTAS +#define SPI_PUSHR_CTAS(n) (((n) & 7) << 28) +#endif // SPI_PUSHR_CTAS +//------------------------------------------------------------------------------ +/** + * initialize SPI pins + */ +void SdSpi::begin() { + SIM_SCGC6 |= SIM_SCGC6_SPI0; +} +//------------------------------------------------------------------------------ +/** + * Initialize hardware SPI + * + */ +void SdSpi::init(uint8_t sckDivisor) { + uint32_t ctar, ctar0, ctar1; + + if (sckDivisor <= 2) { + // 1/2 speed + ctar = SPI_CTAR_DBR | SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0); + } else if (sckDivisor <= 4) { + // 1/4 speed + ctar = SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0); + } else if (sckDivisor <= 8) { + // 1/8 speed + ctar = SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1); + } else if (sckDivisor <= 12) { + // 1/12 speed + ctar = SPI_CTAR_BR(2) | SPI_CTAR_CSSCK(2); + } else if (sckDivisor <= 16) { + // 1/16 speed + ctar = SPI_CTAR_BR(3) | SPI_CTAR_CSSCK(3); + } else if (sckDivisor <= 32) { + // 1/32 speed + ctar = SPI_CTAR_PBR(1) | SPI_CTAR_BR(4) | SPI_CTAR_CSSCK(4); + } else if (sckDivisor <= 64) { + // 1/64 speed + ctar = SPI_CTAR_PBR(1) | SPI_CTAR_BR(5) | SPI_CTAR_CSSCK(5); + } else { + // 1/128 speed + ctar = SPI_CTAR_PBR(1) | SPI_CTAR_BR(6) | SPI_CTAR_CSSCK(6); + } + // CTAR0 - 8 bit transfer + ctar0 = ctar | SPI_CTAR_FMSZ(7); + + // CTAR1 - 16 bit transfer + ctar1 = ctar | SPI_CTAR_FMSZ(15); + + if (SPI0_CTAR0 != ctar0 || SPI0_CTAR1 != ctar1) { + SPI0_MCR = SPI_MCR_MSTR | SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x1F); + SPI0_CTAR0 = ctar0; + SPI0_CTAR1 = ctar1; + } + SPI0_MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x1F); + CORE_PIN11_CONFIG = PORT_PCR_DSE | PORT_PCR_MUX(2); + CORE_PIN12_CONFIG = PORT_PCR_MUX(2); + CORE_PIN13_CONFIG = PORT_PCR_DSE | PORT_PCR_MUX(2); +} +//------------------------------------------------------------------------------ +/** SPI receive a byte */ +uint8_t SdSpi::receive() { + SPI0_MCR |= SPI_MCR_CLR_RXF; + SPI0_SR = SPI_SR_TCF; + SPI0_PUSHR = 0xFF; + while (!(SPI0_SR & SPI_SR_TCF)) {} + return SPI0_POPR; +} +//------------------------------------------------------------------------------ +/** SPI receive multiple bytes */ +uint8_t SdSpi::receive(uint8_t* buf, size_t n) { + // clear any data in RX FIFO + SPI0_MCR = SPI_MCR_MSTR | SPI_MCR_CLR_RXF | SPI_MCR_PCSIS(0x1F); +#if SPI_USE_8BIT_FRAME + // initial number of bytes to push into TX FIFO + int nf = n < SPI_INITIAL_FIFO_DEPTH ? n : SPI_INITIAL_FIFO_DEPTH; + for (int i = 0; i < nf; i++) { + SPI0_PUSHR = 0XFF; + } + // limit for pushing dummy data into TX FIFO + uint8_t* limit = buf + n - nf; + while (buf < limit) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_PUSHR = 0XFF; + *buf++ = SPI0_POPR; + } + // limit for rest of RX data + limit += nf; + while (buf < limit) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + *buf++ = SPI0_POPR; + } +#else // SPI_USE_8BIT_FRAME + // use 16 bit frame to avoid TD delay between frames + // get one byte if n is odd + if (n & 1) { + *buf++ = receive(); + n--; + } + // initial number of words to push into TX FIFO + int nf = n/2 < SPI_INITIAL_FIFO_DEPTH ? n/2 : SPI_INITIAL_FIFO_DEPTH; + for (int i = 0; i < nf; i++) { + SPI0_PUSHR = SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1) | 0XFFFF; + } + uint8_t* limit = buf + n - 2*nf; + while (buf < limit) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_PUSHR = SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1) | 0XFFFF; + uint16_t w = SPI0_POPR; + *buf++ = w >> 8; + *buf++ = w & 0XFF; + } + // limit for rest of RX data + limit += 2*nf; + while (buf < limit) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + uint16_t w = SPI0_POPR; + *buf++ = w >> 8; + *buf++ = w & 0XFF; + } +#endif // SPI_USE_8BIT_FRAME + return 0; +} +//------------------------------------------------------------------------------ +/** SPI send a byte */ +void SdSpi::send(uint8_t b) { + SPI0_MCR |= SPI_MCR_CLR_RXF; + SPI0_SR = SPI_SR_TCF; + SPI0_PUSHR = b; + while (!(SPI0_SR & SPI_SR_TCF)) {} +} +//------------------------------------------------------------------------------ +/** SPI send multiple bytes */ +void SdSpi::send(const uint8_t* buf , size_t n) { + // clear any data in RX FIFO + SPI0_MCR = SPI_MCR_MSTR | SPI_MCR_CLR_RXF | SPI_MCR_PCSIS(0x1F); +#if SPI_USE_8BIT_FRAME + // initial number of bytes to push into TX FIFO + int nf = n < SPI_INITIAL_FIFO_DEPTH ? n : SPI_INITIAL_FIFO_DEPTH; + // limit for pushing data into TX fifo + const uint8_t* limit = buf + n; + for (int i = 0; i < nf; i++) { + SPI0_PUSHR = *buf++; + } + // write data to TX FIFO + while (buf < limit) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_PUSHR = *buf++; + SPI0_POPR; + } + // wait for data to be sent + while (nf) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_POPR; + nf--; + } +#else // SPI_USE_8BIT_FRAME + // use 16 bit frame to avoid TD delay between frames + // send one byte if n is odd + if (n & 1) { + send(*buf++); + n--; + } + // initial number of words to push into TX FIFO + int nf = n/2 < SPI_INITIAL_FIFO_DEPTH ? n/2 : SPI_INITIAL_FIFO_DEPTH; + // limit for pushing data into TX fifo + const uint8_t* limit = buf + n; + for (int i = 0; i < nf; i++) { + uint16_t w = (*buf++) << 8; + w |= *buf++; + SPI0_PUSHR = SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1) | w; + } + // write data to TX FIFO + while (buf < limit) { + uint16_t w = *buf++ << 8; + w |= *buf++; + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_PUSHR = SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1) | w; + SPI0_POPR; + } + // wait for data to be sent + while (nf) { + while (!(SPI0_SR & SPI_SR_RXCTR)) {} + SPI0_POPR; + nf--; + } +#endif // SPI_USE_8BIT_FRAME +} +#endif // USE_NATIVE_TEENSY3_SPI diff --git a/libs/SdFatBeta20120108/SdFat/SdStream.cpp b/libs/SdFat-master/SdFat/SdStream.cpp similarity index 92% rename from libs/SdFatBeta20120108/SdFat/SdStream.cpp rename to libs/SdFat-master/SdFat/SdStream.cpp index 94edd17..b72ca44 100755 --- a/libs/SdFatBeta20120108/SdFat/SdStream.cpp +++ b/libs/SdFat-master/SdFat/SdStream.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -19,13 +19,7 @@ */ #include -// catch pure virtual errors -#if USE_CXA_PURE_VIRTUAL -extern "C" void __cxa_pure_virtual() { - SdFat::stdOut()->println("VIRTUAL"); - exit(1); -} -#endif // USE_CXA_PURE_VIRTUAL + //============================================================================== /// @cond SHOW_PROTECTED int16_t SdStreamBase::getch() { @@ -100,7 +94,7 @@ void SdStreamBase::putch(char c) { } //------------------------------------------------------------------------------ void SdStreamBase::putstr(const char* str) { - uint16_t n = 0; + size_t n = 0; while (1) { char c = str[n]; if (c == '\0' || (c == '\n' && !(getmode() & ios::binary))) { @@ -147,7 +141,7 @@ bool SdStreamBase::seekpos(pos_type pos) { return seekSet(pos); } //------------------------------------------------------------------------------ -int16_t SdStreamBase::write(const void* buf, uint16_t n) { +int SdStreamBase::write(const void* buf, size_t n) { return SdBaseFile::write(buf, n); } //------------------------------------------------------------------------------ diff --git a/libs/SdFatBeta20120108/SdFat/SdStream.h b/libs/SdFat-master/SdFat/SdStream.h similarity index 90% rename from libs/SdFatBeta20120108/SdFat/SdStream.h rename to libs/SdFat-master/SdFat/SdStream.h index 16e7409..191e537 100755 --- a/libs/SdFatBeta20120108/SdFat/SdStream.h +++ b/libs/SdFat-master/SdFat/SdStream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -31,8 +31,6 @@ * \brief Base class for SD streams */ class SdStreamBase : protected SdBaseFile, virtual public ios { - public: - protected: /// @cond SHOW_PROTECTED int16_t getch(); @@ -42,18 +40,18 @@ class SdStreamBase : protected SdBaseFile, virtual public ios { /** Internal do not use * \return mode */ - ios::openmode getmode() {return mode_;} + ios::openmode getmode() {return m_mode;} /** Internal do not use * \param[in] mode */ - void setmode(ios::openmode mode) {mode_ = mode;} + void setmode(ios::openmode mode) {m_mode = mode;} bool seekoff(off_type off, seekdir way); bool seekpos(pos_type pos); - int16_t write(const void* buf, uint16_t n); + int write(const void* buf, size_t n); void write(char c); /// @endcond private: - ios::openmode mode_; + ios::openmode m_mode; }; //============================================================================== /** @@ -72,7 +70,9 @@ class fstream : public iostream, SdStreamBase { explicit fstream(const char* path, openmode mode = in | out) { open(path, mode); } +#if DESTRUCTOR_CLOSES_FILE ~fstream() {} +#endif // DESTRUCTOR_CLOSES_FILE /** Clear state and writeError * \param[in] state new state for stream */ @@ -121,11 +121,15 @@ class fstream : public iostream, SdStreamBase { /** Internal - do not use * \param[out] pos */ - void getpos(fpos_t* pos) {SdBaseFile::getpos(pos);} + void getpos(FatPos_t* pos) {SdBaseFile::getpos(pos);} /** Internal - do not use * \param[in] c */ void putch(char c) {SdStreamBase::putch(c);} + /** Internal - do not use + * \param[in] str + */ + void putstr(const char *str) {SdStreamBase::putstr(str);} /** Internal - do not use * \param[in] pos */ @@ -133,7 +137,7 @@ class fstream : public iostream, SdStreamBase { return SdStreamBase::seekoff(off, way); } bool seekpos(pos_type pos) {return SdStreamBase::seekpos(pos);} - void setpos(fpos_t* pos) {SdBaseFile::setpos(pos);} + void setpos(FatPos_t* pos) {SdBaseFile::setpos(pos);} bool sync() {return SdStreamBase::sync();} pos_type tellpos() {return SdStreamBase::curPosition();} /// @endcond @@ -154,7 +158,9 @@ class ifstream : public istream, SdStreamBase { explicit ifstream(const char* path, openmode mode = in) { open(path, mode); } +#if DESTRUCTOR_CLOSES_FILE ~ifstream() {} +#endif // DESTRUCTOR_CLOSES_FILE /** Close a file and force cached data and directory information * to be written to the storage device. */ @@ -170,6 +176,7 @@ class ifstream : public istream, SdStreamBase { void open(const char* path, openmode mode = in) { SdStreamBase::open(path, mode | in); } + protected: /// @cond SHOW_PROTECTED /** Internal - do not use @@ -179,7 +186,7 @@ class ifstream : public istream, SdStreamBase { /** Internal - do not use * \param[out] pos */ - void getpos(fpos_t* pos) {SdBaseFile::getpos(pos);} + void getpos(FatPos_t* pos) {SdBaseFile::getpos(pos);} /** Internal - do not use * \param[in] pos */ @@ -187,7 +194,7 @@ class ifstream : public istream, SdStreamBase { return SdStreamBase::seekoff(off, way); } bool seekpos(pos_type pos) {return SdStreamBase::seekpos(pos);} - void setpos(fpos_t* pos) {SdBaseFile::setpos(pos);} + void setpos(FatPos_t* pos) {SdBaseFile::setpos(pos);} pos_type tellpos() {return SdStreamBase::curPosition();} /// @endcond }; @@ -206,7 +213,9 @@ class ofstream : public ostream, SdStreamBase { explicit ofstream(const char* path, ios::openmode mode = out) { open(path, mode); } +#if DESTRUCTOR_CLOSES_FILE ~ofstream() {} +#endif // DESTRUCTOR_CLOSES_FILE /** Clear state and writeError * \param[in] state new state for stream */ @@ -229,6 +238,7 @@ class ofstream : public ostream, SdStreamBase { } /** \return True if stream is open else false. */ bool is_open() {return SdBaseFile::isOpen();} + protected: /// @cond SHOW_PROTECTED /** diff --git a/libs/SdFat-master/SdFat/SdVolume.cpp b/libs/SdFat-master/SdFat/SdVolume.cpp new file mode 100755 index 0000000..61f8381 --- /dev/null +++ b/libs/SdFat-master/SdFat/SdVolume.cpp @@ -0,0 +1,595 @@ +/* Arduino SdFat Library + * Copyright (C) 2012 by William Greiman + * + * This file is part of the Arduino SdFat Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SdFat Library. If not, see + * . + */ +#include +//------------------------------------------------------------------------------ +#if !USE_MULTIPLE_CARDS +// raw block cache +uint8_t SdVolume::m_fatCount; // number of FATs on volume +uint32_t SdVolume::m_blocksPerFat; // FAT size in blocks +cache_t SdVolume::m_cacheBuffer; // 512 byte cache for Sd2Card +uint32_t SdVolume::m_cacheBlockNumber; // current block number +uint8_t SdVolume::m_cacheStatus; // status of cache block +#if USE_SEPARATE_FAT_CACHE +cache_t SdVolume::m_cacheFatBuffer; // 512 byte cache for FAT +uint32_t SdVolume::m_cacheFatBlockNumber; // current Fat block number +uint8_t SdVolume::m_cacheFatStatus; // status of cache Fatblock +#endif // USE_SEPARATE_FAT_CACHE +Sd2Card* SdVolume::m_sdCard; // pointer to SD card object +#endif // USE_MULTIPLE_CARDS +//------------------------------------------------------------------------------ +// find a contiguous group of clusters +bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) { + // start of group + uint32_t bgnCluster; + // end of group + uint32_t endCluster; + // last cluster of FAT + uint32_t fatEnd = m_clusterCount + 1; + + // flag to save place to start next search + bool setStart; + + // set search start cluster + if (*curCluster) { + // try to make file contiguous + bgnCluster = *curCluster + 1; + + // don't save new start location + setStart = false; + } else { + // start at likely place for free cluster + bgnCluster = m_allocSearchStart; + + // save next search start if no holes. + setStart = true; + } + // end of group + endCluster = bgnCluster; + + // search the FAT for free clusters + for (uint32_t n = 0;; n++, endCluster++) { + // can't find space checked all clusters + if (n >= m_clusterCount) { + DBG_FAIL_MACRO; + goto fail; + } + // past end - start from beginning of FAT + if (endCluster > fatEnd) { + bgnCluster = endCluster = 2; + } + uint32_t f; + if (!fatGet(endCluster, &f)) { + DBG_FAIL_MACRO; + goto fail; + } + + if (f != 0) { + // don't update search start if unallocated clusters before endCluster. + if (bgnCluster != endCluster) setStart = false; + // cluster in use try next cluster as bgnCluster + bgnCluster = endCluster + 1; + } else if ((endCluster - bgnCluster + 1) == count) { + // done - found space + break; + } + } + // remember possible next free cluster + if (setStart) m_allocSearchStart = endCluster + 1; + + // mark end of chain + if (!fatPutEOC(endCluster)) { + DBG_FAIL_MACRO; + goto fail; + } + // link clusters + while (endCluster > bgnCluster) { + if (!fatPut(endCluster - 1, endCluster)) { + DBG_FAIL_MACRO; + goto fail; + } + endCluster--; + } + if (*curCluster != 0) { + // connect chains + if (!fatPut(*curCluster, bgnCluster)) { + DBG_FAIL_MACRO; + goto fail; + } + } + // return first cluster number to caller + *curCluster = bgnCluster; + return true; + + fail: + return false; +} +//============================================================================== +// cache functions +#if USE_SEPARATE_FAT_CACHE +//------------------------------------------------------------------------------ +cache_t* SdVolume::cacheFetch(uint32_t blockNumber, uint8_t options) { + return cacheFetchData(blockNumber, options); +} +//------------------------------------------------------------------------------ +cache_t* SdVolume::cacheFetchData(uint32_t blockNumber, uint8_t options) { + if (m_cacheBlockNumber != blockNumber) { + if (!cacheWriteData()) { + DBG_FAIL_MACRO; + goto fail; + } + if (!(options & CACHE_OPTION_NO_READ)) { + if (!m_sdCard->readBlock(blockNumber, m_cacheBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + } + m_cacheStatus = 0; + m_cacheBlockNumber = blockNumber; + } + m_cacheStatus |= options & CACHE_STATUS_MASK; + return &m_cacheBuffer; + + fail: + return 0; +} +//------------------------------------------------------------------------------ +cache_t* SdVolume::cacheFetchFat(uint32_t blockNumber, uint8_t options) { + if (m_cacheFatBlockNumber != blockNumber) { + if (!cacheWriteFat()) { + DBG_FAIL_MACRO; + goto fail; + } + if (!(options & CACHE_OPTION_NO_READ)) { + if (!m_sdCard->readBlock(blockNumber, m_cacheFatBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + } + m_cacheFatStatus = 0; + m_cacheFatBlockNumber = blockNumber; + } + m_cacheFatStatus |= options & CACHE_STATUS_MASK; + return &m_cacheFatBuffer; + + fail: + return 0; +} +//------------------------------------------------------------------------------ +bool SdVolume::cacheSync() { + return cacheWriteData() && cacheWriteFat(); +} +//------------------------------------------------------------------------------ +bool SdVolume::cacheWriteData() { + if (m_cacheStatus & CACHE_STATUS_DIRTY) { + if (!m_sdCard->writeBlock(m_cacheBlockNumber, m_cacheBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + m_cacheStatus &= ~CACHE_STATUS_DIRTY; + } + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +bool SdVolume::cacheWriteFat() { + if (m_cacheFatStatus & CACHE_STATUS_DIRTY) { + if (!m_sdCard->writeBlock(m_cacheFatBlockNumber, m_cacheFatBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + // mirror second FAT + if (m_fatCount > 1) { + uint32_t lbn = m_cacheFatBlockNumber + m_blocksPerFat; + if (!m_sdCard->writeBlock(lbn, m_cacheFatBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + } + m_cacheFatStatus &= ~CACHE_STATUS_DIRTY; + } + return true; + + fail: + return false; +} +#else // USE_SEPARATE_FAT_CACHE +//------------------------------------------------------------------------------ +cache_t* SdVolume::cacheFetch(uint32_t blockNumber, uint8_t options) { + if (m_cacheBlockNumber != blockNumber) { + if (!cacheSync()) { + DBG_FAIL_MACRO; + goto fail; + } + if (!(options & CACHE_OPTION_NO_READ)) { + if (!m_sdCard->readBlock(blockNumber, m_cacheBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + } + m_cacheStatus = 0; + m_cacheBlockNumber = blockNumber; + } + m_cacheStatus |= options & CACHE_STATUS_MASK; + return &m_cacheBuffer; + + fail: + return 0; +} +//------------------------------------------------------------------------------ +cache_t* SdVolume::cacheFetchFat(uint32_t blockNumber, uint8_t options) { + return cacheFetch(blockNumber, options | CACHE_STATUS_FAT_BLOCK); +} +//------------------------------------------------------------------------------ +bool SdVolume::cacheSync() { + if (m_cacheStatus & CACHE_STATUS_DIRTY) { + if (!m_sdCard->writeBlock(m_cacheBlockNumber, m_cacheBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + // mirror second FAT + if ((m_cacheStatus & CACHE_STATUS_FAT_BLOCK) && m_fatCount > 1) { + uint32_t lbn = m_cacheBlockNumber + m_blocksPerFat; + if (!m_sdCard->writeBlock(lbn, m_cacheBuffer.data)) { + DBG_FAIL_MACRO; + goto fail; + } + } + m_cacheStatus &= ~CACHE_STATUS_DIRTY; + } + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +bool SdVolume::cacheWriteData() { + return cacheSync(); +} +#endif // USE_SEPARATE_FAT_CACHE +//------------------------------------------------------------------------------ +void SdVolume::cacheInvalidate() { + m_cacheBlockNumber = 0XFFFFFFFF; + m_cacheStatus = 0; +} +//============================================================================== +//------------------------------------------------------------------------------ +uint32_t SdVolume::clusterStartBlock(uint32_t cluster) const { + return m_dataStartBlock + ((cluster - 2) << m_clusterSizeShift); +} +//------------------------------------------------------------------------------ +// Fetch a FAT entry +bool SdVolume::fatGet(uint32_t cluster, uint32_t* value) { + uint32_t lba; + cache_t* pc; + // error if reserved cluster of beyond FAT + if (cluster < 2 || cluster > (m_clusterCount + 1)) { + DBG_FAIL_MACRO; + goto fail; + } + if (FAT12_SUPPORT && m_fatType == 12) { + uint16_t index = cluster; + index += index >> 1; + lba = m_fatStartBlock + (index >> 9); + pc = cacheFetchFat(lba, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + index &= 0X1FF; + uint16_t tmp = pc->data[index]; + index++; + if (index == 512) { + pc = cacheFetchFat(lba + 1, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + index = 0; + } + tmp |= pc->data[index] << 8; + *value = cluster & 1 ? tmp >> 4 : tmp & 0XFFF; + return true; + } + if (m_fatType == 16) { + lba = m_fatStartBlock + (cluster >> 8); + } else if (m_fatType == 32) { + lba = m_fatStartBlock + (cluster >> 7); + } else { + DBG_FAIL_MACRO; + goto fail; + } + pc = cacheFetchFat(lba, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + if (m_fatType == 16) { + *value = pc->fat16[cluster & 0XFF]; + } else { + *value = pc->fat32[cluster & 0X7F] & FAT32MASK; + } + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +// Store a FAT entry +bool SdVolume::fatPut(uint32_t cluster, uint32_t value) { + uint32_t lba; + cache_t* pc; + // error if reserved cluster of beyond FAT + if (cluster < 2 || cluster > (m_clusterCount + 1)) { + DBG_FAIL_MACRO; + goto fail; + } + if (FAT12_SUPPORT && m_fatType == 12) { + uint16_t index = cluster; + index += index >> 1; + lba = m_fatStartBlock + (index >> 9); + pc = cacheFetchFat(lba, CACHE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + index &= 0X1FF; + uint8_t tmp = value; + if (cluster & 1) { + tmp = (pc->data[index] & 0XF) | tmp << 4; + } + pc->data[index] = tmp; + + index++; + if (index == 512) { + lba++; + index = 0; + pc = cacheFetchFat(lba, CACHE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + } + tmp = value >> 4; + if (!(cluster & 1)) { + tmp = ((pc->data[index] & 0XF0)) | tmp >> 4; + } + pc->data[index] = tmp; + return true; + } + if (m_fatType == 16) { + lba = m_fatStartBlock + (cluster >> 8); + } else if (m_fatType == 32) { + lba = m_fatStartBlock + (cluster >> 7); + } else { + DBG_FAIL_MACRO; + goto fail; + } + pc = cacheFetchFat(lba, CACHE_FOR_WRITE); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + // store entry + if (m_fatType == 16) { + pc->fat16[cluster & 0XFF] = value; + } else { + pc->fat32[cluster & 0X7F] = value; + } + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +// free a cluster chain +bool SdVolume::freeChain(uint32_t cluster) { + uint32_t next; + + do { + if (!fatGet(cluster, &next)) { + DBG_FAIL_MACRO; + goto fail; + } + // free cluster + if (!fatPut(cluster, 0)) { + DBG_FAIL_MACRO; + goto fail; + } + if (cluster < m_allocSearchStart) m_allocSearchStart = cluster; + cluster = next; + } while (!isEOC(cluster)); + + return true; + + fail: + return false; +} +//------------------------------------------------------------------------------ +/** Volume free space in clusters. + * + * \return Count of free clusters for success or -1 if an error occurs. + */ +int32_t SdVolume::freeClusterCount() { + uint32_t free = 0; + uint32_t lba; + uint32_t todo = m_clusterCount + 2; + uint16_t n; + + if (FAT12_SUPPORT && m_fatType == 12) { + for (unsigned i = 2; i < todo; i++) { + uint32_t c; + if (!fatGet(i, &c)) { + DBG_FAIL_MACRO; + goto fail; + } + if (c == 0) free++; + } + } else if (m_fatType == 16 || m_fatType == 32) { + lba = m_fatStartBlock; + while (todo) { + cache_t* pc = cacheFetchFat(lba++, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + n = m_fatType == 16 ? 256 : 128; + if (todo < n) n = todo; + if (m_fatType == 16) { + for (uint16_t i = 0; i < n; i++) { + if (pc->fat16[i] == 0) free++; + } + } else { + for (uint16_t i = 0; i < n; i++) { + if (pc->fat32[i] == 0) free++; + } + } + todo -= n; + } + } else { + // invalid FAT type + DBG_FAIL_MACRO; + goto fail; + } + return free; + + fail: + return -1; +} +//------------------------------------------------------------------------------ +/** Initialize a FAT volume. + * + * \param[in] dev The SD card where the volume is located. + * + * \param[in] part The partition to be used. Legal values for \a part are + * 1-4 to use the corresponding partition on a device formatted with + * a MBR, Master Boot Record, or zero if the device is formatted as + * a super floppy with the FAT boot sector in block zero. + * + * \return The value one, true, is returned for success and + * the value zero, false, is returned for failure. Reasons for + * failure include not finding a valid partition, not finding a valid + * FAT file system in the specified partition or an I/O error. + */ +bool SdVolume::init(Sd2Card* dev, uint8_t part) { + uint8_t tmp; + uint32_t totalBlocks; + uint32_t volumeStartBlock = 0; + fat32_boot_t* fbs; + cache_t* pc; + m_sdCard = dev; + m_fatType = 0; + m_allocSearchStart = 2; + m_cacheStatus = 0; // cacheSync() will write block if true + m_cacheBlockNumber = 0XFFFFFFFF; +#if USE_SEPARATE_FAT_CACHE + m_cacheFatStatus = 0; // cacheSync() will write block if true + m_cacheFatBlockNumber = 0XFFFFFFFF; +#endif // USE_SEPARATE_FAT_CACHE + // if part == 0 assume super floppy with FAT boot sector in block zero + // if part > 0 assume mbr volume with partition table + if (part) { + if (part > 4) { + DBG_FAIL_MACRO; + goto fail; + } + pc = cacheFetch(volumeStartBlock, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + part_t* p = &pc->mbr.part[part-1]; + if ((p->boot & 0X7F) != 0 || p->firstSector == 0) { + // not a valid partition + DBG_FAIL_MACRO; + goto fail; + } + volumeStartBlock = p->firstSector; + } + pc = cacheFetch(volumeStartBlock, CACHE_FOR_READ); + if (!pc) { + DBG_FAIL_MACRO; + goto fail; + } + fbs = &(pc->fbs32); + if (fbs->bytesPerSector != 512 || + fbs->fatCount == 0 || + fbs->reservedSectorCount == 0) { + // not valid FAT volume + DBG_FAIL_MACRO; + goto fail; + } + m_fatCount = fbs->fatCount; + m_blocksPerCluster = fbs->sectorsPerCluster; + + m_clusterBlockMask = m_blocksPerCluster - 1; + + // determine shift that is same as multiply by m_blocksPerCluster + m_clusterSizeShift = 0; + for (tmp = 1; m_blocksPerCluster != tmp; m_clusterSizeShift++) { + tmp <<= 1; + if (tmp == 0) { + DBG_FAIL_MACRO; + goto fail; + } + } + + m_blocksPerFat = fbs->sectorsPerFat16 ? + fbs->sectorsPerFat16 : fbs->sectorsPerFat32; + + m_fatStartBlock = volumeStartBlock + fbs->reservedSectorCount; + + // count for FAT16 zero for FAT32 + m_rootDirEntryCount = fbs->rootDirEntryCount; + + // directory start for FAT16 dataStart for FAT32 + m_rootDirStart = m_fatStartBlock + fbs->fatCount * m_blocksPerFat; + + // data start for FAT16 and FAT32 + m_dataStartBlock = m_rootDirStart + ((32 * fbs->rootDirEntryCount + 511)/512); + + // total blocks for FAT16 or FAT32 + totalBlocks = fbs->totalSectors16 ? + fbs->totalSectors16 : fbs->totalSectors32; + // total data blocks + m_clusterCount = totalBlocks - (m_dataStartBlock - volumeStartBlock); + + // divide by cluster size to get cluster count + m_clusterCount >>= m_clusterSizeShift; + + // FAT type is determined by cluster count + if (m_clusterCount < 4085) { + m_fatType = 12; + if (!FAT12_SUPPORT) { + DBG_FAIL_MACRO; + goto fail; + } + } else if (m_clusterCount < 65525) { + m_fatType = 16; + } else { + m_rootDirStart = fbs->fat32RootCluster; + m_fatType = 32; + } + return true; + + fail: + return false; +} diff --git a/libs/SdFatBeta20120108/SdFat/SdVolume.h b/libs/SdFat-master/SdFat/SdVolume.h similarity index 50% rename from libs/SdFatBeta20120108/SdFat/SdVolume.h rename to libs/SdFat-master/SdFat/SdVolume.h index 1f65aef..d9d4dc2 100755 --- a/libs/SdFatBeta20120108/SdFat/SdVolume.h +++ b/libs/SdFat-master/SdFat/SdVolume.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -25,8 +25,7 @@ */ #include #include -#include - +#include //============================================================================== // SdVolume class /** @@ -58,15 +57,15 @@ union cache_t { class SdVolume { public: /** Create an instance of SdVolume */ - SdVolume() : fatType_(0) {} + SdVolume() : m_fatType(0) {} /** Clear the cache and returns a pointer to the cache. Used by the WaveRP * recorder to do raw write to the SD card. Not for normal apps. * \return A pointer to the cache buffer or zero if an error occurs. */ cache_t* cacheClear() { - if (!cacheFlush()) return 0; - cacheBlockNumber_ = 0XFFFFFFFF; - return &cacheBuffer_; + if (!cacheSync()) return 0; + m_cacheBlockNumber = 0XFFFFFFFF; + return &m_cacheBuffer; } /** Initialize a FAT volume. Try partition one first then try super * floppy format. @@ -83,31 +82,32 @@ class SdVolume { // inline functions that return volume info /** \return The volume's cluster size in blocks. */ - uint8_t blocksPerCluster() const {return blocksPerCluster_;} + uint8_t blocksPerCluster() const {return m_blocksPerCluster;} /** \return The number of blocks in one FAT. */ - uint32_t blocksPerFat() const {return blocksPerFat_;} + uint32_t blocksPerFat() const {return m_blocksPerFat;} /** \return The total number of clusters in the volume. */ - uint32_t clusterCount() const {return clusterCount_;} + uint32_t clusterCount() const {return m_clusterCount;} /** \return The shift count required to multiply by blocksPerCluster. */ - uint8_t clusterSizeShift() const {return clusterSizeShift_;} + uint8_t clusterSizeShift() const {return m_clusterSizeShift;} /** \return The logical block number for the start of file data. */ - uint32_t dataStartBlock() const {return dataStartBlock_;} + uint32_t dataStartBlock() const {return clusterStartBlock(2);} /** \return The number of FAT structures on the volume. */ - uint8_t fatCount() const {return fatCount_;} + uint8_t fatCount() const {return m_fatCount;} /** \return The logical block number for the start of the first FAT. */ - uint32_t fatStartBlock() const {return fatStartBlock_;} + uint32_t fatStartBlock() const {return m_fatStartBlock;} /** \return The FAT type of the volume. Values are 12, 16 or 32. */ - uint8_t fatType() const {return fatType_;} + uint8_t fatType() const {return m_fatType;} int32_t freeClusterCount(); /** \return The number of entries in the root directory for FAT16 volumes. */ - uint32_t rootDirEntryCount() const {return rootDirEntryCount_;} + uint32_t rootDirEntryCount() const {return m_rootDirEntryCount;} /** \return The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes. */ - uint32_t rootDirStart() const {return rootDirStart_;} + uint32_t rootDirStart() const {return m_rootDirStart;} /** Sd2Card object for this volume * \return pointer to Sd2Card object. */ - Sd2Card* sdCard() {return sdCard_;} + Sd2Card* sdCard() {return m_sdCard;} + /** Debug access to FAT table * * \param[in] n cluster number. @@ -119,58 +119,83 @@ class SdVolume { private: // Allow SdBaseFile access to SdVolume private data. friend class SdBaseFile; - - // value for dirty argument in cacheRawBlock to indicate read from cache - static bool const CACHE_FOR_READ = false; - // value for dirty argument in cacheRawBlock to indicate write to cache - static bool const CACHE_FOR_WRITE = true; - +//------------------------------------------------------------------------------ + uint32_t m_allocSearchStart; // Start cluster for alloc search. + uint8_t m_blocksPerCluster; // Cluster size in blocks. + uint8_t m_clusterBlockMask; // Mask to extract block of cluster. + uint32_t m_clusterCount; // Clusters in one FAT. + uint8_t m_clusterSizeShift; // Cluster count to block count shift. + uint32_t m_dataStartBlock; // First data block number. + uint32_t m_fatStartBlock; // Start block for first FAT. + uint8_t m_fatType; // Volume type (12, 16, OR 32). + uint16_t m_rootDirEntryCount; // Number of entries in FAT16 root dir. + uint32_t m_rootDirStart; // Start block for FAT16, cluster for FAT32. +//------------------------------------------------------------------------------ +// block caches +// use of static functions save a bit of flash - maybe not worth complexity +// + static const uint8_t CACHE_STATUS_DIRTY = 1; + static const uint8_t CACHE_STATUS_FAT_BLOCK = 2; + static const uint8_t CACHE_STATUS_MASK + = CACHE_STATUS_DIRTY | CACHE_STATUS_FAT_BLOCK; + static const uint8_t CACHE_OPTION_NO_READ = 4; + // value for option argument in cacheFetch to indicate read from cache + static uint8_t const CACHE_FOR_READ = 0; + // value for option argument in cacheFetch to indicate write to cache + static uint8_t const CACHE_FOR_WRITE = CACHE_STATUS_DIRTY; + // reserve cache block with no read + static uint8_t const CACHE_RESERVE_FOR_WRITE + = CACHE_STATUS_DIRTY | CACHE_OPTION_NO_READ; #if USE_MULTIPLE_CARDS - cache_t cacheBuffer_; // 512 byte cache for device blocks - uint32_t cacheBlockNumber_; // Logical number of block in the cache - Sd2Card* sdCard_; // Sd2Card object for cache - bool cacheDirty_; // cacheFlush() will write block if true - uint32_t cacheMirrorBlock_; // block number for mirror FAT + uint8_t m_fatCount; // number of FATs on volume + uint32_t m_blocksPerFat; // FAT size in blocks + cache_t m_cacheBuffer; // 512 byte cache for device blocks + uint32_t m_cacheBlockNumber; // Logical number of block in the cache + Sd2Card* m_sdCard; // Sd2Card object for cache + uint8_t m_cacheStatus; // status of cache block +#if USE_SEPARATE_FAT_CACHE + cache_t m_cacheFatBuffer; // 512 byte cache for FAT + uint32_t m_cacheFatBlockNumber; // current Fat block number + uint8_t m_cacheFatStatus; // status of cache Fatblock +#endif // USE_SEPARATE_FAT_CACHE #else // USE_MULTIPLE_CARDS - static cache_t cacheBuffer_; // 512 byte cache for device blocks - static uint32_t cacheBlockNumber_; // Logical number of block in the cache - static Sd2Card* sdCard_; // Sd2Card object for cache - static bool cacheDirty_; // cacheFlush() will write block if true - static uint32_t cacheMirrorBlock_; // block number for mirror FAT + static uint8_t m_fatCount; // number of FATs on volume + static uint32_t m_blocksPerFat; // FAT size in blocks + static cache_t m_cacheBuffer; // 512 byte cache for device blocks + static uint32_t m_cacheBlockNumber; // Logical number of block in the cache + static uint8_t m_cacheStatus; // status of cache block +#if USE_SEPARATE_FAT_CACHE + static cache_t m_cacheFatBuffer; // 512 byte cache for FAT + static uint32_t m_cacheFatBlockNumber; // current Fat block number + static uint8_t m_cacheFatStatus; // status of cache Fatblock +#endif // USE_SEPARATE_FAT_CACHE + static Sd2Card* m_sdCard; // Sd2Card object for cache #endif // USE_MULTIPLE_CARDS - uint32_t allocSearchStart_; // start cluster for alloc search - uint8_t blocksPerCluster_; // cluster size in blocks - uint32_t blocksPerFat_; // FAT size in blocks - uint32_t clusterCount_; // clusters in one FAT - uint8_t clusterSizeShift_; // shift to convert cluster count to block count - uint32_t dataStartBlock_; // first data block number - uint8_t fatCount_; // number of FATs on volume - uint32_t fatStartBlock_; // start block for first FAT - uint8_t fatType_; // volume type (12, 16, OR 32) - uint16_t rootDirEntryCount_; // number of entries in FAT16 root dir - uint32_t rootDirStart_; // root start block for FAT16, cluster for FAT32 - //---------------------------------------------------------------------------- - bool allocContiguous(uint32_t count, uint32_t* curCluster); - uint8_t blockOfCluster(uint32_t position) const { - return (position >> 9) & (blocksPerCluster_ - 1);} - uint32_t clusterStartBlock(uint32_t cluster) const { - return dataStartBlock_ + ((cluster - 2) << clusterSizeShift_);} - cache_t *cache() {return &cacheBuffer_;} - uint32_t cacheBlockNumber() {return cacheBlockNumber_;} + + cache_t *cacheAddress() {return &m_cacheBuffer;} + uint32_t cacheBlockNumber() {return m_cacheBlockNumber;} #if USE_MULTIPLE_CARDS - bool cacheFlush(); - bool cacheRawBlock(uint32_t blockNumber, bool dirty); + cache_t* cacheFetch(uint32_t blockNumber, uint8_t options); + cache_t* cacheFetchData(uint32_t blockNumber, uint8_t options); + cache_t* cacheFetchFat(uint32_t blockNumber, uint8_t options); + void cacheInvalidate(); + bool cacheSync(); + bool cacheWriteData(); + bool cacheWriteFat(); #else // USE_MULTIPLE_CARDS - static bool cacheFlush(); - static bool cacheRawBlock(uint32_t blockNumber, bool dirty); + static cache_t* cacheFetch(uint32_t blockNumber, uint8_t options); + static cache_t* cacheFetchData(uint32_t blockNumber, uint8_t options); + static cache_t* cacheFetchFat(uint32_t blockNumber, uint8_t options); + static void cacheInvalidate(); + static bool cacheSync(); + static bool cacheWriteData(); + static bool cacheWriteFat(); #endif // USE_MULTIPLE_CARDS - // used by SdBaseFile write to assign cache to SD location - void cacheSetBlockNumber(uint32_t blockNumber, bool dirty) { - cacheDirty_ = dirty; - cacheBlockNumber_ = blockNumber; - } - void cacheSetDirty() {cacheDirty_ |= CACHE_FOR_WRITE;} - bool chainSize(uint32_t beginCluster, uint32_t* size); +//------------------------------------------------------------------------------ + bool allocContiguous(uint32_t count, uint32_t* curCluster); + uint8_t blockOfCluster(uint32_t position) const { + return (position >> 9) & m_clusterBlockMask;} + uint32_t clusterStartBlock(uint32_t cluster) const; bool fatGet(uint32_t cluster, uint32_t* value); bool fatPut(uint32_t cluster, uint32_t value); bool fatPutEOC(uint32_t cluster) { @@ -178,32 +203,14 @@ class SdVolume { } bool freeChain(uint32_t cluster); bool isEOC(uint32_t cluster) const { - if (FAT12_SUPPORT && fatType_ == 12) return cluster >= FAT12EOC_MIN; - if (fatType_ == 16) return cluster >= FAT16EOC_MIN; + if (FAT12_SUPPORT && m_fatType == 12) return cluster >= FAT12EOC_MIN; + if (m_fatType == 16) return cluster >= FAT16EOC_MIN; return cluster >= FAT32EOC_MIN; } bool readBlock(uint32_t block, uint8_t* dst) { - return sdCard_->readBlock(block, dst);} + return m_sdCard->readBlock(block, dst);} bool writeBlock(uint32_t block, const uint8_t* dst) { - return sdCard_->writeBlock(block, dst); - } -//------------------------------------------------------------------------------ - // Deprecated functions - suppress cpplint warnings with NOLINT comment -#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN) - public: - /** \deprecated Use: bool SdVolume::init(Sd2Card* dev); - * \param[in] dev The SD card where the volume is located. - * \return true for success or false for failure. - */ - bool init(Sd2Card& dev) {return init(&dev);} // NOLINT - /** \deprecated Use: bool SdVolume::init(Sd2Card* dev, uint8_t vol); - * \param[in] dev The SD card where the volume is located. - * \param[in] part The partition to be used. - * \return true for success or false for failure. - */ - bool init(Sd2Card& dev, uint8_t part) { // NOLINT - return init(&dev, part); + return m_sdCard->writeBlock(block, dst); } -#endif // ALLOW_DEPRECATED_FUNCTIONS }; #endif // SdVolume diff --git a/libs/SdFat-master/SdFat/StdioStream.cpp b/libs/SdFat-master/SdFat/StdioStream.cpp new file mode 100755 index 0000000..41bf0f0 --- /dev/null +++ b/libs/SdFat-master/SdFat/StdioStream.cpp @@ -0,0 +1,531 @@ +/* Arduino RamDisk Library + * Copyright (C) 2014 by William Greiman + * + * This file is part of the Arduino RamDisk Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino RamDisk Library. If not, see + * . + */ +#include +#include +#include +//------------------------------------------------------------------------------ +int StdioStream::fclose() { + int rtn = 0; + if (!m_flags) { + return EOF; + } + if (m_flags & F_SWR) { + if (!flushBuf()) rtn = EOF; + } + if (!SdBaseFile::close()) rtn = EOF; + m_r = 0; + m_w = 0; + m_flags = 0; + return rtn; +} +//------------------------------------------------------------------------------ +int StdioStream::fflush() { + if ((m_flags & (F_SWR | F_SRW)) && !(m_flags & F_SRD)) { + if (flushBuf() && SdBaseFile::sync()) return 0; + } + return EOF; +} +//------------------------------------------------------------------------------ +char* StdioStream::fgets(char* str, int num, size_t* len) { + char* s = str; + size_t n; + if (num-- <= 0) return 0; + while (num) { + if ((n = m_r) == 0) { + if (!fillBuf()) { + if (s == str) return 0; + break; + } + n = m_r; + } + if (n > num) n = num; + uint8_t* end = reinterpret_cast(memchr(m_p, '\n', n)); + if (end != 0) { + n = ++end - m_p; + memcpy(s, m_p, n); + m_r -= n; + m_p = end; + s += n; + break; + } + memcpy(s, m_p, n); + m_r -= n; + m_p += n; + s += n; + num -= n; + } + *s = 0; + if (len) *len = s - str; + return str; +} +//------------------------------------------------------------------------------ +bool StdioStream::fopen(const char* filename, const char* mode) { + uint8_t oflags; + switch (*mode++) { + case 'a': + m_flags = F_SWR; + oflags = O_WRITE | O_CREAT | O_APPEND | O_AT_END; + break; + + case 'r': + m_flags = F_SRD; + oflags = O_READ; + break; + + case 'w': + m_flags = F_SWR; + oflags = O_WRITE | O_CREAT | O_TRUNC; + break; + + default: + goto fail; + } + while (*mode) { + switch (*mode++) { + case '+': + m_flags |= F_SRW; + oflags |= O_RDWR; + break; + + case 'b': + break; + + case 'x': + oflags |= O_EXCL; + break; + + default: + goto fail; + } + } + if ((oflags & O_EXCL) && !(oflags & O_WRITE)) goto fail; + if (!SdBaseFile::open(filename, oflags)) goto fail; + m_r = 0; + m_w = 0; + m_p = m_buf; + return true; + + fail: + m_flags = 0; + return false; +} +//------------------------------------------------------------------------------ +int StdioStream::fputs(const char* str) { + size_t len = strlen(str); + return fwrite(str, 1, len) == len ? len : EOF; +} +//------------------------------------------------------------------------------ +int StdioStream::fputs_P(PGM_P str) { + PGM_P bgn = str; + for (char c; (c = pgm_read_byte(str)); str++) { + if (putc(c) < 0) return EOF; + } + return str - bgn; +} +//------------------------------------------------------------------------------ +size_t StdioStream::fread(void* ptr, size_t size, size_t count) { + uint8_t* dst = reinterpret_cast(ptr); + size_t total = size*count; + if (total == 0) return 0; + size_t need = total; + while (need > m_r) { + memcpy(dst, m_p, m_r); + dst += m_r; + m_p += m_r; + need -= m_r; + if (!fillBuf()) { + return (total - need)/size; + } + } + memcpy(dst, m_p, need); + m_r -= need; + m_p += need; + return count; +} +//------------------------------------------------------------------------------ +int StdioStream::fseek(int32_t offset, int origin) { + int32_t pos; + if (m_flags & F_SWR) { + if (!flushBuf()) { + goto fail; + } + } + switch (origin) { + case SEEK_CUR: + pos = ftell(); + if (pos < 0) { + goto fail; + } + pos += offset; + if (!SdBaseFile::seekCur(pos)) { + goto fail; + } + break; + + case SEEK_SET: + if (!SdBaseFile::seekSet(offset)) { + goto fail; + } + break; + + case SEEK_END: + if (!SdBaseFile::seekEnd(offset)) { + goto fail; + } + break; + + default: + goto fail; + } + m_r = 0; + m_p = m_buf; + return 0; + + fail: + return EOF; +} +//------------------------------------------------------------------------------ +int32_t StdioStream::ftell() { + uint32_t pos = SdBaseFile::curPosition(); + if (m_flags & F_SRD) { + if (m_r > pos) return -1L; + pos -= m_r; + } else if (m_flags & F_SWR) { + pos += m_p - m_buf; + } + return pos; +} +//------------------------------------------------------------------------------ +size_t StdioStream::fwrite(const void* ptr, size_t size, size_t count) { + return write(ptr, count*size) < 0 ? EOF : count; +#if 0 //////////////////////////////////////////////////////////////////////////////////// + const uint8_t* src = static_cast(ptr); + size_t total = count*size; + if (total == 0) return 0; + size_t todo = total; + + while (todo > m_w) { + memcpy(m_p, src, m_w); + m_p += m_w; + src += m_w; + todo -= m_w; + if (!flushBuf()) { + return (total - todo)/size; + } + } + memcpy(m_p, src, todo); + m_p += todo; + m_w -= todo; + return count; +#endif ////////////////////////////////////////////////////////////////////////////////// +} +//------------------------------------------------------------------------------ + int StdioStream::write(const void* buf, size_t count) { + const uint8_t* src = static_cast(buf); + size_t todo = count; + + while (todo > m_w) { + memcpy(m_p, src, m_w); + m_p += m_w; + src += m_w; + todo -= m_w; + if (!flushBuf()) return EOF; + } + memcpy(m_p, src, todo); + m_p += todo; + m_w -= todo; + return count; +} +//------------------------------------------------------------------------------ +size_t StdioStream::print(const __FlashStringHelper *str) { + const char PROGMEM *p = (const char PROGMEM *)str; + uint8_t c; + while (c = pgm_read_byte(p)) { + if (putc(c) < 0) return 0; + p++; + } + return p - (const char PROGMEM *)str; +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(float value, uint8_t prec) { +#define FLOAT_NEW_WAY +#ifdef FLOAT_NEW_WAY + char buf[24]; + char *ptr = fmtFloat(value, buf + sizeof(buf), prec); + // return fputs(ptr); + // uint8_t len = buf + sizeof(buf) - ptr; + return write(ptr, buf + sizeof(buf) - ptr); +#else + char* ptr; + uint8_t rtn = 0; + uint8_t sign = 0; + if (value < 0) { + value = -value; + sign = '-'; + } + // check for NaN INF OVF + if (isnan(value)) { + if (fputs_P(PSTR("nan")) < 0) return -1; + rtn += 3; + } else if (isinf(value)) { + if (fputs_P(PSTR("inf")) < 0) return -1; + rtn += 3; + } else if (value > 4294967040.0) { + if (fputs_P(PSTR("ovf")) < 0) return -1;; + rtn += 3; + } else { + if (sign) { + if (putc(sign) < 0) return -1; + rtn++; + } + if (prec > 9) prec = 9; + + /* + uint32_t s = 1; + for (uint8_t i = 0; i < prec; i++) { + // s *= 10; + s = ((s << 2) + s) << 1; + } + // round value + value += 0.5/s; + */ + value += scale10(0.5, -prec); + uint32_t whole = value; + int np; + if ((np = printDec(whole)) < 0) return -1; + rtn += np; + if (prec) { + if (putc('.') < 0) return -1; + char* str = fmtSpace(prec); + if (!str) return -1; + char* tmp = str - prec; + + // uint32_t fraction = s*(value - whole); + uint32_t fraction = scale10(value - whole, prec); + ptr = fmtDec(fraction, str); + while (ptr > tmp) *--ptr = '0'; + rtn += prec + 1; + } + } + return rtn; + #endif +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(signed char n) { + uint8_t s = 0; + if (n < 0) { + if (fputc('-') < 0) return -1; + n = -n; + s = 1; + } + printDec((unsigned char)n); +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(int16_t n) { + int s; + uint8_t rtn = 0; + if (n < 0) { + if (fputc('-') < 0) return -1; + n = -n; + rtn++; + } + if ((s = printDec((uint16_t)n)) < 0) return s; + return rtn; +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(uint16_t n) { +#define NEW_WAY +#ifdef NEW_WAY + char buf[5]; + char *ptr = fmtDec(n, buf + sizeof(buf)); + uint8_t len = buf + sizeof(buf) - ptr; + return write(ptr, len); +#else + uint8_t len; + if (n < 100) { + len = n < 10 ? 1 : 2; + } else { + len = n < 1000 ? 3 : n < 10000 ? 4 : 5; + } + char* str = fmtSpace(len); + if (!str) return -1; + fmtDec(n, str); + return len; +#endif +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(int32_t n) { + uint8_t s = 0; + if (n < 0) { + if (fputc('-') < 0) return -1; + n = -n; + s = 1; + } + int rtn = printDec((uint32_t)n); + return rtn > 0 ? rtn + s : -1; +} +//------------------------------------------------------------------------------ +int StdioStream::printDec(uint32_t n) { +#ifdef NEW_WAY + char buf[10]; + char *ptr = fmtDec(n, buf + sizeof(buf)); + uint8_t len = buf + sizeof(buf) - ptr; + return write(ptr, len); +#else + uint8_t len; + if (n < 0X10000) { + return printDec((uint16_t)n); + } + if (n < 10000000) { + len = n < 100000 ? 5 : n < 1000000 ? 6 : 7; + } else { + len = n < 100000000 ? 8 : n < 1000000000 ? 9 : 10; + } + + char* str = fmtSpace(len); + if (!str) return -1; + fmtDec(n, str); + return len; +#endif +} +//------------------------------------------------------------------------------ +int StdioStream::printHex(uint32_t n) { +#ifdef NEW_WAY + char buf[8]; + char *ptr = fmtHex(n, buf + sizeof(buf)); + uint8_t len = buf + sizeof(buf) - ptr; + return write(ptr, len); +#else + size_t len; + if (n < 0X10000) { + len = n < 0X10 ? 1 : n < 0X100 ? 2 : n < 0X1000 ? 3 : 4; + } else { + len = n < 0X100000 ? 5 : n < 0X1000000 ? 6 : n < 0X10000000 ? 7 : 8; + } + char* str = fmtSpace(len); + if (!str) return -1; + + do { + uint8_t h = n & 0XF; + *str-- = h + (h < 10 ? '0' : 'A' - 10); + n >>= 4; + } while (n); + return len; +#endif +} +//------------------------------------------------------------------------------ +bool StdioStream::rewind() { + if (m_flags & F_SWR) { + if (!flushBuf()) return false; + } + SdBaseFile::seekSet(0); + m_r = 0; + return true; +} +//------------------------------------------------------------------------------ +int StdioStream::ungetc(int c) { + // error if EOF. + if (c == EOF) return EOF; + // error if not reading. + if ((m_flags & F_SRD) == 0) return EOF; + // error if no space. + if (m_p == m_buf) return EOF; + m_r++; + m_flags &= ~F_EOF; + return *--m_p = (uint8_t)c; +} +//============================================================================== +// private +//------------------------------------------------------------------------------ +int StdioStream::fillGet() { + if (!fillBuf()) { + return EOF; + } + m_r--; + return *m_p++; +} +//------------------------------------------------------------------------------ +// private +bool StdioStream::fillBuf() { + if (!(m_flags & F_SRD)) { /////////////check for F_ERR and F_EOF ??///////////////// + if (!(m_flags & F_SRW)) { + m_flags |= F_ERR; + return false; + } + if (m_flags & F_SWR) { + if (!flushBuf()) { + return false; + } + m_flags &= ~F_SWR; + m_flags |= F_SRD; + m_w = 0; + } + } + m_p = m_buf + UNGETC_BUF_SIZE; + int nr = SdBaseFile::read(m_p, sizeof(m_buf) - UNGETC_BUF_SIZE); + if (nr <= 0) { + m_flags |= nr < 0 ? F_ERR : F_EOF; + m_r = 0; + return false; + } + m_r = nr; + return true; +} +//------------------------------------------------------------------------------ +// private +bool StdioStream::flushBuf() { + if (!(m_flags & F_SWR)) { /////////////////check for F_ERR ??//////////////////////// + if (!(m_flags & F_SRW)) { + m_flags |= F_ERR; + return false; + } + m_flags &= ~F_SRD; + m_flags |= F_SWR; + m_r = 0; + m_w = sizeof(m_buf); + m_p = m_buf; + return true; + } + uint8_t n = m_p - m_buf; + m_p = m_buf; + m_w = sizeof(m_buf); + if (SdBaseFile::write(m_buf, n) == n) return true; + m_flags |= F_ERR; + return false; +} +//------------------------------------------------------------------------------ +int StdioStream::flushPut(uint8_t c) { + if (!flushBuf()) return EOF; + m_w--; + return *m_p++ = c; +} +//------------------------------------------------------------------------------ +char* StdioStream::fmtSpace(uint8_t len) { + if (m_w < len) { + if (!flushBuf() || m_w < len) { + return 0; + } + } + if (len > m_w) return 0; + m_p += len; + m_w -= len; + return reinterpret_cast(m_p); +} + diff --git a/libs/SdFat-master/SdFat/StdioStream.h b/libs/SdFat-master/SdFat/StdioStream.h new file mode 100755 index 0000000..5960900 --- /dev/null +++ b/libs/SdFat-master/SdFat/StdioStream.h @@ -0,0 +1,656 @@ +/* Arduino RamDisk Library + * Copyright (C) 2014 by William Greiman + * + * This file is part of the Arduino RamDisk Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino RamDisk Library. If not, see + * . + */ +#ifndef StdioStream_h +#define StdioStream_h +/** + * \file + * \brief StdioStream class + */ +#include +#include +#include +#include +//------------------------------------------------------------------------------ +/** Total size of stream buffer. The entire buffer is used for output. + * During input UNGETC_BUF_SIZE of this space is reserved for ungetc. + */ +const uint8_t STREAM_BUF_SIZE = 64; +/** Amount of buffer allocated for ungetc during input. */ +const uint8_t UNGETC_BUF_SIZE = 2; +//------------------------------------------------------------------------------ +// Get rid of any macros defined in . +#include +#undef clearerr +#undef fclose +#undef feof +#undef ferror +#undef fflush +#undef fgetc +#undef fgetpos +#undef fgets +#undef fopen +#undef fprintf +#undef fputc +#undef fputs +#undef fread +#undef freopen +#undef fscanf +#undef fseek +#undef fsetpos +#undef ftell +#undef fwrite +#undef getc +#undef getchar +#undef gets +#undef perror +#undef printf +#undef putc +#undef putchar +#undef puts +#undef remove +#undef rename +#undef rewind +#undef scanf +#undef setbuf +#undef setvbuf +#undef sprintf // NOLINT +#undef sscanf +#undef tmpfile +#undef tmpnam +#undef ungetc +#undef vfprintf +#undef vprintf +#undef vsprintf + +// make sure needed macros are defined +#ifndef EOF +/** End-of-file return value. */ +#define EOF (-1) +#endif // EOF +#ifndef NULL +/** Null pointer */ +#define NULL 0 +#endif // NULL +#ifndef SEEK_CUR +/** Seek relative to current position. */ +#define SEEK_CUR 1 +#endif // SEEK_CUR +#ifndef SEEK_END +/** Seek relative to end-of-file. */ +#define SEEK_END 2 +#endif // SEEK_END +#ifndef SEEK_SET +/** Seek relative to start-of-file. */ +#define SEEK_SET 0 +#endif // SEEK_SET +//------------------------------------------------------------------------------ +/** \class StdioStream + * \brief StdioStream implements a minimal stdio stream. + * + * StdioStream does not support subdirectories or long file names. + */ +class StdioStream : private SdBaseFile { + public: + /** Constructor + * + */ + StdioStream() { + m_w = m_r = 0; + m_p = m_buf; + m_flags = 0; + } + //---------------------------------------------------------------------------- + /** Clear the stream's end-of-file and error indicators. */ + void clearerr() {m_flags &= ~(F_ERR | F_EOF);} + //---------------------------------------------------------------------------- + /** Close a stream. + * + * A successful call to the fclose function causes the stream to be + * flushed and the associated file to be closed. Any unwritten buffered + * data is written to the file; any unread buffered data is discarded. + * Whether or not the call succeeds, the stream is disassociated from + * the file. + * + * \return zero if the stream was successfully closed, or EOF if any any + * errors are detected. + */ + int fclose(); + //---------------------------------------------------------------------------- + /** Test the stream's end-of-file indicator. + * \return non-zero if and only if the end-of-file indicator is set. + */ + int feof() {return (m_flags & F_EOF) != 0;} + //---------------------------------------------------------------------------- + /** Test the stream's error indicator. + * \return return non-zero if and only if the error indicator is set. + */ + int ferror() {return (m_flags & F_ERR) != 0;} + //---------------------------------------------------------------------------- + /** Flush the stream. + * + * If stream is an output stream or an update stream in which the most + * recent operation was not input, any unwritten data is written to the + * file; otherwise the call is an error since any buffered input data + * would be lost. + * + * \return sets the error indicator for the stream and returns EOF if an + * error occurs, otherwise it returns zero. + */ + int fflush(); + //---------------------------------------------------------------------------- + /** Get a byte from the stream. + * + * \return If the end-of-file indicator for the stream is set, or if the + * stream is at end-of-file, the end-of-file indicator for the stream is + * set and the fgetc function returns EOF. Otherwise, the fgetc function + * returns the next character from the input stream. + */ + int fgetc() {return m_r-- == 0 ? fillGet() : *m_p++;} + //---------------------------------------------------------------------------- + /** Get a string from a stream. + * + * The fgets function reads at most one less than the number of + * characters specified by num from the stream into the array pointed + * to by str. No additional characters are read after a new-line + * character (which is retained) or after end-of-file. A null character + * is written immediately after the last character read into the array. + * + * \param[out] str Pointer to an array of where the string is copied. + * + * \param[in] num Maximum number of characters including the null + * character. + * + * \param[out] len If len is not null and fgets is successful, the + * length of the string is returned. + * + * \return str if successful. If end-of-file is encountered and no + * characters have been read into the array, the contents of the array + * remain unchanged and a null pointer is returned. If a read error + * occurs during the operation, the array contents are indeterminate + * and a null pointer is returned. + */ + char* fgets(char* str, int num, size_t* len = 0); + //---------------------------------------------------------------------------- + /** Open a stream. + * + * Open a file and associates the stream with it. + * + * \param[in] filename name of the file to be opened. + * + * \param[in] mode a string that indicates the open mode. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
"r" or "rb"Open a file for reading. The file must exist.
"w" or "wb"Truncate an existing to zero length or create an empty file + * for writing.
"wx" or "wbx"Create a file for writing. Fails if the file already exists.
"a" or "ab"Append; open or create file for writing at end-of-file.
"r+" or "rb+" or "r+b"Open a file for update (reading and writing).
"w+" or "w+b" or "wb+"Truncate an existing to zero length or create a file for update.
"w+x" or "w+bx" or "wb+x"Create a file for update. Fails if the file already exists.
"a+" or "a+b" or "ab+"Append; open or create a file for update, writing at end-of-file.
+ * The character 'b' shall have no effect, but is allowed for ISO C + * standard conformance. + * + * Opening a file with append mode causes all subsequent writes to the + * file to be forced to the then current end-of-file, regardless of + * intervening calls to the fseek function. + * + * When a file is opened with update mode, both input and output may be + * performed on the associated stream. However, output shall not be + * directly followed by input without an intervening call to the fflush + * function or to a file positioning function (fseek, or rewind), and + * input shall not be directly followed by output without an intervening + * call to a file positioning function, unless the input operation + * encounters endof-file. + * + * \return true for success or false for failure. + */ + bool fopen(const char* filename, const char * mode); + //---------------------------------------------------------------------------- + /** Write a byte to a stream. + * + * \param[in] c the byte to be written (converted to an unsigned char). + * + * \return Upon successful completion, fputc() returns the value it + * has written. Otherwise, it returns EOF and sets the error indicator for + * the stream. + */ + int fputc(int c) {return m_w-- == 0 ? flushPut(c) : *m_p++ = c;} + //---------------------------------------------------------------------------- + /** Write a string to a stream. + * + * \param[in] str a pointer to the string to be written. + * + * \return for success, fputs() returns a non-negative + * number. Otherwise, it returns EOF and sets the error indicator for + * the stream. + */ + int fputs(const char* str); + //---------------------------------------------------------------------------- + /** Write a string stored in flash. + * + * \param[in] str string to be written. + * + * \return for success, fputs() returns a non-negative + * number. Otherwise, it returns EOF and sets the error indicator for + * the stream. + */ + int fputs_P(PGM_P str); + //---------------------------------------------------------------------------- + /** Binary input. + * + * Reads an array of up to count elements, each one with a size of size + * bytes. + * \param[out] ptr pointer to area of at least (size*count) bytes where + * the data will be stored. + * + * \param[in] size the size, in bytes, of each element to be read. + * + * \param[in] count the number of elements to be read. + * + * \return number of elements successfully read, which may be less than + * count if a read error or end-of-file is encountered. If size or count + * is zero, fread returns zero and the contents of the array and the + * state of the stream remain unchanged. + */ + size_t fread(void* ptr, size_t size, size_t count); + //---------------------------------------------------------------------------- + /** Set the file position for the stream. + * + * \param[in] offset number of offset from the origin. + * + * \param[in] origin position used as reference for the offset. It is + * specified by one of the following constants. + * + * SEEK_SET - Beginning of file. + * + * SEEK_CUR - Current position of the file pointer. + * + * SEEK_END - End of file. + * + * \return zero for success. Otherwise, it returns non-zero and sets the + * error indicator for the stream. + */ + int fseek(int32_t offset, int origin); + //---------------------------------------------------------------------------- + /** Get the current position in a stream. + * + * \return If successful, ftell return the current value of the position + * indicator. On failure, ftell returns −1L. + */ + int32_t ftell(); + //---------------------------------------------------------------------------- + /** Binary output. + * + * Writes an array of up to count elements, each one with a size of size + * bytes. + * \param[in] ptr pointer to (size*count) bytes of data to be written. + * + * \param[in] size the size, in bytes, of each element to be written. + * + * \param[in] count the number of elements to be written. + * + * \return number of elements successfully written. if this number is + * less than count, an error has occured. If size or count is zero, + * fwrite returns zero. + */ + size_t fwrite(const void * ptr, size_t size, size_t count); + //---------------------------------------------------------------------------- + /** Get a byte from the stream. + * + * getc and fgetc are equivalent but getc is inline so it is faster but + * require more flash memory. + * + * \return If the end-of-file indicator for the stream is set, or if the + * stream is at end-of-file, the end-of-file indicator for the stream is + * set and the fgetc function returns EOF. Otherwise, the fgetc function + * returns the next character from the input stream. + */ + inline __attribute__((always_inline)) + int getc() {return m_r-- == 0 ? fillGet() : *m_p++;} + //---------------------------------------------------------------------------- + /** Write a byte to a stream. + * + * putc and fputc are equivalent but putc is inline so it is faster but + * require more flash memory. + * + * \param[in] c the byte to be written (converted to an unsigned char). + * + * \return Upon successful completion, fputc() returns the value it + * has written. Otherwise, it returns EOF and sets the error indicator for + * the stream. + */ + inline __attribute__((always_inline)) + int putc(int c) {return m_w-- == 0 ? flushPut(c) : *m_p++ = c;} + //---------------------------------------------------------------------------- + /** Write a CR/LF. + * + * \return two, the number of bytes written, for success or -1 for failure. + */ + inline __attribute__((always_inline)) + int putCRLF() { + if (m_w < 2) { + if (!flushBuf()) return -1; + } + *m_p++ = '\r'; + *m_p++ = '\n'; + m_w -= 2; + return 2; + } + //---------------------------------------------------------------------------- + /** Write a character. + * \param[in] c the character to write. + * \return the number of bytes written. + */ + size_t print(char c) { + return putc(c) < 0 ? 0 : 1; + } + //---------------------------------------------------------------------------- + /** Write a string. + * + * \param[in] str the string to be written. + * + * \return the number of bytes written. + */ + size_t print(const char* str) { + int n = fputs(str); + return n < 0 ? 0 : n; + } + //---------------------------------------------------------------------------- + /** Print a string stored in flash memory. + * + * \param[in] str the string to print. + * + * \return the number of bytes written. + */ + size_t print(const __FlashStringHelper *str); + //---------------------------------------------------------------------------- + /** Print a floating point number. + * + * \param[in] prec Number of digits after decimal point. + * + * \param[in] val the number to be printed. + * + * \return the number of bytes written. + */ + size_t print(double val, uint8_t prec = 2) { + return print(static_cast(val), prec); + } + //---------------------------------------------------------------------------- + /** Print a floating point number. + * + * \param[in] prec Number of digits after decimal point. + * + * \param[in] val the number to be printed. + * + * \return the number of bytes written. + */ + size_t print(float val, uint8_t prec = 2) { + int n = printDec(val, prec); + return n > 0 ? n : 0; + } + //---------------------------------------------------------------------------- + /** Print a number. + * + * \param[in] val the number to be printed. + * + * \return the number of bytes written. + */ + template + size_t print(T val) { + int n = printDec(val); + return n > 0 ? n : 0; + } + //---------------------------------------------------------------------------- + /** Write a CR/LF. + * + * \return two, the number of bytes written, for success or zero for failure. + */ + size_t println() { + return putCRLF() > 0 ? 2 : 0; + } + //---------------------------------------------------------------------------- + /** Print a floating point number followed by CR/LF. + * + * \param[in] val the number to be printed. + * + * \param[in] prec Number of digits after decimal point. + * + * \return the number of bytes written. + */ + size_t println(double val, uint8_t prec = 2) { + return println(static_cast(val), prec); + } + //---------------------------------------------------------------------------- + /** Print a floating point number followed by CR/LF. + * + * \param[in] val the number to be printed. + * + * \param[in] prec Number of digits after decimal point. + * + * \return the number of bytes written. + */ + size_t println(float val, uint8_t prec = 2) { + int n = printDec(val, prec); + return n > 0 && putCRLF() > 0 ? n + 2 : 0; + } + //---------------------------------------------------------------------------- + /** Print an item followed by CR/LF + * + * \param[in] val the item to be printed. + * + * \return the number of bytes written. + */ + template + size_t println(T val) { + int n = print(val); + return putCRLF() > 0 ? n + 2 : 0; + } + //---------------------------------------------------------------------------- + /** Print a char as a number. + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(char n) { + if (CHAR_MIN == 0) { + return printDec((unsigned char)n); + } else { + return printDec((signed char)n); + } + } + //---------------------------------------------------------------------------- + /** print a signed 8-bit integer + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(signed char n); + //---------------------------------------------------------------------------- + /** Print an unsigned 8-bit number. + * \param[in] n number to be print. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(unsigned char n) { + return printDec((uint16_t)n); + } + //---------------------------------------------------------------------------- + /** Print a int16_t + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(int16_t n); + //---------------------------------------------------------------------------- + /** print a uint16_t. + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(uint16_t n); + //---------------------------------------------------------------------------- + /** Print a signed 32-bit integer. + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(int32_t n); + //---------------------------------------------------------------------------- + /** Write an unsigned 32-bit number. + * \param[in] n number to be printed. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(uint32_t n); + //---------------------------------------------------------------------------- + /** Print a double. + * \param[in] value The number to be printed. + * \param[in] prec Number of digits after decimal point. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(double value, uint8_t prec) { + return printDec(static_cast(value), prec); + } + //---------------------------------------------------------------------------- + /** Print a float. + * \param[in] value The number to be printed. + * \param[in] prec Number of digits after decimal point. + * \return The number of bytes written or -1 if an error occurs. + */ + int printDec(float value, uint8_t prec); + //---------------------------------------------------------------------------- +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. + * \param[in] prec Number of digits after decimal point. + * \return The number of bytes written or -1 if an error occurs. + */ + int printField(double value, char term, uint8_t prec = 2) { + return printField(static_cast(value), term, prec) > 0; + } + //---------------------------------------------------------------------------- +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. + * \param[in] prec Number of digits after decimal point. + * \return The number of bytes written or -1 if an error occurs. + */ + int printField(float value, char term, uint8_t prec = 2) { + int rtn = printDec(value, prec); + return rtn < 0 || putc(term) < 0 ? -1 : rtn + 1; + } + //---------------------------------------------------------------------------- +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] term The field terminator. + * \return The number of bytes written or -1 if an error occurs. + */ + template + int printField(T value, char term) { + int rtn = printDec(value); + return rtn < 0 || putc(term) < 0 ? -1 : rtn + 1; + } + //---------------------------------------------------------------------------- + /** Print HEX + * \param[in] n number to be printed as HEX. + * + * \return The number of bytes written or -1 if an error occurs. + */ + int printHex(uint32_t n); + //---------------------------------------------------------------------------- + /** Print HEX with CRLF + * \param[in] n number to be printed as HEX. + * + * \return The number of bytes written or -1 if an error occurs. + */ + int printHexln(uint32_t n) { + int rtn = printHex(n); + return rtn < 0 || putCRLF() != 2 ? -1 : rtn + 2; + } + //---------------------------------------------------------------------------- + /** Set position of a stream to the beginning. + * + * The rewind function sets the file position to the beginning of the + * file. It is equivalent to fseek(0L, SEEK_SET) except that the error + * indicator for the stream is also cleared. + * + * \return true for success or false for failure. + */ + bool rewind(); + //---------------------------------------------------------------------------- + /** Push a byte back into an input stream. + * + * \param[in] c the byte (converted to an unsigned char) to be pushed back. + * + * One character of pushback is guaranteed. If the ungetc function is + * called too many times without an intervening read or file positioning + * operation on that stream, the operation may fail. + * + * A successful intervening call to a file positioning function (fseek, + * fsetpos, or rewind) discards any pushed-back characters for the stream. + * + * \return Upon successful completion, ungetc() returns the byte pushed + * back after conversion. Otherwise it returns EOF. + */ + int ungetc(int c); + //============================================================================ + private: + bool fillBuf(); + int fillGet(); + bool flushBuf(); + int flushPut(uint8_t c); + char* fmtSpace(uint8_t len); + int write(const void* buf, size_t count); + //---------------------------------------------------------------------------- + // F_SRD and F_WR are never simultaneously asserted + static const uint8_t F_SRD = 0x01; // OK to read + static const uint8_t F_SWR = 0x02; // OK to write + static const uint8_t F_SRW = 0x04; // open for reading & writing + static const uint8_t F_EOF = 0x10; // found EOF + static const uint8_t F_ERR = 0x20; // found error + //---------------------------------------------------------------------------- + uint8_t m_flags; + uint8_t* m_p; + uint8_t m_r; + uint8_t m_w; + uint8_t m_buf[STREAM_BUF_SIZE]; +}; +//------------------------------------------------------------------------------ +#endif // StdioStream_h diff --git a/libs/SdFatBeta20120108/SdFat/bufstream.h b/libs/SdFat-master/SdFat/bufstream.h similarity index 74% rename from libs/SdFatBeta20120108/SdFat/bufstream.h rename to libs/SdFat-master/SdFat/bufstream.h index c6e0cc3..2c288c7 100755 --- a/libs/SdFatBeta20120108/SdFat/bufstream.h +++ b/libs/SdFat-master/SdFat/bufstream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -32,7 +32,7 @@ class ibufstream : public istream { public: /** Constructor */ - ibufstream() : buf_(0), len_(0) {} + ibufstream() : m_buf(0), m_len(0) {} /** Constructor * \param[in] str pointer to string to be parsed * Warning: The string will not be copied so must stay in scope. @@ -45,40 +45,41 @@ class ibufstream : public istream { * Warning: The string will not be copied so must stay in scope. */ void init(const char* str) { - buf_ = str; - len_ = strlen(buf_); - pos_ = 0; + m_buf = str; + m_len = strlen(m_buf); + m_pos = 0; clear(); } + protected: /// @cond SHOW_PROTECTED int16_t getch() { - if (pos_ < len_) return buf_[pos_++]; + if (m_pos < m_len) return m_buf[m_pos++]; setstate(eofbit); return -1; } - void getpos(fpos_t *pos) { - pos->position = pos_; + void getpos(FatPos_t *pos) { + pos->position = m_pos; } bool seekoff(off_type off, seekdir way) {return false;} bool seekpos(pos_type pos) { - if (pos < len_) { - pos_ = pos; + if (pos < m_len) { + m_pos = pos; return true; } return false; } - void setpos(fpos_t *pos) { - pos_ = pos->position; + void setpos(FatPos_t *pos) { + m_pos = pos->position; } pos_type tellpos() { - return pos_; + return m_pos; } /// @endcond private: - const char* buf_; - uint16_t len_; - uint16_t pos_; + const char* m_buf; + size_t m_len; + size_t m_pos; }; //============================================================================== /** @@ -88,54 +89,58 @@ class ibufstream : public istream { class obufstream : public ostream { public: /** constructor */ - obufstream() : in_(0) {} + obufstream() : m_in(0) {} /** Constructor * \param[in] buf buffer for formatted string * \param[in] size buffer size */ - obufstream(char *buf, uint16_t size) { + obufstream(char *buf, size_t size) { init(buf, size); } /** Initialize an obufstream * \param[in] buf buffer for formatted string * \param[in] size buffer size */ - void init(char *buf, uint16_t size) { - buf_ = buf; + void init(char *buf, size_t size) { + m_buf = buf; buf[0] = '\0'; - size_ = size; - in_ = 0; + m_size = size; + m_in = 0; } /** \return a pointer to the buffer */ - char* buf() {return buf_;} + char* buf() {return m_buf;} /** \return the length of the formatted string */ - uint16_t length() {return in_;} + size_t length() {return m_in;} + protected: /// @cond SHOW_PROTECTED void putch(char c) { - if (in_ >= (size_ - 1)) { + if (m_in >= (m_size - 1)) { setstate(badbit); return; } - buf_[in_++] = c; - buf_[in_]= '\0'; + m_buf[m_in++] = c; + m_buf[m_in]= '\0'; + } + void putstr(const char *str) { + while (*str) putch(*str++); } bool seekoff(off_type off, seekdir way) {return false;} bool seekpos(pos_type pos) { - if (pos > in_) return false; - in_ = pos; - buf_[in_] = '\0'; + if (pos > m_in) return false; + m_in = pos; + m_buf[m_in] = '\0'; return true; } bool sync() {return true;} pos_type tellpos() { - return in_; + return m_in; } /// @endcond private: - char *buf_; - uint16_t size_; - uint16_t in_; + char *m_buf; + size_t m_size; + size_t m_in; }; #endif // bufstream_h diff --git a/libs/SdFatBeta20120108/SdFat/examples/AnalogLogger/AnalogLogger.pde b/libs/SdFat-master/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino similarity index 92% rename from libs/SdFatBeta20120108/SdFat/examples/AnalogLogger/AnalogLogger.pde rename to libs/SdFat-master/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino index a235ed1..ae25f84 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/AnalogLogger/AnalogLogger.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino @@ -3,7 +3,7 @@ #include #include // define FreeRam() -#define CHIP_SELECT SS_PIN // SD chip select pin +#define SD_CHIP_SELECT SS // SD chip select pin #define USE_DS1307 0 // set nonzero to use DS1307 RTC #define LOG_INTERVAL 1000 // mills between entries #define SENSOR_COUNT 3 // number of analog pins to log @@ -64,13 +64,15 @@ ostream& operator << (ostream& os, DateTime& dt) { //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); - + while (!Serial){} // wait for Leonardo + // pstr stores strings in flash to save RAM cout << endl << pstr("FreeRam: ") << FreeRam() << endl; #if WAIT_TO_START cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem #endif // WAIT_TO_START #if USE_DS1307 @@ -85,9 +87,7 @@ void setup() { #endif // USE_DS1307 // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - // if SD chip select is not SS, the second argument to init is CS pin number - if (!sd.init(SPI_HALF_SPEED, CHIP_SELECT)) sd.initErrorHalt(); + if (!sd.begin(SD_CHIP_SELECT, SPI_HALF_SPEED)) sd.initErrorHalt(); // create a new file in root, the current working directory char name[] = "LOGGER00.CSV"; @@ -102,7 +102,8 @@ void setup() { if (!logfile.is_open()) error("file.open"); cout << pstr("Logging to: ") << name << endl; - + cout << pstr("Type any character to stop\n\n"); + // format header in buffer obufstream bout(buf, sizeof(buf)); @@ -163,4 +164,9 @@ void loop() { // don't log two points in the same millis if (m == millis()) delay(1); + + if (!Serial.available()) return; + logfile.close(); + cout << pstr("Done!"); + while (1); } diff --git a/libs/SdFatBeta20120108/SdFat/examples/HelloWorld/HelloWorld.pde b/libs/SdFat-master/SdFat/examples/#attic/HelloWorld/HelloWorld.ino similarity index 73% rename from libs/SdFatBeta20120108/SdFat/examples/HelloWorld/HelloWorld.pde rename to libs/SdFat-master/SdFat/examples/#attic/HelloWorld/HelloWorld.ino index b25e3b9..50b3368 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/HelloWorld/HelloWorld.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/HelloWorld/HelloWorld.ino @@ -5,6 +5,10 @@ ArduinoOutStream cout(Serial); void setup() { Serial.begin(9600); + + while (!Serial) {} // wait for Leonardo + delay(2000); + cout << "Hello, World!\n"; } diff --git a/libs/SdFat-master/SdFat/examples/#attic/MiniSerial/MiniSerial.ino b/libs/SdFat-master/SdFat/examples/#attic/MiniSerial/MiniSerial.ino new file mode 100755 index 0000000..378e937 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/#attic/MiniSerial/MiniSerial.ino @@ -0,0 +1,18 @@ +// This example illustrates use of SdFat's +// minimal unbuffered AVR Serial support. +// +// This is useful for debug and saves RAM +// Will not work on Due, Leonardo, or Teensy +#include +#include +#ifndef UDR0 +#error no AVR serial port0 +#endif +void setup() { + MiniSerial.begin(9600); + MiniSerial.println(FreeRam()); + MiniSerial.println(F("Type any Character")); + while(MiniSerial.read() < 0) {} + MiniSerial.println(F("Done")); +} +void loop() {} diff --git a/libs/SdFat-master/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino b/libs/SdFat-master/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino new file mode 100755 index 0000000..a50f7a3 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino @@ -0,0 +1,113 @@ +/* + * This sketch is a simple Print benchmark. + */ +#include +#include + +// SD chip select pin +const uint8_t chipSelect = SS; + +// number of lines to print +const uint16_t N_PRINT = 20000; + + +// test file +File file; + +//------------------------------------------------------------------------------ +void error(char* s) { + Serial.println(s); + while(1); +} +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + while (!Serial) { + // wait for Leonardo + } +} +//------------------------------------------------------------------------------ +void loop() { + uint32_t maxLatency; + uint32_t minLatency; + uint32_t totalLatency; + + while (Serial.read() >= 0) { + } + // pstr stores strings in flash to save RAM + Serial.println(F("Type any character to start")); + while (Serial.read() <= 0) { + } + delay(400); // catch Due reset problem + + + // initialize the SD card + + if (!SD.begin(chipSelect)) error("begin"); + + + Serial.println(F("Starting print test. Please wait.\n")); + + // do write test + for (int test = 0; test < 2; test++) { + file = SD.open("BENCH.TXT", FILE_WRITE); + + if (!file) error("open failed"); + switch(test) { + case 0: + Serial.println(F("Test of println(uint16_t)")); + break; + + case 1: + Serial.println(F("Test of println(double)")); + break; + } + maxLatency = 0; + minLatency = 999999; + totalLatency = 0; + uint32_t t = millis(); + for (uint16_t i = 0; i < N_PRINT; i++) { + uint32_t m = micros(); + + switch(test) { + case 0: + file.println(i); + break; + + case 1: + file.println((double)0.01*i); + break; + } + +// if (file.writeError) { +// error("write failed"); +// } + m = micros() - m; + if (maxLatency < m) maxLatency = m; + if (minLatency > m) minLatency = m; + totalLatency += m; + } + file.flush(); + t = millis() - t; + double s = file.size(); + Serial.print(F("Time ")); + Serial.print(0.001*t); + Serial.println(F(" sec")); + Serial.print(F("File size ")); + Serial.print(0.001*s); + Serial.print(F(" KB\n")); + Serial.print(F("Write ")); + Serial.print(s/t); + Serial.print(F(" KB/sec\n")); + Serial.print(F("Maximum latency: ")); + Serial.print(maxLatency); + Serial.print(F(" usec, Minimum Latency: ")); + Serial.print(minLatency); + Serial.print(F(" usec, Avg Latency: ")); + Serial.print(totalLatency/N_PRINT); + Serial.println(F(" usec\n")); + SD.remove("BENCH.TXT"); + } + file.close(); + Serial.println(F("Done!\n")); +} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/SD_Size/SD_Size.pde b/libs/SdFat-master/SdFat/examples/#attic/SD_Size/SD_Size.ino similarity index 85% rename from libs/SdFatBeta20120108/SdFat/examples/SD_Size/SD_Size.pde rename to libs/SdFat-master/SdFat/examples/#attic/SD_Size/SD_Size.ino index be842ab..6d33a7a 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/SD_Size/SD_Size.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/SD_Size/SD_Size.ino @@ -2,12 +2,14 @@ * Sketch to compare size of Arduino SD library with SdFat V2. * See SdFatSize.pde for SdFat sketch. */ +#include #include File file; //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo if (!SD.begin()) { Serial.println("begin failed"); @@ -18,6 +20,7 @@ void setup() { file.println("Hello"); file.close(); + Serial.println("Done"); } //------------------------------------------------------------------------------ void loop() {} diff --git a/libs/SdFatBeta20120108/SdFat/examples/SdFatSize/SdFatSize.pde b/libs/SdFat-master/SdFat/examples/#attic/SdFatSize/SdFatSize.ino similarity index 79% rename from libs/SdFatBeta20120108/SdFat/examples/SdFatSize/SdFatSize.pde rename to libs/SdFat-master/SdFat/examples/#attic/SdFatSize/SdFatSize.ino index 86079c6..da73d63 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/SdFatSize/SdFatSize.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/SdFatSize/SdFatSize.ino @@ -1,6 +1,7 @@ /* * Sketch to compare size of SdFat V2 with Arduino SD library. * See SD_Size.pde for Arduino SD sketch. + * */ #include @@ -10,9 +11,10 @@ SdFile file; //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo - if (!sd.init()) { - Serial.println("init failed"); + if (!sd.begin()) { + Serial.println("begin failed"); return; } file.open("SIZE_TST.TXT", O_RDWR | O_CREAT | O_AT_END); @@ -20,6 +22,7 @@ void setup() { file.println("Hello"); file.close(); + Serial.println("Done"); } //------------------------------------------------------------------------------ void loop() {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatMakeDir/SdFatMakeDir.pde b/libs/SdFat-master/SdFat/examples/#attic/TestMkdir/TestMkdir.ino similarity index 93% rename from libs/SdFatBeta20120108/extra/examplesV1/SdFatMakeDir/SdFatMakeDir.pde rename to libs/SdFat-master/SdFat/examples/#attic/TestMkdir/TestMkdir.ino index f4e2616..f5e57d5 100755 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatMakeDir/SdFatMakeDir.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/TestMkdir/TestMkdir.ino @@ -13,6 +13,8 @@ #include #include +const uint8_t SD_CHIP_SELECT = SS; + SdFat sd; // store error strings in flash to save RAM @@ -100,12 +102,14 @@ void dirAllocTest(SdBaseFile* dir) { void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo PgmPrintln("Type any character to start"); - while (!Serial.available()); + while (Serial.read() <= 0) {} + delay(200); // Catch Due reset problem // initialize the SD card at SPI_FULL_SPEED for best performance. // try SPI_HALF_SPEED if bus errors occur. - if (!sd.init(SPI_FULL_SPEED)) sd.initErrorHalt(); + if (!sd.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) sd.initErrorHalt(); // write files to root if FAT32 if (sd.vol()->fatType() == 32) { diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRmDir/SdFatRmDir.pde b/libs/SdFat-master/SdFat/examples/#attic/TestRmdir/TestRmdir.ino similarity index 90% rename from libs/SdFatBeta20120108/extra/examplesV1/SdFatRmDir/SdFatRmDir.pde rename to libs/SdFat-master/SdFat/examples/#attic/TestRmdir/TestRmdir.ino index 00a6c44..11d2be6 100755 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRmDir/SdFatRmDir.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/TestRmdir/TestRmdir.ino @@ -9,6 +9,8 @@ #include #include +const uint8_t SD_CHIP_SELECT = SS; + SdFat sd; // store error strings in flash to save RAM @@ -53,12 +55,14 @@ void deleteFiles(SdBaseFile* dir) { void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo PgmPrintln("Type any character to start"); - while (!Serial.available()); + while (Serial.read() <= 0) {} + delay(200); // Catch Due reset problem // initialize the SD card at SPI_FULL_SPEED for best performance. // try SPI_HALF_SPEED if bus errors occur. - if (!sd.init(SPI_FULL_SPEED)) sd.initErrorHalt(); + if (!sd.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) sd.initErrorHalt(); // delete files in root if FAT32 diff --git a/libs/SdFatBeta20120108/SdFat/examples/append/append.pde b/libs/SdFat-master/SdFat/examples/#attic/append/append.ino similarity index 88% rename from libs/SdFatBeta20120108/SdFat/examples/append/append.pde rename to libs/SdFat-master/SdFat/examples/#attic/append/append.ino index cee1ce1..d97d010 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/append/append.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/append/append.ino @@ -8,7 +8,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; @@ -24,17 +24,19 @@ void setup() { char name[] = "APPEND.TXT"; Serial.begin(9600); + while (!Serial) {} // wait for Leonardo // pstr() stores strings in flash to save RAM cout << endl << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // Catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); cout << pstr("Appending to: ") << name; - + for (uint8_t i = 0; i < 100; i++) { // open stream for append ofstream sdout(name, ios::out | ios::app); diff --git a/libs/SdFatBeta20120108/SdFat/examples/average/average.pde b/libs/SdFat-master/SdFat/examples/#attic/average/average.ino similarity index 88% rename from libs/SdFatBeta20120108/SdFat/examples/average/average.pde rename to libs/SdFat-master/SdFat/examples/#attic/average/average.ino index fd28783..64a0efe 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/average/average.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/average/average.ino @@ -4,7 +4,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // object for the SD file system SdFat sd; @@ -22,7 +22,7 @@ void writeTestFile() { } if (!sdout) sd.errorHalt("sdout failed"); - // file will be closed by destructor when sdout goes out of scope + sdout.close(); } //------------------------------------------------------------------------------ void calcAverage() { @@ -49,14 +49,16 @@ void calcAverage() { //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo // pstr stores strings in flash to save RAM cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // Catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // write the test file writeTestFile(); diff --git a/libs/SdFat-master/SdFat/examples/#attic/benchSD/benchSD.ino b/libs/SdFat-master/SdFat/examples/#attic/benchSD/benchSD.ino new file mode 100755 index 0000000..88a3dfa --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/#attic/benchSD/benchSD.ino @@ -0,0 +1,133 @@ +/* + * This sketch is a simple binary write/read benchmark + * for the standard Arduino SD.h library. + */ +#include +#include + + +// SD chip select pin +const uint8_t chipSelect = SS; + +#define FILE_SIZE_MB 5 +#define FILE_SIZE (1000000UL*FILE_SIZE_MB) +#define BUF_SIZE 100 + +uint8_t buf[BUF_SIZE]; + + +// test file +File file; + +//------------------------------------------------------------------------------ +void error(char* s) { + Serial.println(s); + while(1); +} +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + while (!Serial){} // wait for Leonardo +} +//------------------------------------------------------------------------------ +void loop() { + uint32_t maxLatency; + uint32_t minLatency; + uint32_t totalLatency; + + // discard any input + while (Serial.read() >= 0) {} + + // pstr stores strings in flash to save RAM + Serial.println(F("Type any character to start")); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + + if (!SD.begin(chipSelect)) error("begin"); + + // open or create file - truncate existing file. + file = SD.open("BENCH.DAT", FILE_WRITE | O_TRUNC); +// file = SD.open("BENCH.DAT", O_CREAT | O_TRUNC | O_CREAT); + if (!file) { + error("open failed"); + } + + // fill buf with known data + for (uint16_t i = 0; i < (BUF_SIZE-2); i++) { + buf[i] = 'A' + (i % 26); + } + buf[BUF_SIZE-2] = '\r'; + buf[BUF_SIZE-1] = '\n'; + + Serial.print(F("File size ")); + Serial.print(FILE_SIZE_MB); + Serial.println(F("MB")); + Serial.print(F("Buffer size ")); + Serial.print(BUF_SIZE); + Serial.println(F(" bytes")); + Serial.println(F("Starting write test. Please wait up to a minute")); + + // do write test + uint32_t n = FILE_SIZE/sizeof(buf); + maxLatency = 0; + minLatency = 999999; + totalLatency = 0; + uint32_t t = millis(); + for (uint32_t i = 0; i < n; i++) { + uint32_t m = micros(); + if (file.write(buf, sizeof(buf)) != sizeof(buf)) { + error("write failed"); + } + m = micros() - m; + if (maxLatency < m) maxLatency = m; + if (minLatency > m) minLatency = m; + totalLatency += m; + } + file.flush(); + t = millis() - t; + double s = file.size(); + Serial.print(F("Write ")); + Serial.print(s/t); + Serial.print(F(" KB/sec\n")); + Serial.print(F("Maximum latency: ")); + Serial.print(maxLatency); + Serial.print(F(" usec, Minimum Latency: ")); + Serial.print(minLatency); + Serial.print(F(" usec, Avg Latency: ")); + Serial.print(totalLatency/n); + Serial.print(F(" usec\n\n")); + Serial.println(F("Starting read test. Please wait up to a minute")); + // do read test + file.seek(0); + maxLatency = 0; + minLatency = 99999; + totalLatency = 0; + t = millis(); + for (uint32_t i = 0; i < n; i++) { + buf[BUF_SIZE-1] = 0; + uint32_t m = micros(); + if (file.read(buf, sizeof(buf)) != sizeof(buf)) { + error("read failed"); + } + m = micros() - m; + if (maxLatency < m) maxLatency = m; + if (minLatency > m) minLatency = m; + totalLatency += m; + if (buf[BUF_SIZE-1] != '\n') { + error("data check"); + } + } + t = millis() - t; + Serial.print(F("Read ")); + Serial.print(s/t); + Serial.print(F(" KB/sec\n")); + Serial.print(F("Maximum latency: ")); + Serial.print(maxLatency); + Serial.print(F(" usec, Minimum Latency: ")); + Serial.print(minLatency); + Serial.print(F(" usec, Avg Latency: ")); + Serial.print(totalLatency/n); + Serial.print(F(" usec\n\n")); + Serial.print(F("Done\n\n")); + file.close(); +} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/bufstream/bufstream.pde b/libs/SdFat-master/SdFat/examples/#attic/bufstream/bufstream.ino similarity index 91% rename from libs/SdFatBeta20120108/SdFat/examples/bufstream/bufstream.pde rename to libs/SdFat-master/SdFat/examples/#attic/bufstream/bufstream.ino index 084ded8..5eb28c1 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/bufstream/bufstream.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/bufstream/bufstream.ino @@ -11,7 +11,9 @@ void setup() { int i, j, k; // values from parsed line Serial.begin(9600); - + while (!Serial) {} // wait for Leonardo + delay(2000); + // initialize input string ibufstream bin("123 456 789"); diff --git a/libs/SdFatBeta20120108/SdFat/examples/eventlog/eventlog.pde b/libs/SdFat-master/SdFat/examples/#attic/eventlog/eventlog.ino similarity index 84% rename from libs/SdFatBeta20120108/SdFat/examples/eventlog/eventlog.pde rename to libs/SdFat-master/SdFat/examples/#attic/eventlog/eventlog.ino index 1cff4bb..4c3262f 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/eventlog/eventlog.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/eventlog/eventlog.ino @@ -4,7 +4,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; @@ -28,19 +28,21 @@ void logEvent(const char *msg) { // check for errors if (!sdlog) sd.errorHalt("append failed"); - // file will be closed when sdlog goes out of scope + sdlog.close(); } //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo // pstr stores strings in flash to save RAM cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // append a line to the logfile logEvent("Another line for the logfile"); diff --git a/libs/SdFat-master/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino b/libs/SdFat-master/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino new file mode 100755 index 0000000..57760b9 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino @@ -0,0 +1,91 @@ +// Demo of rewriting a line read by fgets +#include + +// SD card chip select pin +const uint8_t chipSelect = SS; + +// file system +SdFat sd; + +// print stream +ArduinoOutStream cout(Serial); +//------------------------------------------------------------------------------ +// store error strings in flash memory +#define error(s) sd.errorHalt_P(PSTR(s)) +//------------------------------------------------------------------------------ +void demoFgets() { + char line[25]; + int c; + uint32_t pos; + + // open test file + SdFile rdfile("FGETS.TXT", O_RDWR); + + // check for open error + if (!rdfile.isOpen()) error("demoFgets"); + + // list file + cout << pstr("-----Before Rewrite\r\n"); + while ((c = rdfile.read()) >= 0) Serial.write(c); + + rdfile.rewind(); + // read lines from the file to get position + while (1) { + pos = rdfile.curPosition(); + if (rdfile.fgets(line, sizeof(line)) < 0) { + error("Line not found"); + } + // find line that contains "Line C" + if (strstr(line, "Line C"))break; + } + + // rewrite line with 'C' + if (!rdfile.seekSet(pos))error("seekSet"); + rdfile.println("Line R"); + rdfile.rewind(); + + // list file + cout << pstr("\r\n-----After Rewrite\r\n"); + while ((c = rdfile.read()) >= 0) Serial.write(c); + + // close so rewrite is not lost + rdfile.close(); +} +//------------------------------------------------------------------------------ +void makeTestFile() { + // create or open test file + SdFile wrfile("FGETS.TXT", O_WRITE | O_CREAT | O_TRUNC); + + // check for open error + if (!wrfile.isOpen()) error("MakeTestFile"); + + // write test file + wrfile.write_P(PSTR( + "Line A\r\n" + "Line B\r\n" + "Line C\r\n" + "Line D\r\n" + "Line E\r\n" + )); + wrfile.close(); +} +//------------------------------------------------------------------------------ +void setup(void) { + Serial.begin(9600); + while (!Serial){} // wait for Leonardo + + cout << pstr("Type any character to start\n"); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + + // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with + // breadboards. use SPI_FULL_SPEED for better performance. + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); + + makeTestFile(); + + demoFgets(); + + cout << pstr("\nDone\n"); +} +void loop(void) {} diff --git a/libs/SdFatBeta20120108/SdFat/examples/readlog/readlog.pde b/libs/SdFat-master/SdFat/examples/#attic/readlog/readlog.ino similarity index 81% rename from libs/SdFatBeta20120108/SdFat/examples/readlog/readlog.pde rename to libs/SdFat-master/SdFat/examples/#attic/readlog/readlog.ino index 3fef6d6..fcdbde9 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/readlog/readlog.pde +++ b/libs/SdFat-master/SdFat/examples/#attic/readlog/readlog.ino @@ -5,7 +5,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; @@ -14,12 +14,13 @@ SdFat sd; ArduinoOutStream cout(Serial); //------------------------------------------------------------------------------ void setup() { - char c; + int c; Serial.begin(9600); + while (!Serial) {} // wait for Leonardo // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // set current working directory if (!sd.chdir("LOGS/2011/JAN/")) { @@ -31,9 +32,9 @@ void setup() { if (!file.is_open()) sd.errorHalt("open failed"); // copy the file to Serial - while ((c = file.get()) >= 0) cout << c; + while ((c = file.get()) >= 0) cout << (char)c; cout << "Done" << endl; } //------------------------------------------------------------------------------ -void loop() {} +void loop() {} \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/#attic/readme.txt b/libs/SdFat-master/SdFat/examples/#attic/readme.txt new file mode 100755 index 0000000..ec49791 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/#attic/readme.txt @@ -0,0 +1,30 @@ +Old and debug examples. + +AnalogLogger - A simple data logger for one or more analog pins. + +append - This sketch creates a large file by successive + open/write/close operations. + +average - A demonstration of parsing floating point numbers. + +benchSD - A read/write benchmark for the standard Arduino SD.h library. + +bufstream - ibufsteam to parse a line and obufstream to format a line. + +eventlog - Append a line to a file - demo of pathnames and streams. + +fgetsRewrite - Demo of rewriting a line read by fgets. + +HelloWorld - Create a serial output stream. + +MiniSerial - SdFat minimal serial support for debug. + +PrintBenchmarkSD - Bench mark SD.h print. + +readlog - Read file. Demo of pathnames and current working directory. + +SD_Size - Determine flash used by SD.h example. + +SdFatSize - Determine flash used by SdFat. + +TestMkdirRmdir - Test mkdir, rmdir, and directory management. \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h b/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h new file mode 100755 index 0000000..da4d448 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h @@ -0,0 +1,39 @@ +#ifndef AnalogBinLogger_h +#define AnalogBinLogger_h +//------------------------------------------------------------------------------ +// First block of file. +struct metadata_t { + unsigned long adcFrequency; // ADC clock frequency + unsigned long cpuFrequency; // CPU clock frequency + unsigned long sampleInterval; // Sample interval in CPU cycles. + unsigned long recordEightBits; // Size of ADC values, nonzero for 8-bits. + unsigned long pinCount; // Number of analog pins in a sample. + unsigned long pinNumber[123]; // List of pin numbers in a sample. +}; +//------------------------------------------------------------------------------ +// Data block for 8-bit ADC mode. +const size_t DATA_DIM8 = 508; +struct block8_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + unsigned char data[DATA_DIM8]; +}; +//------------------------------------------------------------------------------ +// Data block for 10-bit ADC mode. +const size_t DATA_DIM16 = 254; +struct block16_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + unsigned short data[DATA_DIM16]; +}; +//------------------------------------------------------------------------------ +// Data block for PC use +struct adcdata_t { + unsigned short count; // count of data bytes + unsigned short overrun; // count of overruns since last block + union { + unsigned char u8[DATA_DIM8]; + unsigned short u16[DATA_DIM16]; + } data; +}; +#endif // AnalogBinLogger_h \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino b/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino new file mode 100755 index 0000000..b3b3fe9 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino @@ -0,0 +1,787 @@ +/** + * This program logs data from the Arduino ADC to a binary file. + * + * Samples are logged at regular intervals. Each Sample consists of the ADC + * values for the analog pins defined in the PIN_LIST array. The pins numbers + * may be in any order. + * + * Edit the configuration constants below to set the sample pins, sample rate, + * and other configuration values. + * + * If your SD card has a long write latency, it may be necessary to use + * slower sample rates. Using a Mega Arduino helps overcome latency + * problems since 13 512 byte buffers will be used. + * + * Each 512 byte data block in the file has a four byte header followed by up + * to 508 bytes of data. (508 values in 8-bit mode or 254 values in 10-bit mode) + * Each block contains an integral number of samples with unused space at the + * end of the block. + * + * Data is written to the file using a SD multiple block write command. + */ +#include +#include +#include +#include "AnalogBinLogger.h" +//------------------------------------------------------------------------------ +// Analog pin number list for a sample. Pins may be in any order and pin +// numbers may be repeated. +const uint8_t PIN_LIST[] = {0, 1, 2, 3, 4}; +//------------------------------------------------------------------------------ +// Sample rate in samples per second. +const float SAMPLE_RATE = 5000; // Must be 0.25 or greater. + +// The interval between samples in seconds, SAMPLE_INTERVAL, may be set to a +// constant instead of being calculated from SAMPLE_RATE. SAMPLE_RATE is not +// used in the code below. For example, setting SAMPLE_INTERVAL = 2.0e-4 +// will result in a 200 microsecond sample interval. +const float SAMPLE_INTERVAL = 1.0/SAMPLE_RATE; + +// Setting ROUND_SAMPLE_INTERVAL non-zero will cause the sample interval to +// be rounded to a a multiple of the ADC clock period and will reduce sample +// time jitter. +#define ROUND_SAMPLE_INTERVAL 1 +//------------------------------------------------------------------------------ +// ADC clock rate. +// The ADC clock rate is normally calculated from the pin count and sample +// interval. The calculation attempts to use the lowest possible ADC clock +// rate. +// +// You can select an ADC clock rate by defining the symbol ADC_PRESCALER to +// one of these values. You must choose an appropriate ADC clock rate for +// your sample interval. +// #define ADC_PRESCALER 7 // F_CPU/128 125 kHz on an Uno +// #define ADC_PRESCALER 6 // F_CPU/64 250 kHz on an Uno +// #define ADC_PRESCALER 5 // F_CPU/32 500 kHz on an Uno +// #define ADC_PRESCALER 4 // F_CPU/16 1000 kHz on an Uno +// #define ADC_PRESCALER 3 // F_CPU/8 2000 kHz on an Uno (8-bit mode only) +//------------------------------------------------------------------------------ +// Reference voltage. See the processor data-sheet for reference details. +// uint8_t const ADC_REF = 0; // External Reference AREF pin. +uint8_t const ADC_REF = (1 << REFS0); // Vcc Reference. +// uint8_t const ADC_REF = (1 << REFS1); // Internal 1.1 (only 644 1284P Mega) +// uint8_t const ADC_REF = (1 << REFS1) | (1 << REFS0); // Internal 1.1 or 2.56 +//------------------------------------------------------------------------------ +// File definitions. +// +// Maximum file size in blocks. +// The program creates a contiguous file with FILE_BLOCK_COUNT 512 byte blocks. +// This file is flash erased using special SD commands. The file will be +// truncated if logging is stopped early. +const uint32_t FILE_BLOCK_COUNT = 256000; + +// log file base name. Must be six characters or less. +#define FILE_BASE_NAME "ANALOG" + +// Set RECORD_EIGHT_BITS non-zero to record only the high 8-bits of the ADC. +#define RECORD_EIGHT_BITS 0 +//------------------------------------------------------------------------------ +// Pin definitions. +// +// Digital pin to indicate an error, set to -1 if not used. +// The led blinks for fatal errors. The led goes on solid for SD write +// overrun errors and logging continues. +const int8_t ERROR_LED_PIN = 3; + +// SD chip select pin. +const uint8_t SD_CS_PIN = SS; +//------------------------------------------------------------------------------ +// Buffer definitions. +// +// The logger will use SdFat's buffer plus BUFFER_BLOCK_COUNT additional +// buffers. QUEUE_DIM must be a power of two larger than +//(BUFFER_BLOCK_COUNT + 1). +// +#if RAMEND < 0X8FF +#error Too little SRAM +// +#elif RAMEND < 0X10FF +// Use total of two 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 1; +// Dimension for queues of 512 byte SD blocks. +const uint8_t QUEUE_DIM = 4; // Must be a power of two! +// +#elif RAMEND < 0X20FF +// Use total of five 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 4; +// Dimension for queues of 512 byte SD blocks. +const uint8_t QUEUE_DIM = 8; // Must be a power of two! +// +#elif RAMEND < 0X40FF +// Use total of 13 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 12; +// Dimension for queues of 512 byte SD blocks. +const uint8_t QUEUE_DIM = 16; // Must be a power of two! +// +#else // RAMEND +// Use total of 29 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 28; +// Dimension for queues of 512 byte SD blocks. +const uint8_t QUEUE_DIM = 32; // Must be a power of two! +#endif // RAMEND +//============================================================================== +// End of configuration constants. +//============================================================================== +// Temporary log file. Will be deleted if a reset or power failure occurs. +#define TMP_FILE_NAME "TMP_LOG.BIN" + +// Size of file base name. Must not be larger than six. +const uint8_t BASE_NAME_SIZE = sizeof(FILE_BASE_NAME) - 1; + +// Number of analog pins to log. +const uint8_t PIN_COUNT = sizeof(PIN_LIST)/sizeof(PIN_LIST[0]); + +// Minimum ADC clock cycles per sample interval +const uint16_t MIN_ADC_CYCLES = 15; + +// Extra cpu cycles to setup ADC with more than one pin per sample. +const uint16_t ISR_SETUP_ADC = 100; + +// Maximum cycles for timer0 system interrupt, millis, micros. +const uint16_t ISR_TIMER0 = 160; +//============================================================================== +SdFat sd; + +SdBaseFile binFile; + +char binName[13] = FILE_BASE_NAME "00.BIN"; + +#if RECORD_EIGHT_BITS +const size_t SAMPLES_PER_BLOCK = DATA_DIM8/PIN_COUNT; +typedef block8_t block_t; +#else // RECORD_EIGHT_BITS +const size_t SAMPLES_PER_BLOCK = DATA_DIM16/PIN_COUNT; +typedef block16_t block_t; +#endif // RECORD_EIGHT_BITS + +block_t* emptyQueue[QUEUE_DIM]; +uint8_t emptyHead; +uint8_t emptyTail; + +block_t* fullQueue[QUEUE_DIM]; +volatile uint8_t fullHead; // volatile insures non-interrupt code sees changes. +uint8_t fullTail; + +// queueNext assumes QUEUE_DIM is a power of two +inline uint8_t queueNext(uint8_t ht) {return (ht + 1) & (QUEUE_DIM -1);} +//============================================================================== +// Interrupt Service Routines + +// Pointer to current buffer. +block_t* isrBuf; + +// Need new buffer if true. +bool isrBufNeeded = true; + +// overrun count +uint16_t isrOver = 0; + +// ADC configuration for each pin. +uint8_t adcmux[PIN_COUNT]; +uint8_t adcsra[PIN_COUNT]; +uint8_t adcsrb[PIN_COUNT]; +uint8_t adcindex = 1; + +// Insure no timer events are missed. +volatile bool timerError = false; +volatile bool timerFlag = false; +//------------------------------------------------------------------------------ +// ADC done interrupt. +ISR(ADC_vect) { + // Read ADC data. +#if RECORD_EIGHT_BITS + uint8_t d = ADCH; +#else // RECORD_EIGHT_BITS + // This will access ADCL first. + uint16_t d = ADC; +#endif // RECORD_EIGHT_BITS + + if (isrBufNeeded && emptyHead == emptyTail) { + // no buffers - count overrun + if (isrOver < 0XFFFF) isrOver++; + + // Avoid missed timer error. + timerFlag = false; + return; + } + // Start ADC + if (PIN_COUNT > 1) { + ADMUX = adcmux[adcindex]; + ADCSRB = adcsrb[adcindex]; + ADCSRA = adcsra[adcindex]; + if (adcindex == 0) timerFlag = false; + adcindex = adcindex < (PIN_COUNT - 1) ? adcindex + 1 : 0; + } else { + timerFlag = false; + } + // Check for buffer needed. + if (isrBufNeeded) { + // Remove buffer from empty queue. + isrBuf = emptyQueue[emptyTail]; + emptyTail = queueNext(emptyTail); + isrBuf->count = 0; + isrBuf->overrun = isrOver; + isrBufNeeded = false; + } + // Store ADC data. + isrBuf->data[isrBuf->count++] = d; + + // Check for buffer full. + if (isrBuf->count >= PIN_COUNT*SAMPLES_PER_BLOCK) { + // Put buffer isrIn full queue. + uint8_t tmp = fullHead; // Avoid extra fetch of volatile fullHead. + fullQueue[tmp] = (block_t*)isrBuf; + fullHead = queueNext(tmp); + + // Set buffer needed and clear overruns. + isrBufNeeded = true; + isrOver = 0; + } +} +//------------------------------------------------------------------------------ +// timer1 interrupt to clear OCF1B +ISR(TIMER1_COMPB_vect) { + // Make sure ADC ISR responded to timer event. + if (timerFlag) timerError = true; + timerFlag = true; +} +//============================================================================== +// Error messages stored in flash. +#define error(msg) error_P(PSTR(msg)) +//------------------------------------------------------------------------------ +void error_P(const char* msg) { + sd.errorPrint_P(msg); + fatalBlink(); +} +//------------------------------------------------------------------------------ +// +void fatalBlink() { + while (true) { + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, HIGH); + delay(200); + digitalWrite(ERROR_LED_PIN, LOW); + delay(200); + } + } +} +//============================================================================== +#if ADPS0 != 0 || ADPS1 != 1 || ADPS2 != 2 +#error unexpected ADC prescaler bits +#endif +//------------------------------------------------------------------------------ +// initialize ADC and timer1 +void adcInit(metadata_t* meta) { + uint8_t adps; // prescaler bits for ADCSRA + uint32_t ticks = F_CPU*SAMPLE_INTERVAL + 0.5; // Sample interval cpu cycles. + + if (ADC_REF & ~((1 << REFS0) | (1 << REFS1))) { + error("Invalid ADC reference"); + } +#ifdef ADC_PRESCALER + if (ADC_PRESCALER > 7 || ADC_PRESCALER < 2) { + error("Invalid ADC prescaler"); + } + adps = ADC_PRESCALER; +#else // ADC_PRESCALER + // Allow extra cpu cycles to change ADC settings if more than one pin. + int32_t adcCycles = (ticks - ISR_TIMER0)/PIN_COUNT; + - (PIN_COUNT > 1 ? ISR_SETUP_ADC : 0); + + for (adps = 7; adps > 0; adps--) { + if (adcCycles >= (MIN_ADC_CYCLES << adps)) break; + } +#endif // ADC_PRESCALER + meta->adcFrequency = F_CPU >> adps; + if (meta->adcFrequency > (RECORD_EIGHT_BITS ? 2000000 : 1000000)) { + error("Sample Rate Too High"); + } +#if ROUND_SAMPLE_INTERVAL + // Round so interval is multiple of ADC clock. + ticks += 1 << (adps - 1); + ticks >>= adps; + ticks <<= adps; +#endif // ROUND_SAMPLE_INTERVAL + + if (PIN_COUNT > sizeof(meta->pinNumber)/sizeof(meta->pinNumber[0])) { + error("Too many pins"); + } + meta->pinCount = PIN_COUNT; + meta->recordEightBits = RECORD_EIGHT_BITS; + + for (int i = 0; i < PIN_COUNT; i++) { + uint8_t pin = PIN_LIST[i]; + if (pin >= NUM_ANALOG_INPUTS) error("Invalid Analog pin number"); + meta->pinNumber[i] = pin; + + // Set ADC reference and low three bits of analog pin number. + adcmux[i] = (pin & 7) | ADC_REF; + if (RECORD_EIGHT_BITS) adcmux[i] |= 1 << ADLAR; + + // If this is the first pin, trigger on timer/counter 1 compare match B. + adcsrb[i] = i == 0 ? (1 << ADTS2) | (1 << ADTS0) : 0; +#ifdef MUX5 + if (pin > 7) adcsrb[i] |= (1 << MUX5); +#endif // MUX5 + adcsra[i] = (1 << ADEN) | (1 << ADIE) | adps; + adcsra[i] |= i == 0 ? 1 << ADATE : 1 << ADSC; + } + + // Setup timer1 + TCCR1A = 0; + uint8_t tshift; + if (ticks < 0X10000) { + // no prescale, CTC mode + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10); + tshift = 0; + } else if (ticks < 0X10000*8) { + // prescale 8, CTC mode + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); + tshift = 3; + } else if (ticks < 0X10000*64) { + // prescale 64, CTC mode + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10); + tshift = 6; + } else if (ticks < 0X10000*256) { + // prescale 256, CTC mode + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS12); + tshift = 8; + } else if (ticks < 0X10000*1024) { + // prescale 1024, CTC mode + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS12) | (1 << CS10); + tshift = 10; + } else { + error("Sample Rate Too Slow"); + } + // divide by prescaler + ticks >>= tshift; + // set TOP for timer reset + ICR1 = ticks - 1; + // compare for ADC start + OCR1B = 0; + + // multiply by prescaler + ticks <<= tshift; + + // Sample interval in CPU clock ticks. + meta->sampleInterval = ticks; + meta->cpuFrequency = F_CPU; + float sampleRate = (float)meta->cpuFrequency/meta->sampleInterval; + Serial.print(F("Sample pins:")); + for (int i = 0; i < meta->pinCount; i++) { + Serial.print(' '); + Serial.print(meta->pinNumber[i], DEC); + } + Serial.println(); + Serial.print(F("ADC bits: ")); + Serial.println(meta->recordEightBits ? 8 : 10); + Serial.print(F("ADC clock kHz: ")); + Serial.println(meta->adcFrequency/1000); + Serial.print(F("Sample Rate: ")); + Serial.println(sampleRate); + Serial.print(F("Sample interval usec: ")); + Serial.println(1000000.0/sampleRate, 4); +} +//------------------------------------------------------------------------------ +// enable ADC and timer1 interrupts +void adcStart() { + // initialize ISR + isrBufNeeded = true; + isrOver = 0; + adcindex = 1; + + // Clear any pending interrupt. + ADCSRA |= 1 << ADIF; + + // Setup for first pin. + ADMUX = adcmux[0]; + ADCSRB = adcsrb[0]; + ADCSRA = adcsra[0]; + + // Enable timer1 interrupts. + timerError = false; + timerFlag = false; + TCNT1 = 0; + TIFR1 = 1 << OCF1B; + TIMSK1 = 1 << OCIE1B; +} +//------------------------------------------------------------------------------ +void adcStop() { + TIMSK1 = 0; + ADCSRA = 0; +} +//------------------------------------------------------------------------------ +// Convert binary file to CSV file. +void binaryToCsv() { + uint8_t lastPct = 0; + block_t buf; + metadata_t* pm; + uint32_t t0 = millis(); + char csvName[13]; + StdioStream csvStream; + + if (!binFile.isOpen()) { + Serial.println(F("No current binary file")); + return; + } + binFile.rewind(); + if (!binFile.read(&buf , 512) == 512) error("Read metadata failed"); + // Create a new CSV file. + strcpy(csvName, binName); + strcpy_P(&csvName[BASE_NAME_SIZE + 3], PSTR("CSV")); + + if (!csvStream.fopen(csvName, "w")) { + error("open csvStream failed"); + } + Serial.println(); + Serial.print(F("Writing: ")); + Serial.print(csvName); + Serial.println(F(" - type any character to stop")); + pm = (metadata_t*)&buf; + csvStream.print(F("Interval,")); + float intervalMicros = 1.0e6*pm->sampleInterval/(float)pm->cpuFrequency; + csvStream.print(intervalMicros, 4); + csvStream.println(F(",usec")); + for (uint8_t i = 0; i < pm->pinCount; i++) { + if (i) csvStream.putc(','); + csvStream.print(F("pin")); + csvStream.print(pm->pinNumber[i]); + } + csvStream.println(); + uint32_t tPct = millis(); + while (!Serial.available() && binFile.read(&buf, 512) == 512) { + uint16_t i; + if (buf.count == 0) break; + if (buf.overrun) { + csvStream.print(F("OVERRUN,")); + csvStream.println(buf.overrun); + } + for (uint16_t j = 0; j < buf.count; j += PIN_COUNT) { + for (uint16_t i = 0; i < PIN_COUNT; i++) { + if (i) csvStream.putc(','); + csvStream.print(buf.data[i + j]); + } + csvStream.println(); + } + if ((millis() - tPct) > 1000) { + uint8_t pct = binFile.curPosition()/(binFile.fileSize()/100); + if (pct != lastPct) { + tPct = millis(); + lastPct = pct; + Serial.print(pct, DEC); + Serial.println('%'); + } + } + if (Serial.available()) break; + } + csvStream.fclose(); + Serial.print(F("Done: ")); + Serial.print(0.001*(millis() - t0)); + Serial.println(F(" Seconds")); +} +//------------------------------------------------------------------------------ +// read data file and check for overruns +void checkOverrun() { + bool headerPrinted = false; + block_t buf; + uint32_t bgnBlock, endBlock; + uint32_t bn = 0; + + if (!binFile.isOpen()) { + Serial.println(F("No current binary file")); + return; + } + if (!binFile.contiguousRange(&bgnBlock, &endBlock)) { + error("contiguousRange failed"); + } + binFile.rewind(); + Serial.println(); + Serial.println(F("Checking overrun errors - type any character to stop")); + if (!binFile.read(&buf , 512) == 512) { + error("Read metadata failed"); + } + bn++; + while (binFile.read(&buf, 512) == 512) { + if (buf.count == 0) break; + if (buf.overrun) { + if (!headerPrinted) { + Serial.println(); + Serial.println(F("Overruns:")); + Serial.println(F("fileBlockNumber,sdBlockNumber,overrunCount")); + headerPrinted = true; + } + Serial.print(bn); + Serial.print(','); + Serial.print(bgnBlock + bn); + Serial.print(','); + Serial.println(buf.overrun); + } + bn++; + } + if (!headerPrinted) { + Serial.println(F("No errors found")); + } else { + Serial.println(F("Done")); + } +} +//------------------------------------------------------------------------------ +// dump data file to Serial +void dumpData() { + block_t buf; + if (!binFile.isOpen()) { + Serial.println(F("No current binary file")); + return; + } + binFile.rewind(); + if (binFile.read(&buf , 512) != 512) { + error("Read metadata failed"); + } + Serial.println(); + Serial.println(F("Type any character to stop")); + delay(1000); + while (!Serial.available() && binFile.read(&buf , 512) == 512) { + if (buf.count == 0) break; + if (buf.overrun) { + Serial.print(F("OVERRUN,")); + Serial.println(buf.overrun); + } + for (uint16_t i = 0; i < buf.count; i++) { + Serial.print(buf.data[i], DEC); + if ((i+1)%PIN_COUNT) { + Serial.print(','); + } else { + Serial.println(); + } + } + } + Serial.println(F("Done")); +} +//------------------------------------------------------------------------------ +// log data +// max number of blocks to erase per erase call +uint32_t const ERASE_SIZE = 262144L; +void logData() { + uint32_t bgnBlock, endBlock; + + // Allocate extra buffer space. + block_t block[BUFFER_BLOCK_COUNT]; + + Serial.println(); + + // Initialize ADC and timer1. + adcInit((metadata_t*) &block[0]); + + // Find unused file name. + if (BASE_NAME_SIZE > 6) { + error("FILE_BASE_NAME too long"); + } + while (sd.exists(binName)) { + if (binName[BASE_NAME_SIZE + 1] != '9') { + binName[BASE_NAME_SIZE + 1]++; + } else { + binName[BASE_NAME_SIZE + 1] = '0'; + if (binName[BASE_NAME_SIZE] == '9') { + error("Can't create file name"); + } + binName[BASE_NAME_SIZE]++; + } + } + // Delete old tmp file. + if (sd.exists(TMP_FILE_NAME)) { + Serial.println(F("Deleting tmp file")); + if (!sd.remove(TMP_FILE_NAME)) { + error("Can't remove tmp file"); + } + } + // Create new file. + Serial.println(F("Creating new file")); + binFile.close(); + if (!binFile.createContiguous(sd.vwd(), + TMP_FILE_NAME, 512 * FILE_BLOCK_COUNT)) { + error("createContiguous failed"); + } + // Get the address of the file on the SD. + if (!binFile.contiguousRange(&bgnBlock, &endBlock)) { + error("contiguousRange failed"); + } + // Use SdFat's internal buffer. + uint8_t* cache = (uint8_t*)sd.vol()->cacheClear(); + if (cache == 0) error("cacheClear failed"); + + // Flash erase all data in the file. + Serial.println(F("Erasing all data")); + uint32_t bgnErase = bgnBlock; + uint32_t endErase; + while (bgnErase < endBlock) { + endErase = bgnErase + ERASE_SIZE; + if (endErase > endBlock) endErase = endBlock; + if (!sd.card()->erase(bgnErase, endErase)) { + error("erase failed"); + } + bgnErase = endErase + 1; + } + // Start a multiple block write. + if (!sd.card()->writeStart(bgnBlock, FILE_BLOCK_COUNT)) { + error("writeBegin failed"); + } + // Write metadata. + if (!sd.card()->writeData((uint8_t*)&block[0])) { + error("Write metadata failed"); + } + // Initialize queues. + emptyHead = emptyTail = 0; + fullHead = fullTail = 0; + + // Use SdFat buffer for one block. + emptyQueue[emptyHead] = (block_t*)cache; + emptyHead = queueNext(emptyHead); + + // Put rest of buffers in the empty queue. + for (uint8_t i = 0; i < BUFFER_BLOCK_COUNT; i++) { + emptyQueue[emptyHead] = &block[i]; + emptyHead = queueNext(emptyHead); + } + // Give SD time to prepare for big write. + delay(1000); + Serial.println(F("Logging - type any character to stop")); + // Wait for Serial Idle. + Serial.flush(); + delay(10); + uint32_t bn = 1; + uint32_t t0 = millis(); + uint32_t t1 = t0; + uint32_t overruns = 0; + uint32_t count = 0; + uint32_t maxLatency = 0; + + // Start logging interrupts. + adcStart(); + while (1) { + if (fullHead != fullTail) { + // Get address of block to write. + block_t* pBlock = fullQueue[fullTail]; + + // Write block to SD. + uint32_t usec = micros(); + if (!sd.card()->writeData((uint8_t*)pBlock)) { + error("write data failed"); + } + usec = micros() - usec; + t1 = millis(); + if (usec > maxLatency) maxLatency = usec; + count += pBlock->count; + + // Add overruns and possibly light LED. + if (pBlock->overrun) { + overruns += pBlock->overrun; + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, HIGH); + } + } + // Move block to empty queue. + emptyQueue[emptyHead] = pBlock; + emptyHead = queueNext(emptyHead); + fullTail = queueNext(fullTail); + bn++; + if (bn == FILE_BLOCK_COUNT) { + // File full so stop ISR calls. + adcStop(); + break; + } + } + if (timerError) { + error("Missed timer event - rate too high"); + } + if (Serial.available()) { + // Stop ISR calls. + adcStop(); + if (isrBuf != 0 && isrBuf->count >= PIN_COUNT) { + // Truncate to last complete sample. + isrBuf->count = PIN_COUNT*(isrBuf->count/PIN_COUNT); + // Put buffer in full queue. + fullQueue[fullHead] = isrBuf; + fullHead = queueNext(fullHead); + isrBuf = 0; + } + if (fullHead == fullTail) break; + } + } + if (!sd.card()->writeStop()) { + error("writeStop failed"); + } + // Truncate file if recording stopped early. + if (bn != FILE_BLOCK_COUNT) { + Serial.println(F("Truncating file")); + if (!binFile.truncate(512L * bn)) { + error("Can't truncate file"); + } + } + if (!binFile.rename(sd.vwd(), binName)) { + error("Can't rename file"); + } + Serial.print(F("File renamed: ")); + Serial.println(binName); + Serial.print(F("Max block write usec: ")); + Serial.println(maxLatency); + Serial.print(F("Record time sec: ")); + Serial.println(0.001*(t1 - t0), 3); + Serial.print(F("Sample count: ")); + Serial.println(count/PIN_COUNT); + Serial.print(F("Samples/sec: ")); + Serial.println((1000.0/PIN_COUNT)*count/(t1-t0)); + Serial.print(F("Overruns: ")); + Serial.println(overruns); + Serial.println(F("Done")); +} +//------------------------------------------------------------------------------ +void setup(void) { + if (ERROR_LED_PIN >= 0) { + pinMode(ERROR_LED_PIN, OUTPUT); + } + Serial.begin(9600); + + // Read the first sample pin to init the ADC. + analogRead(PIN_LIST[0]); + + Serial.print(F("FreeRam: ")); + Serial.println(FreeRam()); + + // initialize file system. + if (!sd.begin(SD_CS_PIN, SPI_FULL_SPEED)) { + sd.initErrorPrint(); + fatalBlink(); + } +} +//------------------------------------------------------------------------------ +void loop(void) { + // discard any input + while (Serial.read() >= 0) {} + Serial.println(); + Serial.println(F("type:")); + Serial.println(F("c - convert file to CSV")); + Serial.println(F("d - dump data to Serial")); + Serial.println(F("e - overrun error details")); + Serial.println(F("r - record ADC data")); + + while(!Serial.available()) {} + char c = tolower(Serial.read()); + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, LOW); + } + // Read any extra Serial data. + do { + delay(10); + } while (Serial.read() >= 0); + + if (c == 'c') { + binaryToCsv(); + } else if (c == 'd') { + dumpData(); + } else if (c == 'e') { + checkOverrun(); + } else if (c == 'r') { + logData(); + } else { + Serial.println(F("Invalid entry")); + } +} diff --git a/libs/SdFat-master/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino b/libs/SdFat-master/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino new file mode 100755 index 0000000..74cc79c --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino @@ -0,0 +1,529 @@ +/** + * This program logs data to a binary file. Functions are included + * to convert the binary file to a CSV text file. + * + * Samples are logged at regular intervals. The maximum logging rate + * depends on the quality of your SD card and the time required to + * read sensor data. This example has been tested at 500 Hz with + * good SD card on an Uno. 4000 HZ is possible on a Due. + * + * If your SD card has a long write latency, it may be necessary to use + * slower sample rates. Using a Mega Arduino helps overcome latency + * problems since 13 512 byte buffers will be used. + * + * Data is written to the file using a SD multiple block write command. + */ +#include +#include +//------------------------------------------------------------------------------ +// User data functions. Modify these functions for your data items. +#include "UserDataType.h" // Edit this include file to change data_t. + +// Acquire a data record. +void acquireData(data_t* data) { + data->time = micros(); + for (int i = 0; i < ADC_DIM; i++) { + data->adc[i] = analogRead(i); + } +} + +// Print a data record. +void printData(Print* pr, data_t* data) { + pr->print(data->time); + for (int i = 0; i < ADC_DIM; i++) { + pr->write(','); + pr->print(data->adc[i]); + } + pr->println(); +} + +// Print data header. +void printHeader(Print* pr) { + pr->print(F("time")); + for (int i = 0; i < ADC_DIM; i++) { + pr->print(F(",adc")); + pr->print(i); + } + pr->println(); +} +//============================================================================== +// Start of configuration constants. +//============================================================================== +//Interval between data records in microseconds. +const uint32_t LOG_INTERVAL_USEC = 2000; +//------------------------------------------------------------------------------ +// Pin definitions. +// +// SD chip select pin. +const uint8_t SD_CS_PIN = SS; +// +// Digital pin to indicate an error, set to -1 if not used. +// The led blinks for fatal errors. The led goes on solid for SD write +// overrun errors and logging continues. +const int8_t ERROR_LED_PIN = 3; +//------------------------------------------------------------------------------ +// File definitions. +// +// Maximum file size in blocks. +// The program creates a contiguous file with FILE_BLOCK_COUNT 512 byte blocks. +// This file is flash erased using special SD commands. The file will be +// truncated if logging is stopped early. +const uint32_t FILE_BLOCK_COUNT = 256000; + +// log file base name. Must be six characters or less. +#define FILE_BASE_NAME "DATA" +//------------------------------------------------------------------------------ +// Buffer definitions. +// +// The logger will use SdFat's buffer plus BUFFER_BLOCK_COUNT additional +// buffers. +// +#ifndef RAMEND +// Assume ARM. Use total of nine 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 8; +// +#elif RAMEND < 0X8FF +#error Too little SRAM +// +#elif RAMEND < 0X10FF +// Use total of two 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 1; +// +#elif RAMEND < 0X20FF +// Use total of five 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 4; +// +#else // RAMEND +// Use total of 13 512 byte buffers. +const uint8_t BUFFER_BLOCK_COUNT = 12; +#endif // RAMEND +//============================================================================== +// End of configuration constants. +//============================================================================== +// Temporary log file. Will be deleted if a reset or power failure occurs. +#define TMP_FILE_NAME "TMP_LOG.BIN" + +// Size of file base name. Must not be larger than six. +const uint8_t BASE_NAME_SIZE = sizeof(FILE_BASE_NAME) - 1; + +SdFat sd; + +SdBaseFile binFile; + +char binName[13] = FILE_BASE_NAME "00.BIN"; + +// Number of data records in a block. +const uint16_t DATA_DIM = (512 - 4)/sizeof(data_t); + +//Compute fill so block size is 512 bytes. FILL_DIM may be zero. +const uint16_t FILL_DIM = 512 - 4 - DATA_DIM*sizeof(data_t); + +struct block_t { + uint16_t count; + uint16_t overrun; + data_t data[DATA_DIM]; + uint8_t fill[FILL_DIM]; +}; + +const uint8_t QUEUE_DIM = BUFFER_BLOCK_COUNT + 2; + +block_t* emptyQueue[QUEUE_DIM]; +uint8_t emptyHead; +uint8_t emptyTail; + +block_t* fullQueue[QUEUE_DIM]; +uint8_t fullHead; +uint8_t fullTail; + +// Advance queue index. +inline uint8_t queueNext(uint8_t ht) {return ht < (QUEUE_DIM - 1) ? ht + 1 : 0;} +//============================================================================== +// Error messages stored in flash. +#define error(msg) error_P(PSTR(msg)) +//------------------------------------------------------------------------------ +void error_P(const char* msg) { + sd.errorPrint_P(msg); + fatalBlink(); +} +//------------------------------------------------------------------------------ +// +void fatalBlink() { + while (true) { + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, HIGH); + delay(200); + digitalWrite(ERROR_LED_PIN, LOW); + delay(200); + } + } +} +//============================================================================== +// Convert binary file to CSV file. +void binaryToCsv() { + uint8_t lastPct = 0; + block_t block; + uint32_t t0 = millis(); + uint32_t syncCluster = 0; + SdFile csvFile; + char csvName[13]; + + if (!binFile.isOpen()) { + Serial.println(); + Serial.println(F("No current binary file")); + return; + } + binFile.rewind(); + // Create a new csvFile. + strcpy(csvName, binName); + strcpy_P(&csvName[BASE_NAME_SIZE + 3], PSTR("CSV")); + + if (!csvFile.open(csvName, O_WRITE | O_CREAT | O_TRUNC)) { + error("open csvFile failed"); + } + Serial.println(); + Serial.print(F("Writing: ")); + Serial.print(csvName); + Serial.println(F(" - type any character to stop")); + printHeader(&csvFile); + uint32_t tPct = millis(); + while (!Serial.available() && binFile.read(&block, 512) == 512) { + uint16_t i; + if (block.count == 0) break; + if (block.overrun) { + csvFile.print(F("OVERRUN,")); + csvFile.println(block.overrun); + } + for (i = 0; i < block.count; i++) { + printData(&csvFile, &block.data[i]); + } + if (csvFile.curCluster() != syncCluster) { + csvFile.sync(); + syncCluster = csvFile.curCluster(); + } + if ((millis() - tPct) > 1000) { + uint8_t pct = binFile.curPosition()/(binFile.fileSize()/100); + if (pct != lastPct) { + tPct = millis(); + lastPct = pct; + Serial.print(pct, DEC); + Serial.println('%'); + } + } + if (Serial.available()) break; + } + csvFile.close(); + Serial.print(F("Done: ")); + Serial.print(0.001*(millis() - t0)); + Serial.println(F(" Seconds")); +} +//------------------------------------------------------------------------------ +// read data file and check for overruns +void checkOverrun() { + bool headerPrinted = false; + block_t block; + uint32_t bgnBlock, endBlock; + uint32_t bn = 0; + + if (!binFile.isOpen()) { + Serial.println(); + Serial.println(F("No current binary file")); + return; + } + if (!binFile.contiguousRange(&bgnBlock, &endBlock)) { + error("contiguousRange failed"); + } + binFile.rewind(); + Serial.println(); + Serial.println(F("Checking overrun errors - type any character to stop")); + while (binFile.read(&block, 512) == 512) { + if (block.count == 0) break; + if (block.overrun) { + if (!headerPrinted) { + Serial.println(); + Serial.println(F("Overruns:")); + Serial.println(F("fileBlockNumber,sdBlockNumber,overrunCount")); + headerPrinted = true; + } + Serial.print(bn); + Serial.print(','); + Serial.print(bgnBlock + bn); + Serial.print(','); + Serial.println(block.overrun); + } + bn++; + } + if (!headerPrinted) { + Serial.println(F("No errors found")); + } else { + Serial.println(F("Done")); + } +} +//------------------------------------------------------------------------------ +// dump data file to Serial +void dumpData() { + block_t block; + if (!binFile.isOpen()) { + Serial.println(); + Serial.println(F("No current binary file")); + return; + } + binFile.rewind(); + Serial.println(); + Serial.println(F("Type any character to stop")); + delay(1000); + printHeader(&Serial); + while (!Serial.available() && binFile.read(&block , 512) == 512) { + if (block.count == 0) break; + if (block.overrun) { + Serial.print(F("OVERRUN,")); + Serial.println(block.overrun); + } + for (uint16_t i = 0; i < block.count; i++) { + printData(&Serial, &block.data[i]); + } + } + Serial.println(F("Done")); +} +//------------------------------------------------------------------------------ +// log data +// max number of blocks to erase per erase call +uint32_t const ERASE_SIZE = 262144L; +void logData() { + uint32_t bgnBlock, endBlock; + + // Allocate extra buffer space. + block_t block[BUFFER_BLOCK_COUNT]; + block_t* curBlock = 0; + Serial.println(); + + // Find unused file name. + if (BASE_NAME_SIZE > 6) { + error("FILE_BASE_NAME too long"); + } + while (sd.exists(binName)) { + if (binName[BASE_NAME_SIZE + 1] != '9') { + binName[BASE_NAME_SIZE + 1]++; + } else { + binName[BASE_NAME_SIZE + 1] = '0'; + if (binName[BASE_NAME_SIZE] == '9') { + error("Can't create file name"); + } + binName[BASE_NAME_SIZE]++; + } + } + // Delete old tmp file. + if (sd.exists(TMP_FILE_NAME)) { + Serial.println(F("Deleting tmp file")); + if (!sd.remove(TMP_FILE_NAME)) { + error("Can't remove tmp file"); + } + } + // Create new file. + Serial.println(F("Creating new file")); + binFile.close(); + if (!binFile.createContiguous(sd.vwd(), + TMP_FILE_NAME, 512 * FILE_BLOCK_COUNT)) { + error("createContiguous failed"); + } + // Get the address of the file on the SD. + if (!binFile.contiguousRange(&bgnBlock, &endBlock)) { + error("contiguousRange failed"); + } + // Use SdFat's internal buffer. + uint8_t* cache = (uint8_t*)sd.vol()->cacheClear(); + if (cache == 0) error("cacheClear failed"); + + // Flash erase all data in the file. + Serial.println(F("Erasing all data")); + uint32_t bgnErase = bgnBlock; + uint32_t endErase; + while (bgnErase < endBlock) { + endErase = bgnErase + ERASE_SIZE; + if (endErase > endBlock) endErase = endBlock; + if (!sd.card()->erase(bgnErase, endErase)) { + error("erase failed"); + } + bgnErase = endErase + 1; + } + // Start a multiple block write. + if (!sd.card()->writeStart(bgnBlock, FILE_BLOCK_COUNT)) { + error("writeBegin failed"); + } + // Initialize queues. + emptyHead = emptyTail = 0; + fullHead = fullTail = 0; + + // Use SdFat buffer for one block. + emptyQueue[emptyHead] = (block_t*)cache; + emptyHead = queueNext(emptyHead); + + // Put rest of buffers in the empty queue. + for (uint8_t i = 0; i < BUFFER_BLOCK_COUNT; i++) { + emptyQueue[emptyHead] = &block[i]; + emptyHead = queueNext(emptyHead); + } + Serial.println(F("Logging - type any character to stop")); + // Wait for Serial Idle. + Serial.flush(); + delay(10); + uint32_t bn = 0; + uint32_t t0 = millis(); + uint32_t t1 = t0; + uint32_t overrun = 0; + uint32_t overrunTotal = 0; + uint32_t count = 0; + uint32_t maxLatency = 0; + int32_t diff; + // Start at a multiple of interval. + uint32_t logTime = micros()/LOG_INTERVAL_USEC + 1; + logTime *= LOG_INTERVAL_USEC; + bool closeFile = false; + while (1) { + // Time for next data record. + logTime += LOG_INTERVAL_USEC; + if (Serial.available()) closeFile = true; + + if (closeFile) { + if (curBlock != 0 && curBlock->count >= 0) { + // Put buffer in full queue. + fullQueue[fullHead] = curBlock; + fullHead = queueNext(fullHead); + curBlock = 0; + } + } else { + if (curBlock == 0 && emptyTail != emptyHead) { + curBlock = emptyQueue[emptyTail]; + emptyTail = queueNext(emptyTail); + curBlock->count = 0; + curBlock->overrun = overrun; + overrun = 0; + } + do { + diff = logTime - micros(); + } while(diff > 0); + if (diff < -10) error("LOG_INTERVAL_USEC too small"); + if (curBlock == 0) { + overrun++; + } else { + acquireData(&curBlock->data[curBlock->count++]); + if (curBlock->count == DATA_DIM) { + fullQueue[fullHead] = curBlock; + fullHead = queueNext(fullHead); + curBlock = 0; + } + } + } + + if (fullHead == fullTail) { + // Exit loop if done. + if (closeFile) break; + } else if (!sd.card()->isBusy()) { + // Get address of block to write. + block_t* pBlock = fullQueue[fullTail]; + fullTail = queueNext(fullTail); + // Write block to SD. + uint32_t usec = micros(); + if (!sd.card()->writeData((uint8_t*)pBlock)) { + error("write data failed"); + } + usec = micros() - usec; + t1 = millis(); + if (usec > maxLatency) maxLatency = usec; + count += pBlock->count; + + // Add overruns and possibly light LED. + if (pBlock->overrun) { + overrunTotal += pBlock->overrun; + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, HIGH); + } + } + // Move block to empty queue. + emptyQueue[emptyHead] = pBlock; + emptyHead = queueNext(emptyHead); + bn++; + if (bn == FILE_BLOCK_COUNT) { + // File full so stop + break; + } + } + } + if (!sd.card()->writeStop()) { + error("writeStop failed"); + } + // Truncate file if recording stopped early. + if (bn != FILE_BLOCK_COUNT) { + Serial.println(F("Truncating file")); + if (!binFile.truncate(512L * bn)) { + error("Can't truncate file"); + } + } + if (!binFile.rename(sd.vwd(), binName)) { + error("Can't rename file"); + } + Serial.print(F("File renamed: ")); + Serial.println(binName); + Serial.print(F("Max block write usec: ")); + Serial.println(maxLatency); + Serial.print(F("Record time sec: ")); + Serial.println(0.001*(t1 - t0), 3); + Serial.print(F("Sample count: ")); + Serial.println(count); + Serial.print(F("Samples/sec: ")); + Serial.println((1000.0)*count/(t1-t0)); + Serial.print(F("Overruns: ")); + Serial.println(overrunTotal); + Serial.println(F("Done")); +} +//------------------------------------------------------------------------------ +void setup(void) { + if (ERROR_LED_PIN >= 0) { + pinMode(ERROR_LED_PIN, OUTPUT); + } + Serial.begin(9600); + + Serial.print(F("FreeRam: ")); + Serial.println(FreeRam()); + Serial.print(F("Records/block: ")); + Serial.println(DATA_DIM); + if (sizeof(block_t) != 512) error("Invalid block size"); + // initialize file system. + if (!sd.begin(SD_CS_PIN, SPI_FULL_SPEED)) { + sd.initErrorPrint(); + fatalBlink(); + } +} +//------------------------------------------------------------------------------ +void loop(void) { + // discard any input + while (Serial.read() >= 0) {} + Serial.println(); + Serial.println(F("type:")); + Serial.println(F("c - convert file to CSV")); + Serial.println(F("d - dump data to Serial")); + Serial.println(F("e - overrun error details")); + Serial.println(F("r - record data")); + + while(!Serial.available()) {} + char c = tolower(Serial.read()); + + // Discard extra Serial data. + do { + delay(10); + } while (Serial.read() >= 0); + + if (ERROR_LED_PIN >= 0) { + digitalWrite(ERROR_LED_PIN, LOW); + } + if (c == 'c') { + binaryToCsv(); + } else if (c == 'd') { + dumpData(); + } else if (c == 'e') { + checkOverrun(); + } else if (c == 'r') { + logData(); + } else { + Serial.println(F("Invalid entry")); + } +} diff --git a/libs/SdFat-master/SdFat/examples/LowLatencyLogger/UserDataType.h b/libs/SdFat-master/SdFat/examples/LowLatencyLogger/UserDataType.h new file mode 100755 index 0000000..8e161e2 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/LowLatencyLogger/UserDataType.h @@ -0,0 +1,8 @@ +#ifndef UserDataType_h +#define UserDataType_h +const uint8_t ADC_DIM = 4; +struct data_t { + unsigned long time; + unsigned short adc[ADC_DIM]; +}; +#endif // UserDataType_h diff --git a/libs/SdFatBeta20120108/SdFat/examples/OpenNext/OpenNext.pde b/libs/SdFat-master/SdFat/examples/OpenNext/OpenNext.ino similarity index 53% rename from libs/SdFatBeta20120108/SdFat/examples/OpenNext/OpenNext.pde rename to libs/SdFat-master/SdFat/examples/OpenNext/OpenNext.ino index aaed4d6..61a4852 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/OpenNext/OpenNext.pde +++ b/libs/SdFat-master/SdFat/examples/OpenNext/OpenNext.ino @@ -1,35 +1,40 @@ /* - * Open all files in the root dir and print their filename + * Print size, modify date/time, and name for all files in root. */ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; SdFile file; - -// define a serial output stream -ArduinoOutStream cout(Serial); //------------------------------------------------------------------------------ void setup() { - char name[13]; - Serial.begin(9600); - + while (!Serial) {} // wait for Leonardo + delay(1000); + // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // open next file in root. The volume working directory, vwd, is root while (file.openNext(sd.vwd(), O_READ)) { - file.getFilename(name); - cout << name << endl; + file.printFileSize(&Serial); + Serial.write(' '); + file.printModifyDateTime(&Serial); + Serial.write(' '); + file.printName(&Serial); + if (file.isDir()) { + // Indicate a directory. + Serial.write('/'); + } + Serial.println(); file.close(); } - cout << "Done" << endl; + Serial.println("Done!"); } //------------------------------------------------------------------------------ void loop() {} diff --git a/libs/SdFat-master/SdFat/examples/PrintBenchmark/PrintBenchmark.ino b/libs/SdFat-master/SdFat/examples/PrintBenchmark/PrintBenchmark.ino new file mode 100755 index 0000000..61f88aa --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/PrintBenchmark/PrintBenchmark.ino @@ -0,0 +1,140 @@ +/* + * This sketch is a simple Print benchmark. + */ +#include +#include + +// SD chip select pin +const uint8_t chipSelect = SS; + +// number of lines to print +const uint16_t N_PRINT = 20000; + +// file system +SdFat sd; + +// test file +SdFile file; + +// Serial output stream +ArduinoOutStream cout(Serial); +//------------------------------------------------------------------------------ +// store error strings in flash to save RAM +#define error(s) sd.errorHalt_P(PSTR(s)) +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + while (!Serial) { + // wait for Leonardo + } +} +//------------------------------------------------------------------------------ +void loop() { + uint32_t maxLatency; + uint32_t minLatency; + uint32_t totalLatency; + + while (Serial.read() >= 0) { + } + // pstr stores strings in flash to save RAM + cout << pstr("Type any character to start\n"); + while (Serial.read() <= 0) { + } + delay(400); // catch Due reset problem + + cout << pstr("Free RAM: ") << FreeRam() << endl; + + // initialize the SD card at SPI_FULL_SPEED for best performance. + // try SPI_HALF_SPEED if bus errors occur. + if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt(); + + cout << pstr("Type is FAT") << int(sd.vol()->fatType()) << endl; + + cout << pstr("Starting print test. Please wait.\n\n"); + + // do write test + for (int test = 0; test < 6; test++) { + char fileName[13] = "BENCH0.TXT"; + fileName[5] = '0' + test; + // open or create file - truncate existing file. + if (!file.open(fileName, O_CREAT | O_TRUNC | O_RDWR)) { + error("open failed"); + } + maxLatency = 0; + minLatency = 999999; + totalLatency = 0; + switch(test) { + case 0: + cout << pstr("Test of println(uint16_t)\n"); + break; + + case 1: + cout << pstr("Test of printField(uint16_t, char)\n"); + break; + + case 2: + cout << pstr("Test of println(uint32_t)\n"); + break; + + case 3: + cout << pstr("Test of printField(uint32_t, char)\n"); + break; + case 4: + cout << pstr("Test of println(float)\n"); + break; + + case 5: + cout << pstr("Test of printField(float, char)\n"); + break; + } + + uint32_t t = millis(); + for (uint16_t i = 0; i < N_PRINT; i++) { + uint32_t m = micros(); + + switch(test) { + case 0: + file.println(i); + break; + + case 1: + file.printField(i, '\n'); + break; + + case 2: + file.println(12345678UL + i); + break; + + case 3: + file.printField(12345678UL + i, '\n'); + break; + + case 4: + file.println((float)0.01*i); + break; + + case 5: + file.printField((float)0.01*i, '\n'); + break; + } + if (file.writeError) { + error("write failed"); + } + m = micros() - m; + if (maxLatency < m) maxLatency = m; + if (minLatency > m) minLatency = m; + totalLatency += m; + } + file.close(); + t = millis() - t; + double s = file.fileSize(); + cout << pstr("Time ") << 0.001*t << pstr(" sec\n"); + cout << pstr("File size ") << 0.001*s << pstr(" KB\n"); + cout << pstr("Write ") << s/t << pstr(" KB/sec\n"); + cout << pstr("Maximum latency: ") << maxLatency; + cout << pstr(" usec, Minimum Latency: ") << minLatency; + cout << pstr(" usec, Avg Latency: "); + cout << totalLatency/N_PRINT << pstr(" usec\n\n"); + } + cout << pstr("Done!\n\n"); +} diff --git a/libs/SdFatBeta20120108/SdFat/examples/QuickStart/QuickStart.pde b/libs/SdFat-master/SdFat/examples/QuickStart/QuickStart.ino similarity index 70% rename from libs/SdFatBeta20120108/SdFat/examples/QuickStart/QuickStart.pde rename to libs/SdFat-master/SdFat/examples/QuickStart/QuickStart.ino index 080ddc6..c57f194 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/QuickStart/QuickStart.pde +++ b/libs/SdFat-master/SdFat/examples/QuickStart/QuickStart.ino @@ -1,12 +1,20 @@ -// Quick hardware test +// Quick hardware test. +// #include +// +// Set DISABLE_CHIP_SELECT to disable a second SPI device. +// For example, with the Ethernet shield, set DISABLE_CHIP_SELECT +// to 10 to disable the Ethernet controller. +const int8_t DISABLE_CHIP_SELECT = -1; +// // Test with reduced SPI speed for breadboards. // Change spiSpeed to SPI_FULL_SPEED for better performance // Use SPI_QUARTER_SPEED for even slower SPI bus speed const uint8_t spiSpeed = SPI_HALF_SPEED; //------------------------------------------------------------------------------ -// Normally SdFat is used in applications in place +// Normally the SdFat class is used in applications in place // of Sd2Card, SdVolume, and SdFile for root. +// These internal classes are used here to diagnose problems. Sd2Card card; SdVolume volume; SdFile root; @@ -22,23 +30,33 @@ ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); int chipSelect; void cardOrSpeed() { - cout << pstr( - "Try another SD card or reduce the SPI bus speed.\n" - "The current SPI speed is: "); - uint8_t divisor = 1; - for (uint8_t i = 0; i < spiSpeed; i++) divisor *= 2; - cout << F_CPU * 0.5e-6 / divisor << pstr(" MHz\n"); + cout << pstr("Try another SD card or reduce the SPI bus speed.\n"); cout << pstr("Edit spiSpeed in this sketch to change it.\n"); } void reformatMsg() { cout << pstr("Try reformatting the card. For best results use\n"); cout << pstr("the SdFormatter sketch in SdFat/examples or download\n"); - cout << pstr("and use SDFormatter from www.sdcard.org/consumer.\n"); + cout << pstr("and use SDFormatter from www.sdcard.org/downloads.\n"); } void setup() { Serial.begin(9600); + while (!Serial) {} // Wait for Leonardo. + delay(1000); // Delay for Due. + + cout << pstr("\nSPI pins:\n"); + cout << pstr("MOSI: ") << int(MOSI) << endl; + cout << pstr("MISO: ") << int(MISO) << endl; + cout << pstr("SCK: ") << int(SCK) << endl; + + if (DISABLE_CHIP_SELECT < 0) { + cout << pstr( + "\nBe sure to edit DISABLE_CHIP_SELECT if you have\n" + "a second SPI device. For example, with the Ethernet\n" + "shield, DISABLE_CHIP_SELECT should be set to 10\n" + "to disable the Ethernet controller.\n"); + } cout << pstr( "\nSD chip select is the key hardware option.\n" "Common values are:\n" @@ -63,12 +81,23 @@ void loop() { cout << pstr("\nInvalid pin number\n"); return; } + if (DISABLE_CHIP_SELECT < 0) { + cout << pstr( + "\nAssuming the SD is the only SPI device.\n" + "Edit DISABLE_CHIP_SELECT to disable another device.\n"); + } else { + cout << pstr("\nDisabling SPI device on pin "); + cout << int(DISABLE_CHIP_SELECT) << endl; + pinMode(DISABLE_CHIP_SELECT, OUTPUT); + digitalWrite(DISABLE_CHIP_SELECT, HIGH); + } if (!card.init(spiSpeed, chipSelect)) { cout << pstr( "\nSD initialization failed.\n" "Do not reformat the card!\n" "Is the card correctly inserted?\n" "Is chipSelect set to the correct value?\n" + "Does another SPI device need to be disabled?\n" "Is there a wiring/soldering problem?\n"); cout << pstr("errorCode: ") << hex << showbase << int(card.errorCode()); cout << pstr(", errorData: ") << int(card.errorData()); diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRawWrite/SdFatRawWrite.pde b/libs/SdFat-master/SdFat/examples/RawWrite/RawWrite.ino similarity index 51% rename from libs/SdFatBeta20120108/extra/examplesV1/SdFatRawWrite/SdFatRawWrite.pde rename to libs/SdFat-master/SdFat/examples/RawWrite/RawWrite.ino index 9c080cc..319d0fd 100755 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRawWrite/SdFatRawWrite.pde +++ b/libs/SdFat-master/SdFat/examples/RawWrite/RawWrite.ino @@ -4,16 +4,16 @@ * are used in the WaveRP library to record audio with the * Adafruit Wave Shield using the built-in Arduino ADC. * - * The WaveRP library captures data from the ADC in an ISR + * The WaveRP library captures data from the ADC in an ISR * that is driven driven by timer one. Data is collected in - * two 512 byte buffers and written to the SD card. + * two 512 byte buffers and written to the SD card. * * This sketch simulates logging from a source that produces - * data at a constant rate of one block every MILLIS_PER_BLOCK. + * data at a constant rate of one block every MICROS_PER_BLOCK. * * If a high quality SanDisk card is used with this sketch * no overruns occur and the maximum block write time is - * 2 millis. + * under 2000 micros. * * Note: WaveRP creates a very large file then truncates it * to the length that is used for a recording. It only takes @@ -24,67 +24,60 @@ #include #include +// SD chip select pin +const uint8_t chipSelect = SS; + // number of blocks in the contiguous file -#define BLOCK_COUNT 10000UL +const uint32_t BLOCK_COUNT = 10000UL; // time to produce a block of data -#define MILLIS_PER_BLOCK 10 +const uint32_t MICROS_PER_BLOCK = 10000; + +// file system +SdFat sd; -Sd2Card card; -SdVolume volume; -SdFile root; +// test file SdFile file; +// file extent uint32_t bgnBlock, endBlock; +// Serial output stream +ArduinoOutStream cout(Serial); +//------------------------------------------------------------------------------ // store error strings in flash to save RAM -#define error(s) error_P(PSTR(s)) - -void error_P(const char* str) { - PgmPrint("error: "); - SerialPrintln_P(str); - if (card.errorCode()) { - PgmPrint("SD error: "); - Serial.print(card.errorCode(), HEX); - Serial.write(','); - Serial.println(card.errorData(), HEX); - } - while(1); -} - +#define error(s) sd.errorHalt_P(PSTR(s)) +//------------------------------------------------------------------------------ +// log of first overruns +#define OVER_DIM 20 +struct { + uint32_t block; + uint32_t micros; +} over[OVER_DIM]; +//------------------------------------------------------------------------------ void setup(void) { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo } - +//------------------------------------------------------------------------------ void loop(void) { while (Serial.read() >= 0) {} - PgmPrintln("Type any character to start"); - while (!Serial.available()) {} + // pstr stores strings in flash to save RAM + cout << pstr("Type any character to start\n"); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + + cout << pstr("Free RAM: ") << FreeRam() << endl; - // initialize the SD card - uint32_t t = millis(); - // initialize the SD card at SPI_FULL_SPEED for best performance. // try SPI_HALF_SPEED if bus errors occur. - if (!card.init(SPI_FULL_SPEED)) error("card.init failed"); - - t = millis() - t; - - PgmPrint("Card init time: "); - Serial.print(t); - PgmPrintln(" millis"); - - // initialize a FAT volume - if (!volume.init(&card)) error("volume.init failed"); - - // open the root directory - if (!root.openRoot(&volume)) error("openRoot failed"); - + if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt(); + // delete possible existing file - SdFile::remove(&root, "RAW.TXT"); - + sd.remove("RAW.TXT"); + // create a contiguous file - if (!file.createContiguous(&root, "RAW.TXT", 512UL*BLOCK_COUNT)) { + if (!file.createContiguous(sd.vwd(), "RAW.TXT", 512UL*BLOCK_COUNT)) { error("createContiguous failed"); } // get the location of the file's blocks @@ -94,10 +87,10 @@ void loop(void) { //*********************NOTE************************************** // NO SdFile calls are allowed while cache is used for raw writes //*************************************************************** - + // clear the cache and use it as a 512 byte buffer - uint8_t* pCache = (uint8_t*)volume.cacheClear(); - + uint8_t* pCache = (uint8_t*)sd.vol()->cacheClear(); + // fill cache with eight lines of 64 bytes each memset(pCache, ' ', 512); for (uint16_t i = 0; i < 512; i += 64) { @@ -106,33 +99,26 @@ void loop(void) { pCache[i + 62] = '\r'; pCache[i + 63] = '\n'; } - - PgmPrint("Start raw write of "); - Serial.print(file.fileSize()); - PgmPrintln(" bytes at"); - - Serial.print(512000UL/MILLIS_PER_BLOCK); - PgmPrintln(" bytes per second"); - - PgmPrint("Please wait "); - Serial.print((BLOCK_COUNT*MILLIS_PER_BLOCK)/1000UL); - PgmPrintln(" seconds"); - + + cout << pstr("Start raw write of ") << file.fileSize() << pstr(" bytes at\n"); + cout << 512000000UL/MICROS_PER_BLOCK << pstr(" bytes per second\n"); + cout << pstr("Please wait ") << (BLOCK_COUNT*MICROS_PER_BLOCK)/1000000UL; + cout << pstr(" seconds\n"); + // tell card to setup for multiple block write with pre-erase - if (!card.erase(bgnBlock, endBlock)) error("card.erase failed"); - if (!card.writeStart(bgnBlock, BLOCK_COUNT)) { + if (!sd.card()->writeStart(bgnBlock, BLOCK_COUNT)) { error("writeStart failed"); } // init stats uint16_t overruns = 0; - uint16_t maxWriteTime = 0; - t = millis(); + uint32_t maxWriteTime = 0; + uint32_t t = micros(); uint32_t tNext = t; // write data for (uint32_t b = 0; b < BLOCK_COUNT; b++) { // write must be done by this time - tNext += MILLIS_PER_BLOCK; + tNext += MICROS_PER_BLOCK; // put block number at start of first line in block uint32_t n = b; @@ -142,45 +128,47 @@ void loop(void) { } // write a 512 byte block uint32_t tw = micros(); - if (!card.writeData(pCache)) error("writeData failed"); + if (!sd.card()->writeData(pCache)) error("writeData failed"); tw = micros() - tw; - + // check for max write time if (tw > maxWriteTime) { maxWriteTime = tw; } // check for overrun - if (millis() > tNext) { + if (micros() > tNext) { + if (overruns < OVER_DIM) { + over[overruns].block = b; + over[overruns].micros = tw; + } overruns++; // advance time to reflect overrun - tNext = millis(); + tNext = micros(); } else { // wait for time to write next block - while(millis() < tNext); + while(micros() < tNext); } } // total write time - t = millis() - t; - + t = micros() - t; + // end multiple block write mode - if (!card.writeStop()) error("writeStop failed"); - - PgmPrintln("Done"); - - PgmPrint("Overruns: "); - Serial.println(overruns); - - PgmPrint("Elapsed time: "); - Serial.print(t); - PgmPrintln(" millis"); - - PgmPrint("Max write time: "); - Serial.print(maxWriteTime); - PgmPrintln(" micros"); - - // close files for next pass of loop - root.close(); + if (!sd.card()->writeStop()) error("writeStop failed"); + + cout << pstr("Done\n"); + cout << pstr("Elapsed time: ") << setprecision(3)<< 1.e-6*t; + cout << pstr(" seconds\n"); + cout << pstr("Max write time: ") << maxWriteTime << pstr(" micros\n"); + cout << pstr("Overruns: ") << overruns << endl; + if (overruns) { + uint8_t n = overruns > OVER_DIM ? OVER_DIM : overruns; + cout << pstr("fileBlock,micros") << endl; + for (uint8_t i = 0; i < n; i++) { + cout << over[i].block << ',' << over[i].micros << endl; + } + } + // close file for next pass of loop file.close(); Serial.println(); -} +} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.pde b/libs/SdFat-master/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino similarity index 83% rename from libs/SdFatBeta20120108/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.pde rename to libs/SdFat-master/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino index 2b33cc7..09bc124 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.pde +++ b/libs/SdFat-master/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino @@ -26,11 +26,15 @@ SdFile myFile; void setup() { Serial.begin(9600); - + while (!Serial) {} // wait for Leonardo + Serial.println("Type any character to start"); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + // Initialize SdFat or print a detailed error message and halt // Use half speed like the native library. // change to SPI_FULL_SPEED for more performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // open the file for write at end like the Native SD library if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) { @@ -52,7 +56,7 @@ void setup() { // read from the file until there's nothing else in it: int data; - while ((data = myFile.read()) > 0) Serial.write(data); + while ((data = myFile.read()) >= 0) Serial.write(data); // close the file: myFile.close(); } diff --git a/libs/SdFatBeta20120108/SdFat/examples/SdFormatter/SdFormatter.pde b/libs/SdFat-master/SdFat/examples/SdFormatter/SdFormatter.ino similarity index 98% rename from libs/SdFatBeta20120108/SdFat/examples/SdFormatter/SdFormatter.pde rename to libs/SdFat-master/SdFat/examples/SdFormatter/SdFormatter.ino index 0ca1927..35a5d00 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/SdFormatter/SdFormatter.pde +++ b/libs/SdFat-master/SdFat/examples/SdFormatter/SdFormatter.ino @@ -19,11 +19,11 @@ #endif // DEBUG_PRINT // // Change the value of chipSelect if your hardware does -// not use the default value, SS_PIN. Common values are: +// not use the default value, SS. Common values are: // Arduino Ethernet shield: pin 4 // Sparkfun SD shield: pin 8 // Adafruit SD shields and modules: pin 10 -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // Change spiSpeed to SPI_FULL_SPEED for better performance // Use SPI_QUARTER_SPEED for even slower SPI bus speed @@ -114,8 +114,11 @@ void initSizes() { sectorsPerCluster = 16; } else if (cardCapacityMB <= 1024) { sectorsPerCluster = 32; - } else { + } else if (cardCapacityMB <= 32768) { sectorsPerCluster = 64; + } else { + // SDXC cards + sectorsPerCluster = 128; } cout << pstr("Blocks/Cluster: ") << int(sectorsPerCluster) << endl; @@ -414,7 +417,10 @@ void formatCard() { void setup() { char c; Serial.begin(9600); + while (!Serial) {} // wait for Leonardo + cout << pstr( + "\n" "This sketch can erase and/or format SD/SDHC cards.\n" "\n" "Erase uses the card's fast flash erase command.\n" @@ -427,6 +433,8 @@ void setup() { "Warning, all data on the card will be erased.\n" "Enter 'Y' to continue: "); while (!Serial.available()) {} + delay(400); // catch Due restart problem + c = Serial.read(); cout << c << endl; if (c != 'Y') { diff --git a/libs/SdFatBeta20120108/SdFat/examples/SdInfo/SdInfo.pde b/libs/SdFat-master/SdFat/examples/SdInfo/SdInfo.ino similarity index 79% rename from libs/SdFatBeta20120108/SdFat/examples/SdInfo/SdInfo.pde rename to libs/SdFat-master/SdFat/examples/SdInfo/SdInfo.ino index 5dbb7e5..2b933dc 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/SdInfo/SdInfo.pde +++ b/libs/SdFat-master/SdFat/examples/SdInfo/SdInfo.ino @@ -10,7 +10,7 @@ * Adafruit SD shields and modules, pin 10. * Default SD chip select is the SPI SS pin. */ -const uint8_t SdChipSelect = SS_PIN; +const uint8_t SdChipSelect = SS; Sd2Card card; SdVolume vol; @@ -18,6 +18,9 @@ SdVolume vol; // serial output steam ArduinoOutStream cout(Serial); +// global for card size +uint32_t cardSize; + // global for card erase size uint32_t eraseSize; //------------------------------------------------------------------------------ @@ -48,7 +51,7 @@ uint8_t cidDmp() { } cout << pstr("\nVersion: "); cout << int(cid.prv_n) << '.' << int(cid.prv_m) << endl; - cout << pstr("Serial number: ") << cid.psn << endl; + cout << pstr("Serial number: ") << hex << cid.psn << dec << endl; cout << pstr("Manufacturing date: "); cout << int(cid.mdt_month) << '/'; cout << (2000 + cid.mdt_year_low + 10 * cid.mdt_year_high) << endl; @@ -59,8 +62,7 @@ uint8_t cidDmp() { uint8_t csdDmp() { csd_t csd; uint8_t eraseSingleBlock; - uint32_t cardSize = card.cardSize(); - if (cardSize == 0 || !card.readCSD(&csd)) { + if (!card.readCSD(&csd)) { sdErrorMsg("readCSD failed"); return false; } @@ -75,7 +77,9 @@ uint8_t csdDmp() { return false; } eraseSize++; - cout << pstr("cardSize: ") << cardSize << pstr(" (512 byte blocks)\n"); + cout << pstr("cardSize: ") << 0.000512*cardSize; + cout << pstr(" MB (MB = 1,000,000 bytes)\n"); + cout << pstr("flashEraseSize: ") << int(eraseSize) << pstr(" blocks\n"); cout << pstr("eraseSingleBlock: "); if (eraseSingleBlock) { @@ -89,10 +93,21 @@ uint8_t csdDmp() { // print partition table uint8_t partDmp() { cache_t *p = vol.cacheClear(); + if (!p) { + sdErrorMsg("cacheClear failed"); + return false; + } if (!card.readBlock(0, p->data)) { sdErrorMsg("read MBR failed"); return false; } + for (uint8_t ip = 1; ip < 5; ip++) { + part_t *pt = &p->mbr.part[ip - 1]; + if ((pt->boot & 0X7F) != 0 || pt->firstSector > cardSize) { + cout << pstr("\nNo MBR. Assuming Super Floppy format.\n"); + return true; + } + } cout << pstr("\nSD Partition Table\n"); cout << pstr("part,boot,type,start,length\n"); for (uint8_t ip = 1; ip < 5; ip++) { @@ -107,7 +122,10 @@ void volDmp() { cout << pstr("\nVolume is FAT") << int(vol.fatType()) << endl; cout << pstr("blocksPerCluster: ") << int(vol.blocksPerCluster()) << endl; cout << pstr("clusterCount: ") << vol.clusterCount() << endl; - cout << pstr("freeClusters: ") << vol.freeClusterCount() << endl; + uint32_t volFree = vol.freeClusterCount(); + cout << pstr("freeClusters: ") << volFree << endl; + float fs = 0.000512*volFree*vol.blocksPerCluster(); + cout << pstr("freeSpace: ") << fs << pstr(" MB (MB = 1,000,000 bytes)\n"); cout << pstr("fatStartBlock: ") << vol.fatStartBlock() << endl; cout << pstr("fatCount: ") << int(vol.fatCount()) << endl; cout << pstr("blocksPerFat: ") << vol.blocksPerFat() << endl; @@ -121,10 +139,11 @@ void volDmp() { //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while(!Serial) {} // wait for Leonardo // use uppercase in hex and use 0X base prefix cout << uppercase << showbase << endl; - + // pstr stores strings in flash to save RAM cout << pstr("SdFat version: ") << SD_FAT_VERSION << endl; } @@ -132,11 +151,12 @@ void setup() { void loop() { // read any existing Serial data while (Serial.read() >= 0) {} - + // pstr stores strings in flash to save RAM cout << pstr("\ntype any character to start\n"); - while (Serial.read() < 0) {} - + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + uint32_t t = millis(); // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. @@ -145,6 +165,12 @@ void loop() { return; } t = millis() - t; + + cardSize = card.cardSize(); + if (cardSize == 0) { + sdErrorMsg("cardSize failed"); + return; + } cout << pstr("\ninit time: ") << t << " ms" << endl; cout << pstr("\nCard type: "); switch (card.type()) { @@ -157,7 +183,11 @@ void loop() { break; case SD_CARD_TYPE_SDHC: - cout << pstr("SDHC\n"); + if (cardSize < 70000000) { + cout << pstr("SDHC\n"); + } else { + cout << pstr("SDXC\n"); + } break; default: @@ -165,10 +195,16 @@ void loop() { } if (!cidDmp()) return; if (!csdDmp()) return; + uint32_t ocr; + if (!card.readOCR(&ocr)) { + sdErrorMsg("\nreadOCR failed"); + return; + } + cout << pstr("OCR: ") << hex << ocr << dec << endl; if (!partDmp()) return; if (!vol.init(&card)) { sdErrorMsg("\nvol.init failed"); return; } volDmp(); -} +} \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/StdioBench/StdioBench.ino b/libs/SdFat-master/SdFat/examples/StdioBench/StdioBench.ino new file mode 100755 index 0000000..907691e --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/StdioBench/StdioBench.ino @@ -0,0 +1,200 @@ +// Benchmark comparing SdFile and StdioStream. +#include + +// Define PRINT_FIELD nonzero to use printField. +#define PRINT_FIELD 0 + +// Number of lines to list on Serial. +#define STDIO_LIST_COUNT 0 +#define VERIFY_CONTENT 0 + +const uint8_t SD_CS_PIN = SS; +SdFat sd; + +SdFile printFile; +StdioStream stdioFile; + +float f[100]; +char buf[20]; +char* label[] = + {"uint8_t 0 to 255, 100 times ", "uint16_t 0 to 20000", + "uint32_t 0 to 20000", "uint32_t 1000000000 to 1000010000", + "float nnn.ffff, 10000 times"}; +//------------------------------------------------------------------------------ +void setup() { + uint32_t m; + uint32_t printSize; + uint32_t stdioSize; + uint32_t printTime; + uint32_t stdioTime; + + Serial.begin(9600); + Serial.println(F("Type any character to start")); + while (!Serial.available()); + Serial.println(F("Starting test")); + if (!sd.begin(SD_CS_PIN)) sd.errorHalt(); + + for (uint8_t i = 0; i < 100; i++) { + f[i] = 123.0 + 0.12345*i; + } + + for (uint8_t dataType = 0; dataType < 5; dataType++) { + for (uint8_t fileType = 0; fileType < 2; fileType++) { + if (!fileType) { + if (!printFile.open("PRRINT.TXT", O_CREAT | O_RDWR | O_TRUNC)) { + Serial.println("open fail"); + return; + } + printTime = millis(); + switch (dataType) { + case 0: + for (uint16_t i =0; i < 100; i++) { + for (uint8_t j = 0; j < 255; j++) { + printFile.println(j); + } + } + break; + case 1: + for (uint16_t i = 0; i < 20000; i++) { + printFile.println(i); + } + break; + + case 2: + for (uint32_t i = 0; i < 20000; i++) { + printFile.println(i); + } + break; + + case 3: + for (uint16_t i = 0; i < 10000; i++) { + printFile.println(i + 1000000000UL); + } + break; + + case 4: + for (int j = 0; j < 100; j++) { + for (uint8_t i = 0; i < 100; i++) { + printFile.println(f[i], 4); + } + } + break; + default: + break; + } + printFile.sync(); + printTime = millis() - printTime; + printFile.rewind(); + printSize = printFile.fileSize(); + + } else { + if (!stdioFile.fopen("STREAM.TXT", "w+")) { + Serial.println("fopen fail"); + return; + } + stdioTime = millis(); + + switch (dataType) { + case 0: + for (uint16_t i =0; i < 100; i++) { + for (uint8_t j = 0; j < 255; j++) { + #if PRINT_FIELD + stdioFile.printField(j, '\n'); + #else // PRINT_FIELD + stdioFile.println(j); + #endif // PRINT_FIELD + } + } + break; + case 1: + for (uint16_t i = 0; i < 20000; i++) { + #if PRINT_FIELD + stdioFile.printField(i, '\n'); + #else // PRINT_FIELD + stdioFile.println(i); + #endif // PRINT_FIELD + } + break; + + case 2: + for (uint32_t i = 0; i < 20000; i++) { + #if PRINT_FIELD + stdioFile.printField(i, '\n'); + #else // PRINT_FIELD + stdioFile.println(i); + #endif // PRINT_FIELD + } + break; + + case 3: + for (uint16_t i = 0; i < 10000; i++) { + #if PRINT_FIELD + stdioFile.printField(i + 1000000000UL, '\n'); + #else // PRINT_FIELD + stdioFile.println(i + 1000000000UL); + #endif // PRINT_FIELD + } + break; + + case 4: + for (int j = 0; j < 100; j++) { + for (uint8_t i = 0; i < 100; i++) { + #if PRINT_FIELD + stdioFile.printField(f[i], '\n', 4); + #else // PRINT_FIELD + stdioFile.println(f[i], 4); + #endif // PRINT_FIELD + } + } + break; + default: + break; + } + stdioFile.fflush(); + stdioTime = millis() - stdioTime; + stdioSize = stdioFile.ftell(); + if (STDIO_LIST_COUNT) { + size_t len; + stdioFile.rewind(); + for (int i = 0; i < STDIO_LIST_COUNT; i++) { + stdioFile.fgets(buf, sizeof(buf), &len); + Serial.print(len);Serial.print(','); + Serial.print(buf); + } + } + + } + + } + Serial.println(label[dataType]); + if (VERIFY_CONTENT && printSize == stdioSize) { + printFile.rewind(); + stdioFile.rewind(); + for (uint32_t i = 0; i < stdioSize; i++) { + if (printFile.read() != stdioFile.getc()) { + Serial.print(F("Files differ at pos: ")); + Serial.println(i); + return; + } + } + } + + Serial.print("fileSize: "); + if (printSize != stdioSize) { + Serial.print(printSize); + Serial.print(" != "); + } + Serial.println(stdioSize); + Serial.print("print millis: "); + Serial.println(printTime); + Serial.print("stdio millis: "); + Serial.println(stdioTime); + Serial.print("ratio: "); + Serial.println((float)printTime/(float)stdioTime); + Serial.println(); + printFile.close(); + stdioFile.fclose(); + } + Serial.println("Done"); +} +void loop() {} \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/StreamParseInt/StreamParseInt.ino b/libs/SdFat-master/SdFat/examples/StreamParseInt/StreamParseInt.ino new file mode 100755 index 0000000..e09777f --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/StreamParseInt/StreamParseInt.ino @@ -0,0 +1,34 @@ +// Simple demo of the Stream parsInt() member function. +#include + +// SD card chip select pin - Modify the value of csPin for your SD module. +const uint8_t csPin = 10; + +SdFat SD; +File file; +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + + // Initialize the SD. + if (!SD.begin(csPin)) { + Serial.println(F("begin error")); + return; + } + // Create and open the file. Use flag to truncate an existing file. + if (!file.open("stream.txt", O_RDWR|O_CREAT|O_TRUNC)) { + Serial.println(F("open error")); + return; + } + // Write a test number to the file. + file.println("12345"); + + // Rewind the file and read the number with parseInt(). + file.rewind(); + int i = file.parseInt(); + Serial.print(F("parseInt: ")); + Serial.println(i); + file.close(); +} + +void loop() {} diff --git a/libs/SdFat-master/SdFat/examples/StressTest/StressTest.ino b/libs/SdFat-master/SdFat/examples/StressTest/StressTest.ino new file mode 100755 index 0000000..20d102f --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/StressTest/StressTest.ino @@ -0,0 +1,75 @@ +// This stress test will create and write files until the SD is full. +#include + +// SD chip select pin. +const uint8_t SD_CS_PIN = SS; + +// Set write buffer size. +#ifdef __arm__ +#ifndef CORE_TEENSY +// Due +const size_t BUF_SIZE = 32768; +#else // CORE_TEENSY +// Teensy 3.0 +const size_t BUF_SIZE = 8192; +#endif // CORE_TEENSY +#elif defined(RAMEND) && RAMEND > 5000 +// AVR with more than 4 KB RAM +const size_t BUF_SIZE = 4096; +#else // __arm__ +// other +const size_t BUF_SIZE = 512; +#endif // __arm__ + +const size_t FILE_SIZE_KB = 10240; +const uint16_t BUFS_PER_FILE = (1024L*FILE_SIZE_KB/BUF_SIZE); + +SdFat sd; + +SdFile file; + +uint8_t buf[BUF_SIZE]; +char name[13]; +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + Serial.print("BUF_SIZE "); + Serial.println(BUF_SIZE); + Serial.println("Type any character to start"); + while (Serial.read() < 0) {} + + if (!sd.begin(SD_CS_PIN))sd.errorHalt("sd.begin"); + + // Fill buf with known value. + for (size_t i = 0; i < BUF_SIZE; i++) buf[i] = i; + + // Wait to begin. + do {delay(10);} while (Serial.read() >= 0); + Serial.println("Type any character to stop after next file"); +} +//------------------------------------------------------------------------------ +void loop() { + // Free KB on SD. + uint32_t freeKB = sd.vol()->freeClusterCount()*sd.vol()->blocksPerCluster()/2; + + Serial.print("Free KB: "); + Serial.println(freeKB); + if (freeKB < 2*FILE_SIZE_KB) { + Serial.println(" Done!"); + while(1); + } + sprintf(name, "%lu.DAT", freeKB); + if (!file.open(name, O_WRITE | O_CREAT | O_TRUNC)) { + sd.errorHalt("Open error!"); + } + for (uint16_t i = 0; i < BUFS_PER_FILE; i++) { + if (file.write(buf, BUF_SIZE) != BUF_SIZE) { + sd.errorHalt("Write error!"); + } + } + file.close(); + if (Serial.available()) { + Serial.println("Stopped!"); + while(1); + } +} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTimestamp/SdFatTimestamp.pde b/libs/SdFat-master/SdFat/examples/Timestamp/Timestamp.ino similarity index 72% rename from libs/SdFatBeta20120108/extra/examplesV1/SdFatTimestamp/SdFatTimestamp.pde rename to libs/SdFat-master/SdFat/examples/Timestamp/Timestamp.ino index 94b845a..32b870d 100755 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTimestamp/SdFatTimestamp.pde +++ b/libs/SdFat-master/SdFat/examples/Timestamp/Timestamp.ino @@ -3,12 +3,25 @@ * and the timestamp() function. */ #include -#include // use PgmPrint + +SdFat sd; + +SdFile file; + +// Default SD chip select is SS pin +const uint8_t chipSelect = SS; + +// create Serial stream +ArduinoOutStream cout(Serial); +//------------------------------------------------------------------------------ +// store error strings in flash to save RAM +#define error(s) sd.errorHalt_P(PSTR(s)) +//------------------------------------------------------------------------------ /* * date/time values for debug * normally supplied by a real-time clock or GPS */ -// date 2009-10-01 1-Oct-09 +// date 1-Oct-09 uint16_t year = 2009; uint8_t month = 10; uint8_t day = 1; @@ -16,7 +29,8 @@ uint8_t day = 1; // time 20:30:40 uint8_t hour = 20; uint8_t minute = 30; -uint8_t second = 40; +uint8_t second = 40; +//------------------------------------------------------------------------------ /* * User provided date time callback function. * See SdFile::dateTimeCallback() for usage. @@ -24,68 +38,62 @@ uint8_t second = 40; void dateTime(uint16_t* date, uint16_t* time) { // User gets date and time from GPS or real-time // clock in real callback function - + // return date using FAT_DATE macro to format fields *date = FAT_DATE(year, month, day); - + // return time using FAT_TIME macro to format fields *time = FAT_TIME(hour, minute, second); } - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - +//------------------------------------------------------------------------------ /* * Function to print all timestamps. */ void printTimestamps(SdFile& f) { dir_t d; if (!f.dirEntry(&d)) error("f.dirEntry failed"); - - PgmPrint("Creation: "); + + cout << pstr("Creation: "); f.printFatDate(d.creationDate); - Serial.write(' '); + cout << ' '; f.printFatTime(d.creationTime); - Serial.println(); - - PgmPrint("Modify: "); + cout << endl; + + cout << pstr("Modify: "); f.printFatDate(d.lastWriteDate); - Serial.write(' '); + cout <<' '; f.printFatTime(d.lastWriteTime); - Serial.println(); - - PgmPrint("Access: "); + cout << endl; + + cout << pstr("Access: "); f.printFatDate(d.lastAccessDate); - Serial.println(); + cout << endl; } - +//------------------------------------------------------------------------------ void setup(void) { Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); + while (!Serial) {} // wait for Leonardo + + cout << pstr("Type any character to start\n"); while (!Serial.available()); + delay(400); // catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); + // remove files if they exist sd.remove("CALLBACK.TXT"); sd.remove("DEFAULT.TXT"); sd.remove("STAMP.TXT"); - + // create a new file with default timestamps if (!file.open("DEFAULT.TXT", O_CREAT | O_WRITE)) { error("open DEFAULT.TXT failed"); } - Serial.println(); - PgmPrintln("Open with default times"); + cout << pstr("\nOpen with default times\n"); printTimestamps(file); - + // close file file.close(); /* @@ -101,31 +109,29 @@ void setup(void) { */ // set date time callback function SdFile::dateTimeCallback(dateTime); - + // create a new file with callback timestamps if (!file.open("CALLBACK.TXT", O_CREAT | O_WRITE)) { error("open CALLBACK.TXT failed"); - } - Serial.println(); - PgmPrintln("Open with callback times"); + } + cout << ("\nOpen with callback times\n"); printTimestamps(file); - + // change call back date day += 1; - + // must add two to see change since FAT second field is 5-bits - second += 2; - + second += 2; + // modify file by writing a byte file.write('t'); - + // force dir update file.sync(); - - Serial.println(); - PgmPrintln("Times after write"); + + cout << pstr("\nTimes after write\n"); printTimestamps(file); - + // close file file.close(); /* @@ -135,7 +141,7 @@ void setup(void) { * change access/modify timestamp */ SdFile::dateTimeCallbackCancel(); - + // create a new file with default timestamps if (!file.open("STAMP.TXT", O_CREAT | O_WRITE)) { error("open STAMP.TXT failed"); @@ -152,13 +158,11 @@ void setup(void) { if (!file.timestamp(T_ACCESS, 2009, 11, 12, 7, 8, 9)) { error("set access time failed"); } - Serial.println(); - PgmPrintln("Times after timestamp() calls"); + cout << pstr("\nTimes after timestamp() calls\n"); printTimestamps(file); - + file.close(); - Serial.println(); - PgmPrintln("Done"); + cout << pstr("\nDone\n"); } -void loop(void){} +void loop(void){} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/TwoCards/TwoCards.pde b/libs/SdFat-master/SdFat/examples/TwoCards/TwoCards.ino similarity index 95% rename from libs/SdFatBeta20120108/SdFat/examples/TwoCards/TwoCards.pde rename to libs/SdFat-master/SdFat/examples/TwoCards/TwoCards.ino index 720ee89..9065e1f 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/TwoCards/TwoCards.pde +++ b/libs/SdFat-master/SdFat/examples/TwoCards/TwoCards.ino @@ -26,21 +26,24 @@ const uint16_t NWRITE = FILE_SIZE/BUF_DIM; //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo PgmPrint("FreeRam: "); + Serial.println(FreeRam()); // fill buffer with known data for (int i = 0; i < sizeof(buf); i++) buf[i] = i; PgmPrintln("type any character to start"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem // disable sd2 while initializing sd1 pinMode(SD2_CS, OUTPUT); digitalWrite(SD2_CS, HIGH); // initialize the first card - if (!sd1.init(SPI_FULL_SPEED, SD1_CS)) { + if (!sd1.begin(SD1_CS)) { sd1.initError("sd1:"); } // create DIR1 on sd1 if it does not exist @@ -48,7 +51,7 @@ void setup() { if (!sd1.mkdir("/DIR1")) sd1.errorExit("sd1.mkdir"); } // initialize the second card - if (!sd2.init(SPI_FULL_SPEED, SD2_CS)) { + if (!sd2.begin(SD2_CS)) { sd2.initError("sd2:"); } // create DIR2 on sd2 if it does not exist diff --git a/libs/SdFat-master/SdFat/examples/bench/bench.ino b/libs/SdFat-master/SdFat/examples/bench/bench.ino new file mode 100755 index 0000000..a357730 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/bench/bench.ino @@ -0,0 +1,173 @@ +/* + * This sketch is a simple binary write/read benchmark. + */ +#include +#include + +// SD chip select pin +const uint8_t chipSelect = SS; + +// Size of read/write. +const size_t BUF_SIZE = 512; + +// File size in MB where MB = 1,000,000 bytes. +const uint32_t FILE_SIZE_MB = 5; + +// Write pass count. +const uint8_t WRITE_COUNT = 10; + +// Read pass count. +const uint8_t READ_COUNT = 5; +//============================================================================== +// End of configuration constants. +//------------------------------------------------------------------------------ +// File size in bytes. +const uint32_t FILE_SIZE = 1000000UL*FILE_SIZE_MB; + +uint8_t buf[BUF_SIZE]; + +// file system +SdFat sd; + +// test file +SdFile file; + +// Serial output stream +ArduinoOutStream cout(Serial); +//------------------------------------------------------------------------------ +// store error strings in flash to save RAM +#define error(s) sd.errorHalt_P(PSTR(s)) +//------------------------------------------------------------------------------ +void cidDmp() { + cid_t cid; + if (!sd.card()->readCID(&cid)) { + error("readCID failed"); + } + cout << pstr("\nManufacturer ID: "); + cout << hex << int(cid.mid) << dec << endl; + cout << pstr("OEM ID: ") << cid.oid[0] << cid.oid[1] << endl; + cout << pstr("Product: "); + for (uint8_t i = 0; i < 5; i++) { + cout << cid.pnm[i]; + } + cout << pstr("\nVersion: "); + cout << int(cid.prv_n) << '.' << int(cid.prv_m) << endl; + cout << pstr("Serial number: ") << hex << cid.psn << dec << endl; + cout << pstr("Manufacturing date: "); + cout << int(cid.mdt_month) << '/'; + cout << (2000 + cid.mdt_year_low + 10 * cid.mdt_year_high) << endl; + cout << endl; +} +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + while (!Serial){} // wait for Leonardo + cout << pstr("\nUse a freshly formatted SD for best performance.\n"); + + // use uppercase in hex and use 0X base prefix + cout << uppercase << showbase << endl; +} +//------------------------------------------------------------------------------ +void loop() { + float s; + uint32_t t; + uint32_t maxLatency; + uint32_t minLatency; + uint32_t totalLatency; + + // discard any input + while (Serial.read() >= 0) {} + + // pstr stores strings in flash to save RAM + cout << pstr("Type any character to start\n"); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem + + cout << pstr("Free RAM: ") << FreeRam() << endl; + + // initialize the SD card at SPI_FULL_SPEED for best performance. + // try SPI_HALF_SPEED if bus errors occur. + if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt(); + + cout << pstr("Type is FAT") << int(sd.vol()->fatType()) << endl; + cout << pstr("Card size: ") << sd.card()->cardSize()*512E-9; + cout << pstr(" GB (GB = 1E9 bytes)") << endl; + + cidDmp(); + + // open or create file - truncate existing file. + if (!file.open("BENCH.DAT", O_CREAT | O_TRUNC | O_RDWR)) { + error("open failed"); + } + + // fill buf with known data + for (uint16_t i = 0; i < (BUF_SIZE-2); i++) { + buf[i] = 'A' + (i % 26); + } + buf[BUF_SIZE-2] = '\r'; + buf[BUF_SIZE-1] = '\n'; + + cout << pstr("File size ") << FILE_SIZE_MB << pstr(" MB\n"); + cout << pstr("Buffer size ") << BUF_SIZE << pstr(" bytes\n"); + cout << pstr("Starting write test, please wait.") << endl << endl; + + // do write test + uint32_t n = FILE_SIZE/sizeof(buf); + cout < m) minLatency = m; + totalLatency += m; + } + file.sync(); + t = millis() - t; + s = file.fileSize(); + cout << s/t <<',' << maxLatency << ',' << minLatency; + cout << ',' << totalLatency/n << endl; + } + + cout << endl << pstr("Starting read test, please wait.") << endl; + cout << endl < m) minLatency = m; + totalLatency += m; + if (buf[BUF_SIZE-1] != '\n') { + error("data check"); + } + } + t = millis() - t; + cout << s/t <<',' << maxLatency << ',' << minLatency; + cout << ',' << totalLatency/n << endl; + } + cout << endl << pstr("Done") << endl; + file.close(); +} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/cin_cout/cin_cout.pde b/libs/SdFat-master/SdFat/examples/cin_cout/cin_cout.ino similarity index 77% rename from libs/SdFatBeta20120108/SdFat/examples/cin_cout/cin_cout.pde rename to libs/SdFat-master/SdFat/examples/cin_cout/cin_cout.ino index 827f9cb..ef2ea2b 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/cin_cout/cin_cout.pde +++ b/libs/SdFat-master/SdFat/examples/cin_cout/cin_cout.ino @@ -6,7 +6,7 @@ // create serial output stream ArduinoOutStream cout(Serial); -// input buffer for line +// input line buffer char cinBuf[40]; // create serial input stream @@ -14,20 +14,21 @@ ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo } //------------------------------------------------------------------------------ void loop() { int32_t n; - cout << "enter an integer\n"; + cout << "\nenter an integer\n"; cin.readline(); if (cin >> n) { - cout << "The number is: " << n << endl; + cout << "The number is: " << n; } else { // will fail if no digits or not in range [-2147483648, 2147483647] - cout << "Invalid input: " << cinBuf << endl; + cout << "Invalid input: " << cinBuf; } cout << endl; } diff --git a/libs/SdFat-master/SdFat/examples/dataLogger/dataLogger.ino b/libs/SdFat-master/SdFat/examples/dataLogger/dataLogger.ino new file mode 100755 index 0000000..19e81aa --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/dataLogger/dataLogger.ino @@ -0,0 +1,138 @@ +/* + * Simple data logger. + */ +#include + +// SD chip select pin. Be sure to disable any other SPI devices such as Enet. +const uint8_t chipSelect = SS; + +// Interval between data records in milliseconds. +// The interval must be greater than the maximum SD write latency plus the +// time to acquire and write data to the SD to avoid overrun errors. +// Run the bench example to check the quality of your SD card. +const uint32_t SAMPLE_INTERVAL_MS = 200; + +// Log file base name. Must be six characters or less. +#define FILE_BASE_NAME "DATA" +//------------------------------------------------------------------------------ +// File system object. +SdFat sd; + +// Log file. +SdFile file; + +// Time in micros for next data record. +uint32_t logTime; + +//============================================================================== +// User functions. Edit writeHeader() and logData() for your requirements. + +const uint8_t ANALOG_COUNT = 4; +//------------------------------------------------------------------------------ +// Write data header. +void writeHeader() { + file.print(F("micros")); + for (uint8_t i = 0; i < ANALOG_COUNT; i++) { + file.print(F(",adc")); + file.print(i, DEC); + } + file.println(); +} +//------------------------------------------------------------------------------ +// Log a data record. +void logData() { + uint16_t data[ANALOG_COUNT]; + + // Read all channels to avoid SD write latency between readings. + for (uint8_t i = 0; i < ANALOG_COUNT; i++) { + data[i] = analogRead(i); + } + // Write data to file. Start with log time in micros. + file.print(logTime); + + // Write ADC data to CSV record. + for (uint8_t i = 0; i < ANALOG_COUNT; i++) { + file.write(','); + file.print(data[i]); + } + file.println(); +} +//============================================================================== +// Error messages stored in flash. +#define error(msg) error_P(PSTR(msg)) +//------------------------------------------------------------------------------ +void error_P(const char* msg) { + sd.errorHalt_P(msg); +} +//------------------------------------------------------------------------------ +void setup() { + const uint8_t BASE_NAME_SIZE = sizeof(FILE_BASE_NAME) - 1; + char fileName[13] = FILE_BASE_NAME "00.CSV"; + + Serial.begin(9600); + while (!Serial) {} // wait for Leonardo + delay(1000); + + Serial.println(F("Type any character to start")); + while (!Serial.available()) {} + + // Initialize the SD card at SPI_HALF_SPEED to avoid bus errors with + // breadboards. use SPI_FULL_SPEED for better performance. + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); + + // Find an unused file name. + if (BASE_NAME_SIZE > 6) { + error("FILE_BASE_NAME too long"); + } + while (sd.exists(fileName)) { + if (fileName[BASE_NAME_SIZE + 1] != '9') { + fileName[BASE_NAME_SIZE + 1]++; + } else if (fileName[BASE_NAME_SIZE] != '9') { + fileName[BASE_NAME_SIZE + 1] = '0'; + fileName[BASE_NAME_SIZE]++; + } else { + error("Can't create file name"); + } + } + if (!file.open(fileName, O_CREAT | O_WRITE | O_EXCL)) error("file.open"); + do { + delay(10); + } while (Serial.read() >= 0); + + Serial.print(F("Logging to: ")); + Serial.println(fileName); + Serial.println(F("Type any character to stop")); + + // Write data header. + writeHeader(); + + // Start on a multiple of the sample interval. + logTime = micros()/(1000UL*SAMPLE_INTERVAL_MS) + 1; + logTime *= 1000UL*SAMPLE_INTERVAL_MS; +} +//------------------------------------------------------------------------------ +void loop() { + // Time for next record. + logTime += 1000UL*SAMPLE_INTERVAL_MS; + + // Wait for log time. + int32_t diff; + do { + diff = micros() - logTime; + } while (diff < 0); + + // Check for data rate too high. + if (diff > 10) error("Missed data record"); + + logData(); + + // Force data to SD and update the directory entry to avoid data loss. + if (!file.sync() || file.getWriteError()) error("write error"); + + if (Serial.available()) { + // Close file and stop. + file.close(); + Serial.println(F("Done")); + while(1) {} + } +} \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/examples/directoryFunctions/directoryFunctions.ino b/libs/SdFat-master/SdFat/examples/directoryFunctions/directoryFunctions.ino new file mode 100755 index 0000000..f69e084 --- /dev/null +++ b/libs/SdFat-master/SdFat/examples/directoryFunctions/directoryFunctions.ino @@ -0,0 +1,108 @@ +/* + * Example use of chdir(), ls(), mkdir(), and rmdir(). + */ +#include +// SD card chip select pin. +const uint8_t SD_CHIP_SELECT = SS; +//------------------------------------------------------------------------------ +// Permit SD to be wiped if ALLOW_WIPE is true. +const bool ALLOW_WIPE = false; + +// File system object. +SdFat sd; + +// Use for file creation in folders. +SdFile file; + +// Create a Serial output stream. +ArduinoOutStream cout(Serial); + +// Buffer for Serial input. +char cinBuf[40]; + +// Create a serial input stream. +ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); +//============================================================================== +// Error messages stored in flash. +#define error(msg) error_P(PSTR(msg)) +//------------------------------------------------------------------------------ +void error_P(const char* msg) { + sd.errorHalt_P(msg); +} +//------------------------------------------------------------------------------ +void setup() { + Serial.begin(9600); + while (!Serial) {} // wait for Leonardo + delay(1000); + + cout << pstr("Type any character to start\n"); + // Wait for input line and discard. + cin.readline(); + + // Initialize the SD card at SPI_HALF_SPEED to avoid bus errors with + // breadboards. use SPI_FULL_SPEED for better performance. + if (!sd.begin(SD_CHIP_SELECT, SPI_HALF_SPEED)) sd.initErrorHalt(); + + // Check for empty SD. + if (file.openNext(sd.vwd(), O_READ)) { + cout << pstr("Found files/folders in the root directory.\n"); + if (!ALLOW_WIPE) { + error("SD not empty, use a blank SD or set ALLOW_WIPE true."); + } else { + cout << pstr("Type: 'WIPE' to delete all SD files.\n"); + char buf[10]; + cin.readline(); + cin.get(buf, sizeof(buf)); + if (cin.fail() || strncmp(buf, "WIPE", 4) || buf[4] >= ' ') { + error("Invalid WIPE input"); + } + file.close(); + sd.vwd()->rmRfStar(); + cout << pstr("***SD wiped clean.***\n\n"); + } + } + + // Create a new folder. + if (!sd.mkdir("FOLDER1")) error("Create FOLDER1 failed"); + cout << pstr("Created FOLDER1\n"); + + // Create a file in FOLDER1 using a path. + if (!file.open("FOLDER1/FILE1.TXT", O_CREAT | O_WRITE)) { + error("create FOLDER1/FILE1.TXT failed"); + } + file.close(); + cout << pstr("Created FOLDER1/FILE1.TXT\n"); + + // Change volume working directory to FOLDER1. + if (!sd.chdir("FOLDER1")) error("chdir failed for FOLDER1.\n"); + cout << pstr("chdir to FOLDER1\n"); + + // Create FILE2.TXT in current directory. + if (!file.open("FILE2.TXT", O_CREAT | O_WRITE)) { + error("create FILE2.TXT failed"); + } + file.close(); + cout << pstr("Created FILE2.TXT in current directory\n"); + + cout << pstr("List of files on the SD.\n"); + sd.ls("/", LS_R); + + // Remove files from current directory. + if (!sd.remove("FILE1.TXT") || !sd.remove("FILE2.TXT")) error("remove failed"); + cout << pstr("\nFILE1.TXT and FILE2.TXT removed.\n"); + + // Change current directory to root. + if (!sd.chdir()) error("chdir to root failed.\n"); + + cout << pstr("List of files on the SD.\n"); + sd.ls(LS_R); + + // Remove FOLDER1. + if (!sd.rmdir("FOLDER1")) error("rmdir for FOLDER1 failed\n"); + + cout << pstr("\nFOLDER1 removed, SD empty.\n"); + cout << pstr("Done!\n"); +} +//------------------------------------------------------------------------------ +// Nothing happens in loop. +void loop() {} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/fgets/fgets.pde b/libs/SdFat-master/SdFat/examples/fgets/fgets.ino similarity index 80% rename from libs/SdFatBeta20120108/SdFat/examples/fgets/fgets.pde rename to libs/SdFat-master/SdFat/examples/fgets/fgets.ino index fef627e..c7b909f 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/fgets/fgets.pde +++ b/libs/SdFat-master/SdFat/examples/fgets/fgets.ino @@ -1,5 +1,9 @@ // Demo of fgets function to read lines from a file. #include + +// SD chip select pin +const uint8_t chipSelect = SS; + SdFat sd; // print stream ArduinoOutStream cout(Serial); @@ -46,16 +50,20 @@ void makeTestFile() { "\n" // empty line "Line at EOF without NL" )); - // wrfile is closed when it goes out of scope + wrfile.close(); } //------------------------------------------------------------------------------ void setup(void) { Serial.begin(9600); + while (!Serial) {} // Wait for Leonardo + cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem - // initialize the file system - if (!sd.init()) sd.initErrorHalt(); + // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with + // breadboards. use SPI_FULL_SPEED for better performance. + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); makeTestFile(); diff --git a/libs/SdFatBeta20120108/SdFat/examples/formatting/formatting.pde b/libs/SdFat-master/SdFat/examples/formatting/formatting.ino similarity index 96% rename from libs/SdFatBeta20120108/SdFat/examples/formatting/formatting.pde rename to libs/SdFat-master/SdFat/examples/formatting/formatting.ino index 873802d..f42aa87 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/formatting/formatting.pde +++ b/libs/SdFat-master/SdFat/examples/formatting/formatting.ino @@ -38,7 +38,10 @@ void showDate(int m, int d, int y) { //------------------------------------------------------------------------------ void setup(void) { Serial.begin(9600); - + + while (!Serial) {} // wait for Leonardo + delay(2000); + cout << endl << "default formatting" << endl; example(); diff --git a/libs/SdFatBeta20120108/SdFat/examples/getline/getline.pde b/libs/SdFat-master/SdFat/examples/getline/getline.ino similarity index 88% rename from libs/SdFatBeta20120108/SdFat/examples/getline/getline.pde rename to libs/SdFat-master/SdFat/examples/getline/getline.ino index 42934da..60cb762 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/getline/getline.pde +++ b/libs/SdFat-master/SdFat/examples/getline/getline.ino @@ -9,7 +9,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; @@ -26,6 +26,8 @@ void makeTestFile() { "17 character line\n" "too long for buffer\n" "line with no nl"); + + sdout.close(); } //------------------------------------------------------------------------------ void testGetline() { @@ -51,20 +53,23 @@ void testGetline() { //------------------------------------------------------------------------------ void setup(void) { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo // pstr stores strings in flash to save RAM cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // make the test file makeTestFile(); // run the example testGetline(); + cout << "\nDone!\n"; } //------------------------------------------------------------------------------ void loop(void) {} diff --git a/libs/SdFatBeta20120108/SdFat/examples/readCSV/readCSV.pde b/libs/SdFat-master/SdFat/examples/readCSV/readCSV.ino similarity index 61% rename from libs/SdFatBeta20120108/SdFat/examples/readCSV/readCSV.pde rename to libs/SdFat-master/SdFat/examples/readCSV/readCSV.ino index b4d228d..5963448 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/readCSV/readCSV.pde +++ b/libs/SdFat-master/SdFat/examples/readCSV/readCSV.ino @@ -5,7 +5,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system object SdFat sd; @@ -13,7 +13,7 @@ SdFat sd; // create Serial stream ArduinoOutStream cout(Serial); -char fileName[] = "3V_FILE.CSV"; +char fileName[] = "TESTFILE.CSV"; //------------------------------------------------------------------------------ // store error strings in flash to save RAM #define error(s) sd.errorHalt_P(PSTR(s)) @@ -22,7 +22,8 @@ char fileName[] = "3V_FILE.CSV"; void readFile() { long lg; float f1, f2; - char c1, c2; + char text[10]; + char c1, c2, c3; // space for commas. // open input file ifstream sdin(fileName); @@ -31,13 +32,26 @@ void readFile() { if (!sdin.is_open()) error("open"); // read until input fails - while (sdin >> lg >> c1 >> f1 >> c2 >> f2) { + while (1) { + // Get text field. + sdin.get(text, sizeof(text), ','); + + // Assume EOF if fail. + if (sdin.fail()) break; + + // Get commas and numbers. + sdin >> c1 >> lg >> c2 >> f1 >> c3 >> f2; + + // Skip CR/LF. + sdin.skipWhite(); + + if (sdin.fail()) error("bad input"); // error in line if not commas - if (c1 != ',' || c2 != ',') error("comma"); + if (c1 != ',' || c2 != ',' || c3 != ',') error("comma"); // print in six character wide columns - cout << setw(6) << lg << setw(6) << f1 << setw(6) << f2 << endl; + cout << text << setw(6) << lg << setw(6) << f1 << setw(6) << f2 << endl; } // Error in an input line if file is not at EOF. if (!sdin.eof()) error("readFile"); @@ -51,30 +65,36 @@ void writeFile() { // write file from string stored in flash sdout << pstr( - "1,2.3,4.5\n" - "6,7.8,9.0\n" - "9,8.7,6.5\n" - "-4,-3.2,-1\n") << flush; + "Line 1,1,2.3,4.5\n" + "Line 2,6,7.8,9.0\n" + "Line 3,9,8.7,6.5\n" + "Line 4,-4,-3.2,-1\n") << flush; // check for any errors if (!sdout) error("writeFile"); - // file is closed by destructor when it goes out of scope. + sdout.close(); } //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo + cout << pstr("Type any character to start\n"); + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // create test file writeFile(); + cout << endl; + // read and print test readFile(); - cout << "Done" << endl; + cout << "\nDone!" << endl; } -void loop() {} +void loop() {} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/examples/rename/rename.pde b/libs/SdFat-master/SdFat/examples/rename/rename.ino similarity index 90% rename from libs/SdFatBeta20120108/SdFat/examples/rename/rename.pde rename to libs/SdFat-master/SdFat/examples/rename/rename.ino index 453b6ca..9394569 100755 --- a/libs/SdFatBeta20120108/SdFat/examples/rename/rename.pde +++ b/libs/SdFat-master/SdFat/examples/rename/rename.ino @@ -5,7 +5,7 @@ #include // SD chip select pin -const uint8_t chipSelect = SS_PIN; +const uint8_t chipSelect = SS; // file system SdFat sd; @@ -18,12 +18,15 @@ ArduinoOutStream cout(Serial); //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); + while (!Serial) {} // wait for Leonardo + cout << pstr("Insert an empty SD. Type any character to start.") << endl; - while (Serial.read() < 0) {} + while (Serial.read() <= 0) {} + delay(400); // catch Due reset problem // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); + if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); // create a file and write one line to the file SdFile file("NAME1.TXT", O_WRITE | O_CREAT); diff --git a/libs/SdFatBeta20120108/SdFat/ios.h b/libs/SdFat-master/SdFat/ios.h similarity index 89% rename from libs/SdFatBeta20120108/SdFat/ios.h rename to libs/SdFat-master/SdFat/ios.h index 7c5566c..800939e 100755 --- a/libs/SdFatBeta20120108/SdFat/ios.h +++ b/libs/SdFat-master/SdFat/ios.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -113,39 +113,39 @@ class ios_base { /** truncate an existing stream when opening */ static const openmode trunc = 0X80; //---------------------------------------------------------------------------- - ios_base() : fill_(' '), fmtflags_(dec | right | skipws) - , precision_(2), width_(0) {} + ios_base() : m_fill(' '), m_fmtflags(dec | right | skipws) + , m_precision(2), m_width(0) {} /** \return fill character */ - char fill() {return fill_;} + char fill() {return m_fill;} /** Set fill character * \param[in] c new fill character * \return old fill character */ char fill(char c) { - char r = fill_; - fill_ = c; + char r = m_fill; + m_fill = c; return r; } /** \return format flags */ - fmtflags flags() const {return fmtflags_;} + fmtflags flags() const {return m_fmtflags;} /** set format flags * \param[in] fl new flag * \return old flags */ fmtflags flags(fmtflags fl) { - fmtflags tmp = fmtflags_; - fmtflags_ = fl; + fmtflags tmp = m_fmtflags; + m_fmtflags = fl; return tmp; } /** \return precision */ - int precision() const {return precision_;} + int precision() const {return m_precision;} /** set precision * \param[in] n new precision * \return old precision */ int precision(unsigned int n) { - int r = precision_; - precision_ = n; + int r = m_precision; + m_precision = n; return r; } /** set format flags @@ -153,8 +153,8 @@ class ios_base { * \return old flags */ fmtflags setf(fmtflags fl) { - fmtflags r = fmtflags_; - fmtflags_ |= fl; + fmtflags r = m_fmtflags; + m_fmtflags |= fl; return r; } /** modify format flags @@ -163,9 +163,9 @@ class ios_base { * \return old flags */ fmtflags setf(fmtflags fl, fmtflags mask) { - fmtflags r = fmtflags_; - fmtflags_ &= ~mask; - fmtflags_ |= fl; + fmtflags r = m_fmtflags; + m_fmtflags &= ~mask; + m_fmtflags |= fl; return r; } /** clear format flags @@ -173,30 +173,32 @@ class ios_base { * \return old flags */ void unsetf(fmtflags fl) { - fmtflags_ &= ~fl; + m_fmtflags &= ~fl; } /** \return width */ - unsigned width() {return width_;} + unsigned width() {return m_width;} /** set width * \param[in] n new width * \return old width */ unsigned width(unsigned n) { - unsigned r = width_; - width_ = n; + unsigned r = m_width; + m_width = n; return r; } + protected: /** \return current number base */ uint8_t flagsToBase() { uint8_t f = flags() & basefield; return f == oct ? 8 : f != hex ? 10 : 16; } + private: - char fill_; - fmtflags fmtflags_; - unsigned char precision_; - unsigned int width_; + char m_fill; + fmtflags m_fmtflags; + unsigned char m_precision; + unsigned int m_width; }; //------------------------------------------------------------------------------ /** function for boolalpha manipulator @@ -351,7 +353,7 @@ inline ios_base& uppercase(ios_base& str) { class ios : public ios_base { public: /** Create ios with no error flags set */ - ios() : iostate_(0) {} + ios() : m_iostate(0) {} /** \return null pointer if fail() is true. */ operator const void*() const { @@ -360,9 +362,9 @@ class ios : public ios_base { /** \return true if fail() else false. */ bool operator!() const {return fail();} /** \return The iostate flags for this file. */ - iostate rdstate() const {return iostate_;} + iostate rdstate() const {return m_iostate;} /** \return True if no iostate flags are set else false. */ - bool good() const {return iostate_ == goodbit;} + bool good() const {return m_iostate == goodbit;} /** \return true if end of file has been reached else false. * * Warning: An empty file returns false before the first read. @@ -370,22 +372,23 @@ class ios : public ios_base { * Moral: eof() is only useful in combination with fail(), to find out * whether EOF was the cause for failure */ - bool eof() const {return iostate_ & eofbit;} + bool eof() const {return m_iostate & eofbit;} /** \return true if any iostate bit other than eof are set else false. */ - bool fail() const {return iostate_ & (failbit | badbit);} + bool fail() const {return m_iostate & (failbit | badbit);} /** \return true if bad bit is set else false. */ - bool bad() const {return iostate_ & badbit;} + bool bad() const {return m_iostate & badbit;} /** Clear iostate bits. * * \param[in] state The flags you want to set after clearing all flags. **/ - void clear(iostate state = goodbit) {iostate_ = state;} + void clear(iostate state = goodbit) {m_iostate = state;} /** Set iostate bits. * * \param[in] state Bitts to set. **/ - void setstate(iostate state) {iostate_ |= state;} + void setstate(iostate state) {m_iostate |= state;} + private: - iostate iostate_; + iostate m_iostate; }; #endif // ios_h diff --git a/libs/SdFatBeta20120108/SdFat/iostream.h b/libs/SdFat-master/SdFat/iostream.h similarity index 98% rename from libs/SdFatBeta20120108/SdFat/iostream.h rename to libs/SdFat-master/SdFat/iostream.h index 02e5f01..6a69f5f 100755 --- a/libs/SdFatBeta20120108/SdFat/iostream.h +++ b/libs/SdFat-master/SdFat/iostream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * diff --git a/libs/SdFatBeta20120108/SdFat/istream.cpp b/libs/SdFat-master/SdFat/istream.cpp similarity index 92% rename from libs/SdFatBeta20120108/SdFat/istream.cpp rename to libs/SdFat-master/SdFat/istream.cpp index 3764813..49faec5 100755 --- a/libs/SdFatBeta20120108/SdFat/istream.cpp +++ b/libs/SdFat-master/SdFat/istream.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -27,13 +27,13 @@ * by the stream state. */ int istream::get() { - int16_t c; - gcount_ = 0; + int c; + m_gcount = 0; c = getch(); if (c < 0) { setstate(failbit); } else { - gcount_ = 1; + m_gcount = 1; } return c; } @@ -46,7 +46,7 @@ int istream::get() { * \return always returns *this. A failure is indicated by the stream state. */ istream& istream::get(char& c) { - int16_t tmp = get(); + int tmp = get(); if (tmp >= 0) c = tmp; return *this; } @@ -67,9 +67,9 @@ istream& istream::get(char& c) { */ istream& istream::get(char *str, streamsize n, char delim) { int c; - fpos_t pos; - gcount_ = 0; - while ((gcount_ + 1) < n) { + FatPos_t pos; + m_gcount = 0; + while ((m_gcount + 1) < n) { c = getch(&pos); if (c < 0) { break; @@ -78,10 +78,10 @@ istream& istream::get(char *str, streamsize n, char delim) { setpos(&pos); break; } - str[gcount_++] = c; + str[m_gcount++] = c; } - if (n > 0) str[gcount_] = '\0'; - if (gcount_ == 0) setstate(failbit); + if (n > 0) str[m_gcount] = '\0'; + if (m_gcount == 0) setstate(failbit); return *this; } //------------------------------------------------------------------------------ @@ -91,15 +91,14 @@ void istream::getBool(bool *b) { return; } PGM_P truePtr = PSTR("true"); - const uint8_t true_len = 4; PGM_P falsePtr = PSTR("false"); + const uint8_t true_len = 4; const uint8_t false_len = 5; bool trueOk = true; bool falseOk = true; uint8_t i = 0; int c = readSkip(); while (1) { -// if (c < 0) break; // not required falseOk = falseOk && c == pgm_read_byte(falsePtr + i); trueOk = trueOk && c == pgm_read_byte(truePtr + i); if (trueOk == false && falseOk == false) break; @@ -131,7 +130,7 @@ void istream::getChar(char* ch) { // int16_t const EXP_LIMIT = 100; static const uint32_t uint32_max = (uint32_t)-1; -bool istream::getFloat(float* value) { +bool istream::getDouble(double* value) { bool got_digit = false; bool got_dot = false; bool neg; @@ -140,9 +139,9 @@ bool istream::getFloat(float* value) { int16_t exp = 0; int16_t fracExp = 0; uint32_t frac = 0; - fpos_t endPos; - float pow10; - float v; + FatPos_t endPos; + double pow10; + double v; getpos(&endPos); c = readSkip(); @@ -180,7 +179,7 @@ bool istream::getFloat(float* value) { c = getch(&endPos); } } - v = static_cast(frac); + v = static_cast(frac); exp = expNeg ? fracExp - exp : fracExp + exp; expNeg = exp < 0; if (expNeg) exp = -exp; @@ -228,9 +227,9 @@ bool istream::getFloat(float* value) { * \return always returns *this. A failure is indicated by the stream state. */ istream& istream::getline(char *str, streamsize n, char delim) { - fpos_t pos; + FatPos_t pos; int c; - gcount_ = 0; + m_gcount = 0; if (n > 0) str[0] = '\0'; while (1) { c = getch(&pos); @@ -238,18 +237,18 @@ istream& istream::getline(char *str, streamsize n, char delim) { break; } if (c == delim) { - gcount_++; + m_gcount++; break; } - if ((gcount_ + 1) >= n) { + if ((m_gcount + 1) >= n) { setpos(&pos); setstate(failbit); break; } - str[gcount_++] = c; - str[gcount_] = '\0'; + str[m_gcount++] = c; + str[m_gcount] = '\0'; } - if (gcount_ == 0) setstate(failbit); + if (m_gcount == 0) setstate(failbit); return *this; } //------------------------------------------------------------------------------ @@ -261,7 +260,7 @@ bool istream::getNumber(uint32_t posMax, uint32_t negMax, uint32_t* num) { uint32_t val = 0; uint32_t cutoff; uint8_t cutlim; - fpos_t endPos; + FatPos_t endPos; uint8_t f = flags() & basefield; uint8_t base = f == oct ? 8 : f != hex ? 10 : 16; getpos(&endPos); @@ -320,7 +319,7 @@ bool istream::getNumber(uint32_t posMax, uint32_t negMax, uint32_t* num) { * */ void istream::getStr(char *str) { - fpos_t pos; + FatPos_t pos; uint16_t i = 0; uint16_t m = width() ? width() - 1 : 0XFFFE; if (m != 0) { @@ -361,13 +360,13 @@ void istream::getStr(char *str) { */ istream& istream::ignore(streamsize n, int delim) { int c; - gcount_ = 0; - while (gcount_ < n) { + m_gcount = 0; + while (m_gcount < n) { c = getch(); if (c < 0) { break; } - gcount_++; + m_gcount++; if (c == delim) break; } return *this; @@ -381,8 +380,8 @@ istream& istream::ignore(streamsize n, int delim) { */ int istream::peek() { int16_t c; - fpos_t pos; - gcount_ = 0; + FatPos_t pos; + m_gcount = 0; getpos(&pos); c = getch(); if (c < 0) { @@ -404,7 +403,7 @@ int16_t istream::readSkip() { /** used to implement ws() */ void istream::skipWhite() { int c; - fpos_t pos; + FatPos_t pos; do { c = getch(&pos); } while (isspace(c)); diff --git a/libs/SdFatBeta20120108/SdFat/istream.h b/libs/SdFat-master/SdFat/istream.h similarity index 92% rename from libs/SdFatBeta20120108/SdFat/istream.h rename to libs/SdFat-master/SdFat/istream.h index 347e9b8..64c1d00 100755 --- a/libs/SdFatBeta20120108/SdFat/istream.h +++ b/libs/SdFat-master/SdFat/istream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -137,38 +137,38 @@ class istream : public virtual ios { return *this; } /** - * Extract a value of type int16_t. + * Extract a value of type int. * \param[out] arg location to store the value. * \return Is always *this. Failure is indicated by the state of *this. */ - istream &operator>>(int16_t& arg) { + istream &operator>>(int& arg) { getNumber(&arg); return *this; } /** - * Extract a value of type uint16_t. + * Extract a value of type unsigned int. * \param[out] arg location to store the value. * \return Is always *this. Failure is indicated by the state of *this. */ - istream &operator>>(uint16_t& arg) { + istream &operator>>(unsigned int& arg) { getNumber(&arg); return *this; } /** - * Extract a value of type int32_t. + * Extract a value of type long. * \param[out] arg location to store the value. * \return Is always *this. Failure is indicated by the state of *this. */ - istream &operator>>(int32_t& arg) { + istream &operator>>(long& arg) { // NOLINT getNumber(&arg); return *this; } /** - * Extract a value of type uint32_t. + * Extract a value of type unsigned long. * \param[out] arg location to store the value. * \return Is always *this. Failure is indicated by the state of *this. */ - istream &operator>>(uint32_t& arg) { + istream &operator>>(unsigned long& arg) { // NOLINT getNumber(&arg); return *this; } @@ -178,7 +178,7 @@ class istream : public virtual ios { * \return Is always *this. Failure is indicated by the state of *this. */ istream &operator>> (double& arg) { - getFloat(reinterpret_cast(&arg)); + getDouble(&arg); return *this; } /** @@ -187,7 +187,9 @@ class istream : public virtual ios { * \return Is always *this. Failure is indicated by the state of *this. */ istream &operator>> (float& arg) { - getFloat(&arg); + double v; + getDouble(&v); + arg = v; return *this; } /** @@ -205,7 +207,7 @@ class istream : public virtual ios { * \return The number of characters extracted by the last unformatted * input function. */ - streamsize gcount() const {return gcount_;} + streamsize gcount() const {return m_gcount;} int get(); istream& get(char& ch); istream& get(char *str, streamsize n, char delim = '\n'); @@ -253,7 +255,7 @@ class istream : public virtual ios { * \param[out] pos * \return */ - int16_t getch(fpos_t* pos) { + int16_t getch(FatPos_t* pos) { getpos(pos); return getch(); } @@ -261,26 +263,27 @@ class istream : public virtual ios { * Internal - do not use * \param[out] pos */ - virtual void getpos(fpos_t* pos) = 0; + virtual void getpos(FatPos_t* pos) = 0; /** * Internal - do not use * \param[in] pos */ virtual bool seekoff(off_type off, seekdir way) = 0; virtual bool seekpos(pos_type pos) = 0; - virtual void setpos(fpos_t* pos) = 0; + virtual void setpos(FatPos_t* pos) = 0; virtual pos_type tellpos() = 0; /// @endcond private: - uint16_t gcount_; void getBool(bool *b); void getChar(char* ch); - bool getFloat(float* value); + bool getDouble(double* value); template void getNumber(T* value); bool getNumber(uint32_t posMax, uint32_t negMax, uint32_t* num); void getStr(char *str); int16_t readSkip(); + + size_t m_gcount; }; //------------------------------------------------------------------------------ template diff --git a/libs/SdFatBeta20120108/SdFat/ostream.cpp b/libs/SdFat-master/SdFat/ostream.cpp similarity index 93% rename from libs/SdFatBeta20120108/SdFat/ostream.cpp rename to libs/SdFat-master/SdFat/ostream.cpp index 098e44b..d285549 100755 --- a/libs/SdFatBeta20120108/SdFat/ostream.cpp +++ b/libs/SdFat-master/SdFat/ostream.cpp @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -18,9 +18,12 @@ * . */ #include +#ifndef PSTR +#define PSTR(x) x +#endif //------------------------------------------------------------------------------ void ostream::do_fill(unsigned len) { - for (;len < width(); len++) putch(fill()); + for (; len < width(); len++) putch(fill()); width(0); } //------------------------------------------------------------------------------ @@ -44,11 +47,9 @@ char* ostream::fmtNum(uint32_t n, char *ptr, uint8_t base) { void ostream::putBool(bool b) { if (flags() & boolalpha) { if (b) { - pgm t(PSTR("true")); - putPgm(t); + putPgm(PSTR("true")); } else { - pgm f(PSTR("false")); - putPgm(f); + putPgm(PSTR("false")); } } else { putChar(b ? '1' : '0'); @@ -80,8 +81,7 @@ void ostream::putDouble(double n) { } // check for larger than uint32_t if (n > 4.0E9) { - pgm err(PSTR("BIG FLT")); - putPgm(err); + putPgm(PSTR("BIG FLT")); return; } // round up and separate in and fraction parts @@ -158,9 +158,9 @@ void ostream::putNum(uint32_t n, bool neg) { do_fill(len); } //------------------------------------------------------------------------------ -void ostream::putPgm(const pgm &arg) { - char *str = arg.ptr; - int n = strlen_P(str); +void ostream::putPgm(const char* str) { + int n; + for (n = 0; pgm_read_byte(&str[n]); n++) {} fill_not_left(n); for (uint8_t c; (c = pgm_read_byte(str)); str++) { putch(c); diff --git a/libs/SdFatBeta20120108/SdFat/ostream.h b/libs/SdFat-master/SdFat/ostream.h similarity index 83% rename from libs/SdFatBeta20120108/SdFat/ostream.h rename to libs/SdFat-master/SdFat/ostream.h index a8c0367..8591b40 100755 --- a/libs/SdFatBeta20120108/SdFat/ostream.h +++ b/libs/SdFat-master/SdFat/ostream.h @@ -1,5 +1,5 @@ /* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SdFat Library * @@ -130,11 +130,35 @@ class ostream : public virtual ios { putDouble(arg); return *this; } + /** Output float + * \param[in] arg value to output + * \return the stream + */ + ostream &operator<< (float arg) { + putDouble(arg); + return *this; + } + /** Output signed short + * \param[in] arg value to output + * \return the stream + */ + ostream &operator<< (short arg) { // NOLINT + putNum((int32_t)arg); + return *this; + } + /** Output unsigned short + * \param[in] arg value to output + * \return the stream + */ + ostream &operator<< (unsigned short arg) { // NOLINT + putNum((uint32_t)arg); + return *this; + } /** Output signed int * \param[in] arg value to output * \return the stream */ - ostream &operator<< (int16_t arg) { + ostream &operator<< (int arg) { putNum((int32_t)arg); return *this; } @@ -142,7 +166,7 @@ class ostream : public virtual ios { * \param[in] arg value to output * \return the stream */ - ostream &operator<< (uint16_t arg) { + ostream &operator<< (unsigned int arg) { putNum((uint32_t)arg); return *this; } @@ -150,16 +174,16 @@ class ostream : public virtual ios { * \param[in] arg value to output * \return the stream */ - ostream &operator<< (int32_t arg) { - putNum(arg); + ostream &operator<< (long arg) { // NOLINT + putNum((int32_t)arg); return *this; } - /** Output uint32_t + /** Output unsigned long * \param[in] arg value to output * \return the stream */ - ostream &operator<< (uint32_t arg) { - putNum(arg); + ostream &operator<< (unsigned long arg) { // NOLINT + putNum((uint32_t)arg); return *this; } /** Output pointer @@ -170,12 +194,20 @@ class ostream : public virtual ios { putNum(reinterpret_cast(arg)); return *this; } - /** Output a string from flash + /** Output a string from flash using the pstr() macro * \param[in] arg pgm struct pointing to string * \return the stream */ ostream &operator<< (pgm arg) { - putPgm(arg); + putPgm(arg.ptr); + return *this; + } + /** Output a string from flash using the Arduino F() macro. + * \param[in] arg pointing to flash string + * \return the stream + */ + ostream &operator<< (const __FlashStringHelper *arg) { + putPgm(reinterpret_cast(arg)); return *this; } /** @@ -226,6 +258,7 @@ class ostream : public virtual ios { if (!seekoff(off, way)) setstate(failbit); return *this; } + protected: /// @cond SHOW_PROTECTED /** Put character with binary/text conversion @@ -248,7 +281,7 @@ class ostream : public virtual ios { void putDouble(double n); void putNum(uint32_t n, bool neg = false); void putNum(int32_t n); - void putPgm(const pgm& arg); + void putPgm(const char* str); void putStr(const char* str); }; #endif // ostream_h diff --git a/libs/SdFat-master/SdFat/utility/DigitalPin.h b/libs/SdFat-master/SdFat/utility/DigitalPin.h new file mode 100755 index 0000000..92bfd2f --- /dev/null +++ b/libs/SdFat-master/SdFat/utility/DigitalPin.h @@ -0,0 +1,654 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Fast Digital Pin functions + * + * @defgroup digitalPin Fast Pin I/O + * @details Fast Digital I/O functions and template class. + * @{ + */ +#ifndef DigitalPin_h +#define DigitalPin_h +#include +#ifdef __arm__ +#ifdef CORE_TEENSY +//------------------------------------------------------------------------------ +/** read pin value + * @param[in] pin Arduino pin number + * @return value read + */ +static inline __attribute__((always_inline)) +bool fastDigitalRead(uint8_t pin) { + return *portInputRegister(pin); +} +//------------------------------------------------------------------------------ +/** Set pin value + * @param[in] pin Arduino pin number + * @param[in] level value to write + */ +static inline __attribute__((always_inline)) +void fastDigitalWrite(uint8_t pin, bool value) { + if (value) { + *portSetRegister(pin) = 1; + } else { + *portClearRegister(pin) = 1; + } +} +#else // CORE_TEENSY +//------------------------------------------------------------------------------ +/** read pin value + * @param[in] pin Arduino pin number + * @return value read + */ +static inline __attribute__((always_inline)) +bool fastDigitalRead(uint8_t pin){ + return g_APinDescription[pin].pPort->PIO_PDSR & g_APinDescription[pin].ulPin; +} +//------------------------------------------------------------------------------ +/** Set pin value + * @param[in] pin Arduino pin number + * @param[in] level value to write + */ +static inline __attribute__((always_inline)) +void fastDigitalWrite(uint8_t pin, bool value){ + if(value) { + g_APinDescription[pin].pPort->PIO_SODR = g_APinDescription[pin].ulPin; + } else { + g_APinDescription[pin].pPort->PIO_CODR = g_APinDescription[pin].ulPin; + } +} +#endif // CORE_TEENSY +//------------------------------------------------------------------------------ +inline void fastDigitalToggle(uint8_t pin) { + fastDigitalWrite(pin, !fastDigitalRead(pin)); + } +//------------------------------------------------------------------------------ +inline void fastPinMode(uint8_t pin, bool mode) {pinMode(pin, mode);} +#else // __arm__ +#include +#include +//------------------------------------------------------------------------------ +/** + * @class pin_map_t + * @brief struct for mapping digital pins + */ +struct pin_map_t { + volatile uint8_t* ddr; /**< address of DDR for this pin */ + volatile uint8_t* pin; /**< address of PIN for this pin */ + volatile uint8_t* port; /**< address of PORT for this pin */ + uint8_t bit; /**< bit number for this pin */ +}; +//------------------------------------------------------------------------------ +#if defined(__AVR_ATmega168__)\ +||defined(__AVR_ATmega168P__)\ +||defined(__AVR_ATmega328P__) +// 168 and 328 Arduinos +const static pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRD, &PIND, &PORTD, 5}, // D5 5 + {&DDRD, &PIND, &PORTD, 6}, // D6 6 + {&DDRD, &PIND, &PORTD, 7}, // D7 7 + {&DDRB, &PINB, &PORTB, 0}, // B0 8 + {&DDRB, &PINB, &PORTB, 1}, // B1 9 + {&DDRB, &PINB, &PORTB, 2}, // B2 10 + {&DDRB, &PINB, &PORTB, 3}, // B3 11 + {&DDRB, &PINB, &PORTB, 4}, // B4 12 + {&DDRB, &PINB, &PORTB, 5}, // B5 13 + {&DDRC, &PINC, &PORTC, 0}, // C0 14 + {&DDRC, &PINC, &PORTC, 1}, // C1 15 + {&DDRC, &PINC, &PORTC, 2}, // C2 16 + {&DDRC, &PINC, &PORTC, 3}, // C3 17 + {&DDRC, &PINC, &PORTC, 4}, // C4 18 + {&DDRC, &PINC, &PORTC, 5} // C5 19 +}; +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega1280__)\ +|| defined(__AVR_ATmega2560__) +// Mega +static const pin_map_t pinMap[] = { + {&DDRE, &PINE, &PORTE, 0}, // E0 0 + {&DDRE, &PINE, &PORTE, 1}, // E1 1 + {&DDRE, &PINE, &PORTE, 4}, // E4 2 + {&DDRE, &PINE, &PORTE, 5}, // E5 3 + {&DDRG, &PING, &PORTG, 5}, // G5 4 + {&DDRE, &PINE, &PORTE, 3}, // E3 5 + {&DDRH, &PINH, &PORTH, 3}, // H3 6 + {&DDRH, &PINH, &PORTH, 4}, // H4 7 + {&DDRH, &PINH, &PORTH, 5}, // H5 8 + {&DDRH, &PINH, &PORTH, 6}, // H6 9 + {&DDRB, &PINB, &PORTB, 4}, // B4 10 + {&DDRB, &PINB, &PORTB, 5}, // B5 11 + {&DDRB, &PINB, &PORTB, 6}, // B6 12 + {&DDRB, &PINB, &PORTB, 7}, // B7 13 + {&DDRJ, &PINJ, &PORTJ, 1}, // J1 14 + {&DDRJ, &PINJ, &PORTJ, 0}, // J0 15 + {&DDRH, &PINH, &PORTH, 1}, // H1 16 + {&DDRH, &PINH, &PORTH, 0}, // H0 17 + {&DDRD, &PIND, &PORTD, 3}, // D3 18 + {&DDRD, &PIND, &PORTD, 2}, // D2 19 + {&DDRD, &PIND, &PORTD, 1}, // D1 20 + {&DDRD, &PIND, &PORTD, 0}, // D0 21 + {&DDRA, &PINA, &PORTA, 0}, // A0 22 + {&DDRA, &PINA, &PORTA, 1}, // A1 23 + {&DDRA, &PINA, &PORTA, 2}, // A2 24 + {&DDRA, &PINA, &PORTA, 3}, // A3 25 + {&DDRA, &PINA, &PORTA, 4}, // A4 26 + {&DDRA, &PINA, &PORTA, 5}, // A5 27 + {&DDRA, &PINA, &PORTA, 6}, // A6 28 + {&DDRA, &PINA, &PORTA, 7}, // A7 29 + {&DDRC, &PINC, &PORTC, 7}, // C7 30 + {&DDRC, &PINC, &PORTC, 6}, // C6 31 + {&DDRC, &PINC, &PORTC, 5}, // C5 32 + {&DDRC, &PINC, &PORTC, 4}, // C4 33 + {&DDRC, &PINC, &PORTC, 3}, // C3 34 + {&DDRC, &PINC, &PORTC, 2}, // C2 35 + {&DDRC, &PINC, &PORTC, 1}, // C1 36 + {&DDRC, &PINC, &PORTC, 0}, // C0 37 + {&DDRD, &PIND, &PORTD, 7}, // D7 38 + {&DDRG, &PING, &PORTG, 2}, // G2 39 + {&DDRG, &PING, &PORTG, 1}, // G1 40 + {&DDRG, &PING, &PORTG, 0}, // G0 41 + {&DDRL, &PINL, &PORTL, 7}, // L7 42 + {&DDRL, &PINL, &PORTL, 6}, // L6 43 + {&DDRL, &PINL, &PORTL, 5}, // L5 44 + {&DDRL, &PINL, &PORTL, 4}, // L4 45 + {&DDRL, &PINL, &PORTL, 3}, // L3 46 + {&DDRL, &PINL, &PORTL, 2}, // L2 47 + {&DDRL, &PINL, &PORTL, 1}, // L1 48 + {&DDRL, &PINL, &PORTL, 0}, // L0 49 + {&DDRB, &PINB, &PORTB, 3}, // B3 50 + {&DDRB, &PINB, &PORTB, 2}, // B2 51 + {&DDRB, &PINB, &PORTB, 1}, // B1 52 + {&DDRB, &PINB, &PORTB, 0}, // B0 53 + {&DDRF, &PINF, &PORTF, 0}, // F0 54 + {&DDRF, &PINF, &PORTF, 1}, // F1 55 + {&DDRF, &PINF, &PORTF, 2}, // F2 56 + {&DDRF, &PINF, &PORTF, 3}, // F3 57 + {&DDRF, &PINF, &PORTF, 4}, // F4 58 + {&DDRF, &PINF, &PORTF, 5}, // F5 59 + {&DDRF, &PINF, &PORTF, 6}, // F6 60 + {&DDRF, &PINF, &PORTF, 7}, // F7 61 + {&DDRK, &PINK, &PORTK, 0}, // K0 62 + {&DDRK, &PINK, &PORTK, 1}, // K1 63 + {&DDRK, &PINK, &PORTK, 2}, // K2 64 + {&DDRK, &PINK, &PORTK, 3}, // K3 65 + {&DDRK, &PINK, &PORTK, 4}, // K4 66 + {&DDRK, &PINK, &PORTK, 5}, // K5 67 + {&DDRK, &PINK, &PORTK, 6}, // K6 68 + {&DDRK, &PINK, &PORTK, 7} // K7 69 +}; +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega1284P__)\ +|| defined(__AVR_ATmega1284__)\ +|| defined(__AVR_ATmega644P__)\ +|| defined(__AVR_ATmega644__)\ +|| defined(__AVR_ATmega64__)\ +|| defined(__AVR_ATmega32__)\ +|| defined(__AVR_ATmega324__)\ +|| defined(__AVR_ATmega16__) + +#ifdef defined(VARIANT_MIGHTY) +// Mighty Layout +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 4}, // B4 4 + {&DDRB, &PINB, &PORTB, 5}, // B5 5 + {&DDRB, &PINB, &PORTB, 6}, // B6 6 + {&DDRB, &PINB, &PORTB, 7}, // B7 7 + {&DDRD, &PIND, &PORTD, 0}, // D0 8 + {&DDRD, &PIND, &PORTD, 1}, // D1 9 + {&DDRD, &PIND, &PORTD, 2}, // D2 10 + {&DDRD, &PIND, &PORTD, 3}, // D3 11 + {&DDRD, &PIND, &PORTD, 4}, // D4 12 + {&DDRD, &PIND, &PORTD, 5}, // D5 13 + {&DDRD, &PIND, &PORTD, 6}, // D6 14 + {&DDRD, &PIND, &PORTD, 7}, // D7 15 + {&DDRC, &PINC, &PORTC, 0}, // C0 16 + {&DDRC, &PINC, &PORTC, 1}, // C1 17 + {&DDRC, &PINC, &PORTC, 2}, // C2 18 + {&DDRC, &PINC, &PORTC, 3}, // C3 19 + {&DDRC, &PINC, &PORTC, 4}, // C4 20 + {&DDRC, &PINC, &PORTC, 5}, // C5 21 + {&DDRC, &PINC, &PORTC, 6}, // C6 22 + {&DDRC, &PINC, &PORTC, 7}, // C7 23 + {&DDRA, &PINA, &PORTA, 0}, // A0 24 + {&DDRA, &PINA, &PORTA, 1}, // A1 25 + {&DDRA, &PINA, &PORTA, 2}, // A2 26 + {&DDRA, &PINA, &PORTA, 3}, // A3 27 + {&DDRA, &PINA, &PORTA, 4}, // A4 28 + {&DDRA, &PINA, &PORTA, 5}, // A5 29 + {&DDRA, &PINA, &PORTA, 6}, // A6 30 + {&DDRA, &PINA, &PORTA, 7} // A7 31 +}; +#elif defined(VARIANT_BOBUINO) +// Bobuino Layout +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRB, &PINB, &PORTB, 0}, // B0 4 + {&DDRB, &PINB, &PORTB, 1}, // B1 5 + {&DDRB, &PINB, &PORTB, 2}, // B2 6 + {&DDRB, &PINB, &PORTB, 3}, // B3 7 + {&DDRD, &PIND, &PORTD, 5}, // D5 8 + {&DDRD, &PIND, &PORTD, 6}, // D6 9 + {&DDRB, &PINB, &PORTB, 4}, // B4 10 + {&DDRB, &PINB, &PORTB, 5}, // B5 11 + {&DDRB, &PINB, &PORTB, 6}, // B6 12 + {&DDRB, &PINB, &PORTB, 7}, // B7 13 + {&DDRA, &PINA, &PORTA, 7}, // A7 14 + {&DDRA, &PINA, &PORTA, 6}, // A6 15 + {&DDRA, &PINA, &PORTA, 5}, // A5 16 + {&DDRA, &PINA, &PORTA, 4}, // A4 17 + {&DDRA, &PINA, &PORTA, 3}, // A3 18 + {&DDRA, &PINA, &PORTA, 2}, // A2 19 + {&DDRA, &PINA, &PORTA, 1}, // A1 20 + {&DDRA, &PINA, &PORTA, 0}, // A0 21 + {&DDRC, &PINC, &PORTC, 0}, // C0 22 + {&DDRC, &PINC, &PORTC, 1}, // C1 23 + {&DDRC, &PINC, &PORTC, 2}, // C2 24 + {&DDRC, &PINC, &PORTC, 3}, // C3 25 + {&DDRC, &PINC, &PORTC, 4}, // C4 26 + {&DDRC, &PINC, &PORTC, 5}, // C5 27 + {&DDRC, &PINC, &PORTC, 6}, // C6 28 + {&DDRC, &PINC, &PORTC, 7}, // C7 29 + {&DDRD, &PIND, &PORTD, 4}, // D4 30 + {&DDRD, &PIND, &PORTD, 7} // D7 31 +}; +#elif defined(VARIANT_STANDARD) +// Standard Layout +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 4}, // B4 4 + {&DDRB, &PINB, &PORTB, 5}, // B5 5 + {&DDRB, &PINB, &PORTB, 6}, // B6 6 + {&DDRB, &PINB, &PORTB, 7}, // B7 7 + {&DDRD, &PIND, &PORTD, 0}, // D0 8 + {&DDRD, &PIND, &PORTD, 1}, // D1 9 + {&DDRD, &PIND, &PORTD, 2}, // D2 10 + {&DDRD, &PIND, &PORTD, 3}, // D3 11 + {&DDRD, &PIND, &PORTD, 4}, // D4 12 + {&DDRD, &PIND, &PORTD, 5}, // D5 13 + {&DDRD, &PIND, &PORTD, 6}, // D6 14 + {&DDRD, &PIND, &PORTD, 7}, // D7 15 + {&DDRC, &PINC, &PORTC, 0}, // C0 16 + {&DDRC, &PINC, &PORTC, 1}, // C1 17 + {&DDRC, &PINC, &PORTC, 2}, // C2 18 + {&DDRC, &PINC, &PORTC, 3}, // C3 19 + {&DDRC, &PINC, &PORTC, 4}, // C4 20 + {&DDRC, &PINC, &PORTC, 5}, // C5 21 + {&DDRC, &PINC, &PORTC, 6}, // C6 22 + {&DDRC, &PINC, &PORTC, 7}, // C7 23 + {&DDRA, &PINA, &PORTA, 7}, // A7 24 + {&DDRA, &PINA, &PORTA, 6}, // A6 25 + {&DDRA, &PINA, &PORTA, 5}, // A5 26 + {&DDRA, &PINA, &PORTA, 4}, // A4 27 + {&DDRA, &PINA, &PORTA, 3}, // A3 28 + {&DDRA, &PINA, &PORTA, 2}, // A2 29 + {&DDRA, &PINA, &PORTA, 1}, // A1 30 + {&DDRA, &PINA, &PORTA, 0} // A0 31 +}; +#else // VARIANT_MIGHTY +#error Undefined variant 1284, 644, 324, 64, 32 +#endif // VARIANT_MIGHTY +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega32U4__) +#ifdef CORE_TEENSY +// Teensy 2.0 +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 7}, // B7 4 + {&DDRD, &PIND, &PORTD, 0}, // D0 5 + {&DDRD, &PIND, &PORTD, 1}, // D1 6 + {&DDRD, &PIND, &PORTD, 2}, // D2 7 + {&DDRD, &PIND, &PORTD, 3}, // D3 8 + {&DDRC, &PINC, &PORTC, 6}, // C6 9 + {&DDRC, &PINC, &PORTC, 7}, // C7 10 + {&DDRD, &PIND, &PORTD, 6}, // D6 11 + {&DDRD, &PIND, &PORTD, 7}, // D7 12 + {&DDRB, &PINB, &PORTB, 4}, // B4 13 + {&DDRB, &PINB, &PORTB, 5}, // B5 14 + {&DDRB, &PINB, &PORTB, 6}, // B6 15 + {&DDRF, &PINF, &PORTF, 7}, // F7 16 + {&DDRF, &PINF, &PORTF, 6}, // F6 17 + {&DDRF, &PINF, &PORTF, 5}, // F5 18 + {&DDRF, &PINF, &PORTF, 4}, // F4 19 + {&DDRF, &PINF, &PORTF, 1}, // F1 20 + {&DDRF, &PINF, &PORTF, 0}, // F0 21 + {&DDRD, &PIND, &PORTD, 4}, // D4 22 + {&DDRD, &PIND, &PORTD, 5}, // D5 23 + {&DDRE, &PINE, &PORTE, 6} // E6 24 +}; +//------------------------------------------------------------------------------ +#else // CORE_TEENSY +// Leonardo +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 2}, // D2 0 + {&DDRD, &PIND, &PORTD, 3}, // D3 1 + {&DDRD, &PIND, &PORTD, 1}, // D1 2 + {&DDRD, &PIND, &PORTD, 0}, // D0 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRC, &PINC, &PORTC, 6}, // C6 5 + {&DDRD, &PIND, &PORTD, 7}, // D7 6 + {&DDRE, &PINE, &PORTE, 6}, // E6 7 + {&DDRB, &PINB, &PORTB, 4}, // B4 8 + {&DDRB, &PINB, &PORTB, 5}, // B5 9 + {&DDRB, &PINB, &PORTB, 6}, // B6 10 + {&DDRB, &PINB, &PORTB, 7}, // B7 11 + {&DDRD, &PIND, &PORTD, 6}, // D6 12 + {&DDRC, &PINC, &PORTC, 7}, // C7 13 + {&DDRB, &PINB, &PORTB, 3}, // B3 14 + {&DDRB, &PINB, &PORTB, 1}, // B1 15 + {&DDRB, &PINB, &PORTB, 2}, // B2 16 + {&DDRB, &PINB, &PORTB, 0}, // B0 17 + {&DDRF, &PINF, &PORTF, 7}, // F7 18 + {&DDRF, &PINF, &PORTF, 6}, // F6 19 + {&DDRF, &PINF, &PORTF, 5}, // F5 20 + {&DDRF, &PINF, &PORTF, 4}, // F4 21 + {&DDRF, &PINF, &PORTF, 1}, // F1 22 + {&DDRF, &PINF, &PORTF, 0}, // F0 23 + {&DDRD, &PIND, &PORTD, 4}, // D4 24 + {&DDRD, &PIND, &PORTD, 7}, // D7 25 + {&DDRB, &PINB, &PORTB, 4}, // B4 26 + {&DDRB, &PINB, &PORTB, 5}, // B5 27 + {&DDRB, &PINB, &PORTB, 6}, // B6 28 + {&DDRD, &PIND, &PORTD, 6} // D6 29 +}; +#endif // CORE_TEENSY +//------------------------------------------------------------------------------ +#elif defined(__AVR_AT90USB646__)\ +|| defined(__AVR_AT90USB1286__) +// Teensy++ 1.0 & 2.0 +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRD, &PIND, &PORTD, 5}, // D5 5 + {&DDRD, &PIND, &PORTD, 6}, // D6 6 + {&DDRD, &PIND, &PORTD, 7}, // D7 7 + {&DDRE, &PINE, &PORTE, 0}, // E0 8 + {&DDRE, &PINE, &PORTE, 1}, // E1 9 + {&DDRC, &PINC, &PORTC, 0}, // C0 10 + {&DDRC, &PINC, &PORTC, 1}, // C1 11 + {&DDRC, &PINC, &PORTC, 2}, // C2 12 + {&DDRC, &PINC, &PORTC, 3}, // C3 13 + {&DDRC, &PINC, &PORTC, 4}, // C4 14 + {&DDRC, &PINC, &PORTC, 5}, // C5 15 + {&DDRC, &PINC, &PORTC, 6}, // C6 16 + {&DDRC, &PINC, &PORTC, 7}, // C7 17 + {&DDRE, &PINE, &PORTE, 6}, // E6 18 + {&DDRE, &PINE, &PORTE, 7}, // E7 19 + {&DDRB, &PINB, &PORTB, 0}, // B0 20 + {&DDRB, &PINB, &PORTB, 1}, // B1 21 + {&DDRB, &PINB, &PORTB, 2}, // B2 22 + {&DDRB, &PINB, &PORTB, 3}, // B3 23 + {&DDRB, &PINB, &PORTB, 4}, // B4 24 + {&DDRB, &PINB, &PORTB, 5}, // B5 25 + {&DDRB, &PINB, &PORTB, 6}, // B6 26 + {&DDRB, &PINB, &PORTB, 7}, // B7 27 + {&DDRA, &PINA, &PORTA, 0}, // A0 28 + {&DDRA, &PINA, &PORTA, 1}, // A1 29 + {&DDRA, &PINA, &PORTA, 2}, // A2 30 + {&DDRA, &PINA, &PORTA, 3}, // A3 31 + {&DDRA, &PINA, &PORTA, 4}, // A4 32 + {&DDRA, &PINA, &PORTA, 5}, // A5 33 + {&DDRA, &PINA, &PORTA, 6}, // A6 34 + {&DDRA, &PINA, &PORTA, 7}, // A7 35 + {&DDRE, &PINE, &PORTE, 4}, // E4 36 + {&DDRE, &PINE, &PORTE, 5}, // E5 37 + {&DDRF, &PINF, &PORTF, 0}, // F0 38 + {&DDRF, &PINF, &PORTF, 1}, // F1 39 + {&DDRF, &PINF, &PORTF, 2}, // F2 40 + {&DDRF, &PINF, &PORTF, 3}, // F3 41 + {&DDRF, &PINF, &PORTF, 4}, // F4 42 + {&DDRF, &PINF, &PORTF, 5}, // F5 43 + {&DDRF, &PINF, &PORTF, 6}, // F6 44 + {&DDRF, &PINF, &PORTF, 7} // F7 45 +}; +//------------------------------------------------------------------------------ +#else // CPU type +#error unknown CPU type +#endif // CPU type +//------------------------------------------------------------------------------ +/** count of pins */ +static const uint8_t digitalPinCount = sizeof(pinMap)/sizeof(pin_map_t); +//============================================================================== +/** generate bad pin number error */ +void badPinNumber(void) + __attribute__((error("Pin number is too large or not a constant"))); +//------------------------------------------------------------------------------ +/** Check for valid pin number + * @param[in] pin Number of pin to be checked. + */ +static inline __attribute__((always_inline)) +void badPinCheck(uint8_t pin) { + if (!__builtin_constant_p(pin) || pin >= digitalPinCount) { + badPinNumber(); + } +} +//------------------------------------------------------------------------------ +/** fast write helper + * @param[in] address I/O register address + * @param[in] bit bit number to write + * @param[in] level value for bit + */ +static inline __attribute__((always_inline)) +void fastBitWriteSafe(volatile uint8_t* address, uint8_t bit, bool level) { + uint8_t oldSREG; + if (address > (uint8_t*)0X5F) { + oldSREG = SREG; + cli(); + } + if (level) { + *address |= 1 << bit; + } else { + *address &= ~(1 << bit); + } + if (address > (uint8_t*)0X5F) { + SREG = oldSREG; + } +} +//------------------------------------------------------------------------------ +/** read pin value + * @param[in] pin Arduino pin number + * @return value read + */ +static inline __attribute__((always_inline)) +bool fastDigitalRead(uint8_t pin) { + badPinCheck(pin); + return (*pinMap[pin].pin >> pinMap[pin].bit) & 1; +} +//------------------------------------------------------------------------------ +/** toggle a pin + * @param[in] pin Arduino pin number + * + * If the pin is in output mode toggle the pin level. + * If the pin is in input mode toggle the state of the 20K pullup. + */ +static inline __attribute__((always_inline)) +void fastDigitalToggle(uint8_t pin) { + badPinCheck(pin); + if (pinMap[pin].pin > (uint8_t*)0X5F) { + // must write bit to high address port + *pinMap[pin].pin = 1 << pinMap[pin].bit; + } else { + // will compile to sbi and PIN register will not be read. + *pinMap[pin].pin |= 1 << pinMap[pin].bit; + } +} +//------------------------------------------------------------------------------ +/** Set pin value + * @param[in] pin Arduino pin number + * @param[in] level value to write + */ +static inline __attribute__((always_inline)) +void fastDigitalWrite(uint8_t pin, bool level) { + badPinCheck(pin); + fastBitWriteSafe(pinMap[pin].port, pinMap[pin].bit, level); +} +//------------------------------------------------------------------------------ +/** set pin mode + * @param[in] pin Arduino pin number + * @param[in] mode if true set output mode else input mode + * + * fastPinMode does not enable or disable the 20K pullup for input mode. + */ +static inline __attribute__((always_inline)) +void fastPinMode(uint8_t pin, bool mode) { + badPinCheck(pin); + fastBitWriteSafe(pinMap[pin].ddr, pinMap[pin].bit, mode); +} + +#endif // __arm__ +//------------------------------------------------------------------------------ +/** set pin configuration + * @param[in] pin Arduino pin number + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ +static inline __attribute__((always_inline)) +void fastPinConfig(uint8_t pin, bool mode, bool level) { + fastPinMode(pin, mode); + fastDigitalWrite(pin, level); +} +//============================================================================== +/** + * @class DigitalPin + * @brief Fast digital port I/O + */ +template +class DigitalPin { + public: + //---------------------------------------------------------------------------- + /** Constructor */ + DigitalPin() {} + //---------------------------------------------------------------------------- + /** Constructor + * @param[in] pinMode if true set output mode else input mode. + */ + explicit DigitalPin(bool pinMode) { + mode(pinMode); + } + //---------------------------------------------------------------------------- + /** Constructor + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ + DigitalPin(bool mode, bool level) { + config(mode, level); + } + //---------------------------------------------------------------------------- + /** Asignment operator + * @param[in] value If true set the pin's level high else set the + * pin's level low. + * + * @return This DigitalPin instance. + */ + inline DigitalPin & operator = (bool value) __attribute__((always_inline)) { + write(value); + return *this; + } + //---------------------------------------------------------------------------- + /** Parenthesis operator + * @return Pin's level + */ + inline operator bool () const __attribute__((always_inline)) { + return read(); + } + //---------------------------------------------------------------------------- + /** set pin configuration + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ + inline __attribute__((always_inline)) + void config(bool mode, bool level) { + fastPinConfig(PinNumber, mode, level); + } + //---------------------------------------------------------------------------- + /** + * Set pin level high if output mode or enable 20K pullup if input mode. + */ + inline __attribute__((always_inline)) + void high() {write(true);} + //---------------------------------------------------------------------------- + /** + * Set pin level low if output mode or disable 20K pullup if input mode. + */ + inline __attribute__((always_inline)) + void low() {write(false);} + //---------------------------------------------------------------------------- + /** + * Set pin mode + * @param[in] pinMode if true set output mode else input mode. + * + * mode() does not enable or disable the 20K pullup for input mode. + */ + inline __attribute__((always_inline)) + void mode(bool pinMode) { + fastPinMode(PinNumber, pinMode); + } + //---------------------------------------------------------------------------- + /** @return Pin's level */ + inline __attribute__((always_inline)) + bool read() const { + return fastDigitalRead(PinNumber); + } + //---------------------------------------------------------------------------- + /** toggle a pin + * + * If the pin is in output mode toggle the pin's level. + * If the pin is in input mode toggle the state of the 20K pullup. + */ + inline __attribute__((always_inline)) + void toggle() { + fastDigitalToggle(PinNumber); + } + //---------------------------------------------------------------------------- + /** Write the pin's level. + * @param[in] value If true set the pin's level high else set the + * pin's level low. + */ + inline __attribute__((always_inline)) + void write(bool value) { + fastDigitalWrite(PinNumber, value); + } +}; +#endif // DigitalPin_h +/** @} */ \ No newline at end of file diff --git a/libs/SdFat-master/SdFat/utility/FatApiConstants.h b/libs/SdFat-master/SdFat/utility/FatApiConstants.h new file mode 100755 index 0000000..6a444c9 --- /dev/null +++ b/libs/SdFat-master/SdFat/utility/FatApiConstants.h @@ -0,0 +1,65 @@ +/* FatLib Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the FatLib Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the FatLib Library. If not, see + * . + */ +#ifndef FatApiConstants_h +#define FatApiConstants_h +//------------------------------------------------------------------------------ +// use the gnu style oflag in open() +/** open() oflag for reading */ +uint8_t const O_READ = 0X01; +/** open() oflag - same as O_IN */ +uint8_t const O_RDONLY = O_READ; +/** open() oflag for write */ +uint8_t const O_WRITE = 0X02; +/** open() oflag - same as O_WRITE */ +uint8_t const O_WRONLY = O_WRITE; +/** open() oflag for reading and writing */ +uint8_t const O_RDWR = (O_READ | O_WRITE); +/** open() oflag mask for access modes */ +uint8_t const O_ACCMODE = (O_READ | O_WRITE); +/** The file offset shall be set to the end of the file prior to each write. */ +uint8_t const O_APPEND = 0X04; +/** synchronous writes - call sync() after each write */ +uint8_t const O_SYNC = 0X08; +/** truncate the file to zero length */ +uint8_t const O_TRUNC = 0X10; +/** set the initial position at the end of the file */ +uint8_t const O_AT_END = 0X20; +/** create the file if nonexistent */ +uint8_t const O_CREAT = 0X40; +/** If O_CREAT and O_EXCL are set, open() shall fail if the file exists */ +uint8_t const O_EXCL = 0X80; + +// SdBaseFile class static and const definitions +// flags for ls() +/** ls() flag to print modify date */ +uint8_t const LS_DATE = 1; +/** ls() flag to print file size */ +uint8_t const LS_SIZE = 2; +/** ls() flag for recursive list of subdirectories */ +uint8_t const LS_R = 4; + +// flags for timestamp +/** set the file's last access date */ +uint8_t const T_ACCESS = 1; +/** set the file's creation date and time */ +uint8_t const T_CREATE = 2; +/** Set the file's write date and time */ +uint8_t const T_WRITE = 4; +#endif // FatApiConstants_h diff --git a/libs/SdFatBeta20120108/SdFat/SdFatStructs.h b/libs/SdFat-master/SdFat/utility/FatStructs.h similarity index 88% rename from libs/SdFatBeta20120108/SdFat/SdFatStructs.h rename to libs/SdFat-master/SdFat/utility/FatStructs.h index 4ea82b7..bf0da38 100755 --- a/libs/SdFatBeta20120108/SdFat/SdFatStructs.h +++ b/libs/SdFat-master/SdFat/utility/FatStructs.h @@ -1,7 +1,7 @@ -/* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman +/* FatLib Library + * Copyright (C) 2013 by William Greiman * - * This file is part of the Arduino SdFat Library + * This file is part of the FatLib Library * * This Library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,11 +14,11 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see + * along with the FatLib Library. If not, see * . */ -#ifndef SdFatStructs_h -#define SdFatStructs_h +#ifndef FatStructs_h +#define FatStructs_h /** * \file * \brief FAT file structures @@ -92,7 +92,7 @@ struct partitionTable { uint32_t firstSector; /** Length of the partition, in blocks. */ uint32_t totalSectors; -}; +}__attribute__((packed)); /** Type name for partitionTable */ typedef struct partitionTable part_t; //------------------------------------------------------------------------------ @@ -116,7 +116,7 @@ struct masterBootRecord { uint8_t mbrSig0; /** Second MBR signature byte. Must be 0XAA */ uint8_t mbrSig1; -}; +}__attribute__((packed)); /** Type name for masterBootRecord */ typedef struct masterBootRecord mbr_t; //------------------------------------------------------------------------------ @@ -130,7 +130,7 @@ struct fat_boot { /** * The first three bytes of the boot sector must be valid, * executable x 86-based CPU instructions. This includes a - * jump instruction that skips the next nonexecutable bytes. + * jump instruction that skips the next non-executable bytes. */ uint8_t jump[3]; /** @@ -173,7 +173,7 @@ struct fat_boot { * This field is the old 16-bit total count of sectors on the volume. * This count includes the count of all sectors in all four regions * of the volume. This field can be 0; if it is 0, then totalSectors32 - * must be nonzero. For FAT32 volumes, this field must be 0. For + * must be non-zero. For FAT32 volumes, this field must be 0. For * FAT12 and FAT16 volumes, this field contains the sector count, and * totalSectors32 is 0 if the total sector count fits * (is less than 0x10000). @@ -206,7 +206,7 @@ struct fat_boot { * This field is the new 32-bit total count of sectors on the volume. * This count includes the count of all sectors in all four regions * of the volume. This field can be 0; if it is 0, then - * totalSectors16 must be nonzero. + * totalSectors16 must be non-zero. */ uint32_t totalSectors32; /** @@ -244,7 +244,7 @@ struct fat_boot { uint8_t bootSectorSig0; /** must be 0XAA */ uint8_t bootSectorSig1; -}; +}__attribute__((packed)); /** Type name for FAT Boot Sector */ typedef struct fat_boot fat_boot_t; //------------------------------------------------------------------------------ @@ -258,7 +258,7 @@ struct fat32_boot { /** * The first three bytes of the boot sector must be valid, * executable x 86-based CPU instructions. This includes a - * jump instruction that skips the next nonexecutable bytes. + * jump instruction that skips the next non-executable bytes. */ uint8_t jump[3]; /** @@ -299,7 +299,7 @@ struct fat32_boot { /** * This dates back to the old MS-DOS 1.x media determination and is * no longer usually used for anything. 0xF8 is the standard value - * for fixed (nonremovable) media. For removable media, 0xF0 is + * for fixed (non-removable) media. For removable media, 0xF0 is * frequently used. Legal values are 0xF0 or 0xF8-0xFF. */ uint8_t mediaType; @@ -354,7 +354,7 @@ struct fat32_boot { */ uint16_t fat32FSInfo; /** - * If nonzero, indicates the sector number in the reserved area + * If non-zero, indicates the sector number in the reserved area * of the volume of a copy of the boot record. Usually 6. * No value other than 6 is recommended. */ @@ -398,7 +398,7 @@ struct fat32_boot { uint8_t bootSectorSig0; /** must be 0XAA */ uint8_t bootSectorSig1; -}; +}__attribute__((packed)); /** Type name for FAT32 Boot Sector */ typedef struct fat32_boot fat32_boot_t; //------------------------------------------------------------------------------ @@ -438,7 +438,7 @@ struct fat32_fsinfo { uint8_t reserved2[12]; /** must be 0X00, 0X00, 0X55, 0XAA */ uint8_t tailSignature[4]; -}; +}__attribute__((packed)); /** Type name for FAT32 FSINFO Sector */ typedef struct fat32_fsinfo fat32_fsinfo_t; //------------------------------------------------------------------------------ @@ -536,7 +536,7 @@ struct directoryEntry { uint16_t firstClusterLow; /** 32-bit unsigned holding this file's size in bytes. */ uint32_t fileSize; -}; +}__attribute__((packed)); //------------------------------------------------------------------------------ // Definitions for directory entries // @@ -601,4 +601,78 @@ static inline uint8_t DIR_IS_SUBDIR(const dir_t* dir) { static inline uint8_t DIR_IS_FILE_OR_SUBDIR(const dir_t* dir) { return (dir->attributes & DIR_ATT_VOLUME_ID) == 0; } -#endif // SdFatStructs_h +/** date field for FAT directory entry + * \param[in] year [1980,2107] + * \param[in] month [1,12] + * \param[in] day [1,31] + * + * \return Packed date for dir_t entry. + */ +static inline uint16_t FAT_DATE(uint16_t year, uint8_t month, uint8_t day) { + return (year - 1980) << 9 | month << 5 | day; +} +/** year part of FAT directory date field + * \param[in] fatDate Date in packed dir format. + * + * \return Extracted year [1980,2107] + */ +static inline uint16_t FAT_YEAR(uint16_t fatDate) { + return 1980 + (fatDate >> 9); +} +/** month part of FAT directory date field + * \param[in] fatDate Date in packed dir format. + * + * \return Extracted month [1,12] + */ +static inline uint8_t FAT_MONTH(uint16_t fatDate) { + return (fatDate >> 5) & 0XF; +} +/** day part of FAT directory date field + * \param[in] fatDate Date in packed dir format. + * + * \return Extracted day [1,31] + */ +static inline uint8_t FAT_DAY(uint16_t fatDate) { + return fatDate & 0X1F; +} +/** time field for FAT directory entry + * \param[in] hour [0,23] + * \param[in] minute [0,59] + * \param[in] second [0,59] + * + * \return Packed time for dir_t entry. + */ +static inline uint16_t FAT_TIME(uint8_t hour, uint8_t minute, uint8_t second) { + return hour << 11 | minute << 5 | second >> 1; +} +/** hour part of FAT directory time field + * \param[in] fatTime Time in packed dir format. + * + * \return Extracted hour [0,23] + */ +static inline uint8_t FAT_HOUR(uint16_t fatTime) { + return fatTime >> 11; +} +/** minute part of FAT directory time field + * \param[in] fatTime Time in packed dir format. + * + * \return Extracted minute [0,59] + */ +static inline uint8_t FAT_MINUTE(uint16_t fatTime) { + return(fatTime >> 5) & 0X3F; +} +/** second part of FAT directory time field + * Note second/2 is stored in packed time. + * + * \param[in] fatTime Time in packed dir format. + * + * \return Extracted second [0,58] + */ +static inline uint8_t FAT_SECOND(uint16_t fatTime) { + return 2*(fatTime & 0X1F); +} +/** Default date for file timestamps is 1 Jan 2000 */ +uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1; +/** Default time for file timestamp is 1 am */ +uint16_t const FAT_DEFAULT_TIME = (1 << 11); +#endif // FatStructs_h diff --git a/libs/SdFat-master/SdFat/utility/FmtNumber.cpp b/libs/SdFat-master/SdFat/utility/FmtNumber.cpp new file mode 100755 index 0000000..1c3e704 --- /dev/null +++ b/libs/SdFat-master/SdFat/utility/FmtNumber.cpp @@ -0,0 +1,405 @@ +/* FatLib Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the FatLib Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the FatLib Library. If not, see + * . + */ +#include +#include +// Use Stimmer div/mod 10 on avr +#ifdef __AVR__ +#define USE_STIMMER +#endif // __AVR__ +//------------------------------------------------------------------------------ +// Stimmer div/mod 10 for AVR +// this code fragment works out i/10 and i%10 by calculating +// i*(51/256)*(256/255)/2 == i*51/510 == i/10 +// by "j.k" I mean 32.8 fixed point, j is integer part, k is fractional part +// j.k = ((j+1.0)*51.0)/256.0 +// (we add 1 because we will be using the floor of the result later) +// divmod10_asm16 and divmod10_asm32 are public domain code by Stimmer. +// http://forum.arduino.cc/index.php?topic=167414.msg1293679#msg1293679 +#define divmod10_asm16(in32, mod8, tmp8) \ +asm volatile( \ + " ldi %2,51 \n\t" \ + " mul %A0,%2 \n\t" \ + " clr %A0 \n\t" \ + " add r0,%2 \n\t" \ + " adc %A0,r1 \n\t" \ + " mov %1,r0 \n\t" \ + " mul %B0,%2 \n\t" \ + " clr %B0 \n\t" \ + " add %A0,r0 \n\t" \ + " adc %B0,r1 \n\t" \ + " clr r1 \n\t" \ + " add %1,%A0 \n\t" \ + " adc %A0,%B0 \n\t" \ + " adc %B0,r1 \n\t" \ + " add %1,%B0 \n\t" \ + " adc %A0,r1 \n\t" \ + " adc %B0,r1 \n\t" \ + " lsr %B0 \n\t" \ + " ror %A0 \n\t" \ + " ror %1 \n\t" \ + " ldi %2,10 \n\t" \ + " mul %1,%2 \n\t" \ + " mov %1,r1 \n\t" \ + " clr r1 \n\t" \ + :"+r"(in32), "=d"(mod8), "=d"(tmp8) : : "r0") + +#define divmod10_asm32(in32, mod8, tmp8) \ +asm volatile( \ + " ldi %2,51 \n\t" \ + " mul %A0,%2 \n\t" \ + " clr %A0 \n\t" \ + " add r0,%2 \n\t" \ + " adc %A0,r1 \n\t" \ + " mov %1,r0 \n\t" \ + " mul %B0,%2 \n\t" \ + " clr %B0 \n\t" \ + " add %A0,r0 \n\t" \ + " adc %B0,r1 \n\t" \ + " mul %C0,%2 \n\t" \ + " clr %C0 \n\t" \ + " add %B0,r0 \n\t" \ + " adc %C0,r1 \n\t" \ + " mul %D0,%2 \n\t" \ + " clr %D0 \n\t" \ + " add %C0,r0 \n\t" \ + " adc %D0,r1 \n\t" \ + " clr r1 \n\t" \ + " add %1,%A0 \n\t" \ + " adc %A0,%B0 \n\t" \ + " adc %B0,%C0 \n\t" \ + " adc %C0,%D0 \n\t" \ + " adc %D0,r1 \n\t" \ + " add %1,%B0 \n\t" \ + " adc %A0,%C0 \n\t" \ + " adc %B0,%D0 \n\t" \ + " adc %C0,r1 \n\t" \ + " adc %D0,r1 \n\t" \ + " add %1,%D0 \n\t" \ + " adc %A0,r1 \n\t" \ + " adc %B0,r1 \n\t" \ + " adc %C0,r1 \n\t" \ + " adc %D0,r1 \n\t" \ + " lsr %D0 \n\t" \ + " ror %C0 \n\t" \ + " ror %B0 \n\t" \ + " ror %A0 \n\t" \ + " ror %1 \n\t" \ + " ldi %2,10 \n\t" \ + " mul %1,%2 \n\t" \ + " mov %1,r1 \n\t" \ + " clr r1 \n\t" \ + :"+r"(in32), "=d"(mod8), "=d"(tmp8) : : "r0") +//------------------------------------------------------------------------------ +/* +// C++ code is based on this version of divmod10 by robtillaart. +// http://forum.arduino.cc/index.php?topic=167414.msg1246851#msg1246851 +// from robtillaart post: +// The code is based upon the divu10() code from the book Hackers Delight1. +// My insight was that the error formula in divu10() was in fact modulo 10 +// but not always. Sometimes it was 10 more. +void divmod10(uint32_t in, uint32_t &div, uint32_t &mod) +{ + // q = in * 0.8; + uint32_t q = (in >> 1) + (in >> 2); + q = q + (q >> 4); + q = q + (q >> 8); + q = q + (q >> 16); // not needed for 16 bit version + + // q = q / 8; ==> q = in *0.1; + q = q >> 3; + + // determine error + uint32_t r = in - ((q << 3) + (q << 1)); // r = in - q*10; + div = q + (r > 9); + if (r > 9) mod = r - 10; + else mod = r; +} +// Hackers delight function is here: +// http://www.hackersdelight.org/hdcodetxt/divuc.c.txt +// Code below uses 8/10 = 0.1100 1100 1100 1100 1100 1100 1100 1100. +// 15 ops including the multiply, or 17 elementary ops. +unsigned divu10(unsigned n) { + unsigned q, r; + + q = (n >> 1) + (n >> 2); + q = q + (q >> 4); + q = q + (q >> 8); + q = q + (q >> 16); + q = q >> 3; + r = n - q*10; + return q + ((r + 6) >> 4); +// return q + (r > 9); +} +*/ +//------------------------------------------------------------------------------ + +static const float m[] PROGMEM = {1e-1, 1e-2, 1e-4, 1e-8, 1e-16, 1e-32}; +static const float p[] PROGMEM = {1e+1, 1e+2, 1e+4, 1e+8, 1e+16, 1e+32}; +// scale float v by power of ten. return v*10^n +float scale10(float v, int8_t n) { + const float *s; + if (n < 0) { + n = -n; + s = m; + } else { + s = p; + } + n &= 63; + for (uint8_t i = 0; n; n >>= 1, i++) { + if (n & 1) v *= pgm_read_float(&s[i]); + } + return v; +} +//------------------------------------------------------------------------------ +// Format 16-bit unsigned +char* fmtDec(uint16_t n, char* p) { + while (n > 9) { +#ifdef USE_STIMMER + uint8_t tmp8, r; + divmod10_asm16(n, r, tmp8); +#else // USE_STIMMER + uint16_t t = n; + n = (n >> 1) + (n >> 2); + n = n + (n >> 4); + n = n + (n >> 8); + // n = n + (n >> 16); // no code for 16-bit n + n = n >> 3; + uint8_t r = t - (((n << 2) + n) << 1); + if (r > 9) { + n++; + r -= 10; + } +#endif // USE_STIMMER + *--p = r + '0'; + } + *--p = n + '0'; + return p; +} +//------------------------------------------------------------------------------ +// format 32-bit unsigned +char* fmtDec(uint32_t n, char* p) { + while (n >> 16) { +#ifdef USE_STIMMER + uint8_t tmp8, r; + divmod10_asm32(n, r, tmp8); +#else // USE_STIMMER + uint32_t t = n; + n = (n >> 1) + (n >> 2); + n = n + (n >> 4); + n = n + (n >> 8); + n = n + (n >> 16); + n = n >> 3; + uint8_t r = t - (((n << 2) + n) << 1); + if (r > 9) { + n++; + r -= 10; + } +#endif // USE_STIMMER + *--p = r + '0'; + } + return fmtDec((uint16_t)n, p); +} +//------------------------------------------------------------------------------ +char* fmtFloat(float value, char* p, uint8_t prec) { + char sign = value < 0 ? '-' : 0; + if (sign) value = -value; + + if (isnan(value)) { + *--p = 'n'; + *--p = 'a'; + *--p = 'n'; + return p; + } + if (isinf(value)) { + *--p = 'f'; + *--p = 'n'; + *--p = 'i'; + return p; + } + if (value > 4294967040.0) { + *--p = 'f'; + *--p = 'v'; + *--p = 'o'; + return p; + } + if (prec > 9) prec = 9; + value += scale10(0.5, -prec); + + uint32_t whole = value; + if (prec) { + char* tmp = p - prec; + uint32_t fraction = scale10(value - whole, prec); + p = fmtDec(fraction, p); + while (p > tmp) *--p = '0'; + *--p = '.'; + } + p = fmtDec(whole, p); + if (sign) *--p = sign; + return p; +} +//------------------------------------------------------------------------------ +/** Print a number followed by a field terminator. + * \param[in] value The number to be printed. + * \param[in] ptr Pointer to last char in buffer. + * \param[in] prec Number of digits after decimal point. + * \param[in] expChar Use exp format if non zero. + * \return Pointer to first character of result. + */ +char* fmtFloat(float value, char* ptr, uint8_t prec, char expChar) { + bool neg = value < 0; + if (neg) value = -value; + + // check for nan inf ovf + if (isnan(value)) { + *--ptr = 'n'; + *--ptr = 'a'; + *--ptr = 'n'; + return ptr; + } + if (isinf(value)) { + *--ptr = 'f'; + *--ptr = 'n'; + *--ptr = 'i'; + return ptr; + } + if (!expChar && value > 4294967040.0) { + *--ptr = 'f'; + *--ptr = 'v'; + *--ptr = 'o'; + return ptr; + } + if (prec > 9) prec = 9; + float round = scale10(0.5, -prec); + if (expChar) { + int8_t exp = 0; + bool expNeg = false; + if (value) { + while (value > 10.0) { + value *= 0.1; + exp++; + } + while (value < 1.0) { + value *= 10.0; + exp--; + } + value += round; + if (value > 10.0) { + value *= 0.1; + exp++; + } + expNeg = exp < 0; + if (expNeg) exp = -exp; + } + ptr = fmtDec((uint16_t)exp, ptr); + if (exp < 10) *--ptr = '0'; + *--ptr = expNeg ? '-' : '+'; + *--ptr = expChar; + } else { + // round value + value += round; + } + uint32_t whole = value; + if (prec) { + char* tmp = ptr - prec; + uint32_t fraction = scale10(value - whole, prec); + ptr = fmtDec(fraction, ptr); + while (ptr > tmp) *--ptr = '0'; + *--ptr = '.'; + } + ptr = fmtDec(whole, ptr); + if (neg) *--ptr = '-'; + return ptr; +} +//------------------------------------------------------------------------------ +char* fmtHex(uint32_t n, char* p) { + do { + uint8_t h = n & 0XF; + *--p = h + (h < 10 ? '0' : 'A' - 10); + n >>= 4; + } while (n); + return p; +} +//------------------------------------------------------------------------------ +float scanFloat(const char* str, char** ptr) { + int16_t const EXP_LIMIT = 100; + bool digit = false; + bool dot = false; + uint32_t fract = 0; + int fracExp = 0; + uint8_t nd = 0; + bool neg; + int c; + float v; + const char* successPtr; + + if (ptr) *ptr = const_cast(str); + + while (isspace((c = *str++))) {} + neg = c == '-'; + if (c == '-' || c == '+') c = *str++; + // Skip leading zeros + while (c == '0') { + c = *str++; + digit = true; + } + for (;;) { + if (isdigit(c)) { + digit = true; + if (nd < 9) { + fract = 10*fract + c - '0'; + nd++; + if (dot) fracExp--; + } else { + if (!dot) fracExp++; + } + } else if (c == '.') { + if (dot) goto fail; + dot = true; + } else { + if (!digit) goto fail; + break; + } + successPtr = str; + c = *str++; + } + if (c == 'e' || c == 'E') { + int exp = 0; + c = *str++; + bool expNeg = c == '-'; + if (c == '-' || c == '+') { + c = *str++; + } + while (isdigit(c)) { + if (exp > EXP_LIMIT) goto fail; + exp = 10*exp + c - '0'; + successPtr = str; + c = *str++; + } + fracExp += expNeg ? -exp : exp; + } + if (ptr) *ptr = const_cast(successPtr); + v = scale10(static_cast(fract), fracExp); + return neg ? -v: v; + + fail: + return 0; +} + + diff --git a/libs/SdFat-master/SdFat/utility/FmtNumber.h b/libs/SdFat-master/SdFat/utility/FmtNumber.h new file mode 100755 index 0000000..dd11018 --- /dev/null +++ b/libs/SdFat-master/SdFat/utility/FmtNumber.h @@ -0,0 +1,30 @@ +/* FatLib Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the FatLib Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the FatLib Library. If not, see + * . + */ +#ifndef FmtNumber_h +#define FmtNumber_h +#include +char* fmtDec(uint16_t n, char* p); +char* fmtDec(uint32_t n, char* p); +char* fmtFloat(float value, char* p, uint8_t prec); +char* fmtFloat(float value, char* ptr, uint8_t prec, char expChar); +char* fmtHex(uint32_t n, char* p); +float scale10(float v, int8_t n); +float scanFloat(const char* str, char** ptr); +#endif // FmtNumber_h diff --git a/libs/SdFat-master/SdFat/utility/SoftSPI.h b/libs/SdFat-master/SdFat/utility/SoftSPI.h new file mode 100755 index 0000000..036fad6 --- /dev/null +++ b/libs/SdFat-master/SdFat/utility/SoftSPI.h @@ -0,0 +1,162 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Software SPI. + * + * @defgroup softSPI Software SPI + * @details Software SPI Template Class. + * @{ + */ + +#ifndef SoftSPI_h +#define SoftSPI_h +#include +//------------------------------------------------------------------------------ +/** Nop for timing. */ +#define nop asm volatile ("nop\n\t") +//------------------------------------------------------------------------------ +/** Pin Mode for MISO is input.*/ +const bool MISO_MODE = false; +/** Pullups disabled for MISO are disabled. */ +const bool MISO_LEVEL = false; +/** Pin Mode for MOSI is output.*/ +const bool MOSI_MODE = true; +/** Pin Mode for SCK is output. */ +const bool SCK_MODE = true; +//------------------------------------------------------------------------------ +/** + * @class SoftSPI + * @brief Fast software SPI. + */ +template +class SoftSPI { + public: + //---------------------------------------------------------------------------- + /** Initialize SoftSPI pins. */ + void begin() { + fastPinConfig(MisoPin, MISO_MODE, MISO_LEVEL); + fastPinConfig(MosiPin, MOSI_MODE, !MODE_CPHA(Mode)); + fastPinConfig(SckPin, SCK_MODE, MODE_CPOL(Mode)); + } + //---------------------------------------------------------------------------- + /** Soft SPI receive byte. + * @return Data byte received. + */ + inline __attribute__((always_inline)) + uint8_t receive() { + uint8_t data = 0; + receiveBit(7, &data); + receiveBit(6, &data); + receiveBit(5, &data); + receiveBit(4, &data); + receiveBit(3, &data); + receiveBit(2, &data); + receiveBit(1, &data); + receiveBit(0, &data); + return data; + } + //---------------------------------------------------------------------------- + /** Soft SPI send byte. + * @param[in] data Data byte to send. + */ + inline __attribute__((always_inline)) + void send(uint8_t data) { + sendBit(7, data); + sendBit(6, data); + sendBit(5, data); + sendBit(4, data); + sendBit(3, data); + sendBit(2, data); + sendBit(1, data); + sendBit(0, data); + } + //---------------------------------------------------------------------------- + /** Soft SPI transfer byte. + * @param[in] txData Data byte to send. + * @return Data byte received. + */ + inline __attribute__((always_inline)) + uint8_t transfer(uint8_t txData) { + uint8_t rxData = 0; + transferBit(7, &rxData, txData); + transferBit(6, &rxData, txData); + transferBit(5, &rxData, txData); + transferBit(4, &rxData, txData); + transferBit(3, &rxData, txData); + transferBit(2, &rxData, txData); + transferBit(1, &rxData, txData); + transferBit(0, &rxData, txData); + return rxData; + } + + private: + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + bool MODE_CPHA(uint8_t mode) {return (mode & 1) != 0;} + inline __attribute__((always_inline)) + bool MODE_CPOL(uint8_t mode) {return (mode & 2) != 0;} + inline __attribute__((always_inline)) + void receiveBit(uint8_t bit, uint8_t* data) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + nop; + nop; + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + if (fastDigitalRead(MisoPin)) *data |= 1 << bit; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void sendBit(uint8_t bit, uint8_t data) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + fastDigitalWrite(MosiPin, data & (1 << bit)); + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + nop; + nop; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void transferBit(uint8_t bit, uint8_t* rxData, uint8_t txData) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + fastDigitalWrite(MosiPin, txData & (1 << bit)); + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + if (fastDigitalRead(MisoPin)) *rxData |= 1 << bit; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- +}; +#endif // SoftSPI_h +/** @} */ diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.cpp b/libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.cpp similarity index 83% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.cpp rename to libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.cpp index 4c23e1c..1fc3435 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.cpp +++ b/libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.cpp @@ -22,10 +22,19 @@ static uint16_t failCount; static uint16_t testCount; static Print* testOut = &Serial; //------------------------------------------------------------------------------ -void testBegin(Print* pr) { - testOut = pr; +static size_t strlenPGM(PGM_P str) { + PGM_P end = str; + while (pgm_read_byte(end++)) {} + return end - str; +} +//------------------------------------------------------------------------------ +void testBegin() { + Serial.begin(9600); + while (!Serial) {} // wait for leonardo + testOut = &Serial; SerialPrintln_P(PSTR("Type any character to begin.")); - while (!Serial.available()); + while (Serial.read() <= 0) {} + delay(200); // Catch Due reset problem print_P(testOut, PSTR("FreeRam: ")); testOut->println(FreeRam()); @@ -62,12 +71,12 @@ void testVerify_P(char* result, PGM_P expect) { testOut->print("\",\""); print_P(testOut, expect); testOut->write('"'); - uint8_t n = strlen(result) + strlen_P(expect) + 5; + uint8_t n = strlen(result) + strlenPGM(expect) + 5; testResult(!strcmp_P(result, expect), n); } //------------------------------------------------------------------------------ void testVerify_P(bool b, PGM_P msg) { print_P(testOut, msg); - uint8_t n = strlen_P(msg); + uint8_t n = strlenPGM(msg); testResult(b, n); } diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.h b/libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.h similarity index 78% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.h rename to libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.h index 47634f5..736f67f 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/SdFatTestSuite.h +++ b/libs/SdFat-master/SdFatTestSuite/SdFatTestSuite.h @@ -21,11 +21,24 @@ #define SdFatTestSuite_h #include #include + +#if defined(__arm__) && !defined(strcmp_P) +#define strcmp_P(a, b) strcmp((a), (b)) +#endif // strcmp_P + +#if defined(__arm__) && !defined(strncpy_P) +#define strncpy_P(s, t, n) strncpy(s, t, n) +#endif // strncpy_P + +#if defined(__arm__) && !defined(strlen_P) +#define strlen_P(str) strlen(str) +#endif // strlen_P + #define testVerifyBool(result) testVerify_P(result, PSTR(#result)) #define testVerifyMsg(result, msg) testVerify_P(result, PSTR(msg)) #define testVerifyStr(result, expect) testVerify_P(result, PSTR(expect)) -void testBegin(Print* pr); +void testBegin(); void testEnd(); void testVerify_P(bool b, PGM_P msg); void testVerify_P(char* result, PGM_P expect); diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.pde b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino similarity index 96% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.pde rename to libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino index 2349a85..215c735 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino @@ -11,10 +11,10 @@ void setup() { boolean b; SdFile f; uint32_t fs; - Serial.begin(9600); - testBegin(&Serial); - ATS_PrintTestStatus("SD.init()", b = SD.init()); + testBegin(); + + ATS_PrintTestStatus("SD.begin()", b = SD.begin()); if (!b) goto done; SD.remove("test.txt"); diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino similarity index 97% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde rename to libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino index 233bccb..74e7ff6 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino @@ -8,10 +8,10 @@ SdFat SD; void setup() { boolean b; SdFile f; - Serial.begin(9600); - testBegin(&Serial); - ATS_PrintTestStatus("SD.init()", b = SD.init()); + testBegin(); + + ATS_PrintTestStatus("SD.begin()", b = SD.begin()); if (!b) goto done; ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf.txt")); diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.pde b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino similarity index 97% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.pde rename to libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino index 489708e..221d1d7 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino @@ -10,10 +10,10 @@ SdFat SD; void setup() { boolean b; SdFile f; - Serial.begin(9600); - testBegin(&Serial); - ATS_PrintTestStatus("SD.init()", b = SD.init()); + testBegin(); + + ATS_PrintTestStatus("SD.begin()", b = SD.begin()); if (!b) goto done; SD.remove("test.txt"); diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/fstreamTest/fstreamTest.pde b/libs/SdFat-master/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino similarity index 97% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/fstreamTest/fstreamTest.pde rename to libs/SdFat-master/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino index 0df88e7..5b18b14 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/fstreamTest/fstreamTest.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino @@ -82,9 +82,9 @@ void testPosition() { } //------------------------------------------------------------------------------ void setup() { - Serial.begin(9600); - testBegin(&Serial); - if (!sd.init()) sd.initErrorHalt(); + + testBegin(); + if (!sd.begin()) sd.initErrorHalt(); fstreamOpen(); testPosition(); testEnd(); diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/istreamTest/istreamTest.pde b/libs/SdFat-master/SdFatTestSuite/examples/istreamTest/istreamTest.ino similarity index 71% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/istreamTest/istreamTest.pde rename to libs/SdFat-master/SdFatTestSuite/examples/istreamTest/istreamTest.ino index 578c579..3407cc4 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/istreamTest/istreamTest.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/istreamTest/istreamTest.ino @@ -4,6 +4,7 @@ char buf[100]; ibufstream ib; #define ibInit(s) ibInit_P(PSTR(s)) + //---------------------------------------------------------- void ibInit_P(PGM_P p) { if (strlen_P(p) >= sizeof(buf)) { @@ -22,12 +23,12 @@ void istreamBool() { testVerifyBool((ib >> b) && !b); testVerifyBool((ib >> b) && b); testVerifyBool(!(ib >> b) && !ib.good()); - + ibInit(" true false err"); testVerifyBool((ib >> boolalpha >> b) && b && ib.good()); testVerifyBool((ib >> b) && !b && ib.good()); testVerifyBool(!(ib >> b) && ib.fail()); - + ibInit("1"); testVerifyBool((ib >> noboolalpha >> b) && b && ib.eof()); } @@ -36,7 +37,7 @@ void istreamChar() { char c; signed char sc; unsigned char uc; - + ibInit("c s u g"); testVerifyBool((ib >> c) && ib.good() && c == 'c'); testVerifyBool((ib >> sc) && ib.good() && sc == 's'); @@ -47,8 +48,8 @@ void istreamChar() { testVerifyBool(ib.get() == -1 && ib.eof()); } //------------------------------------------------------------------------------ -void istreamFloat() { - float f; +void istreamDouble() { + double f; ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567"); testVerifyBool((ib >> f) && f == 0 && ib.good()); testVerifyBool((ib >> f) && f == 0.1 && ib.good()); @@ -63,6 +64,22 @@ void istreamFloat() { if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8); } //------------------------------------------------------------------------------ +void istreamFloat() { + float f; + ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567"); + testVerifyBool((ib >> f) && f == 0 && ib.good()); + testVerifyBool((ib >> f) && f == 0.1f && ib.good()); + testVerifyBool((ib >> f) && f == 1.0 && ib.good()); + testVerifyBool((ib >> f) && f == 2.0 && ib.good()); + testVerifyBool((ib >> f) && f == 3.4f && ib.good()); + testVerifyBool((ib >> f) && f == 10000.0 && ib.good()); + testVerifyBool((ib >> f) && f == 1e5 && ib.good()); + testVerifyBool((ib >> f) && f == -1E6 && ib.good()); + testVerifyBool((ib >> f) && f == 2.3e-3f && ib.good()); + testVerifyBool((ib >> f) && fabs(f + 123.4567f) < 1e-5 && ib.eof()); + if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8); +} +//------------------------------------------------------------------------------ void istreamGet() { char s[4]; ibInit("ab c"); @@ -71,7 +88,7 @@ void istreamGet() { testVerifyBool(ib.get() == ' ' && ib.good() && ib.gcount() == 1); testVerifyBool(ib.get() == 'c' && ib.good() && ib.gcount() == 1); testVerifyBool(ib.get() == -1 && ib.eof() && ib.gcount() == 0); - + ibInit("ab\ncdef"); ib.get(s, sizeof(s)); testVerifyBool(ib.good() && ib.gcount() == 2); @@ -83,7 +100,7 @@ void istreamGet() { ib.get(s, sizeof(s)); testVerifyBool(ib.eof() && ib.gcount() == 1); testVerifyStr(s, "f"); - + ibInit( "short line\n" "\n" @@ -122,7 +139,7 @@ void istreamNumber() { long l; signed long sl; unsigned long ul; - + ibInit("-32769"); testVerifyBool(!(ib >> s) && ib.fail()); ibInit("-32768 0 32767 32768"); @@ -138,33 +155,55 @@ void istreamNumber() { testVerifyBool((ib >> ss) && ss == 0 && ib.good()); testVerifyBool((ib >> ss) && ss == 32767 && ib.good()); testVerifyBool(!(ib >> ss) && ib.fail()); - + ibInit("0 65535 65536"); testVerifyBool((ib >> us) && us == 0 && ib.good()); testVerifyBool((ib >> us) && us == 65535 && ib.good()); testVerifyBool(!(ib >> us) && ib.fail()); - ibInit("-32769"); - testVerifyBool(!(ib >> i) && ib.fail()); - ibInit("-32768 0 32767 32768"); - testVerifyBool((ib >> i) && i == -32768 && ib.good()); - testVerifyBool((ib >> i) && i == 0 && ib.good()); - testVerifyBool((ib >> i) && i == 32767 && ib.good()); - testVerifyBool(!(ib >> i) && ib.fail()); +if (sizeof(int) == 2) { + ibInit("-32769"); + testVerifyBool(!(ib >> i) && ib.fail()); + ibInit("-32768 0 32767 32768"); + testVerifyBool((ib >> i) && i == -32768 && ib.good()); + testVerifyBool((ib >> i) && i == 0 && ib.good()); + testVerifyBool((ib >> i) && i == 32767 && ib.good()); + testVerifyBool(!(ib >> i) && ib.fail()); - ibInit("-32769"); - testVerifyBool(!(ib >> si) && ib.fail()); - ibInit("-32768 0 32767 32768"); - testVerifyBool((ib >> si) && si == -32768 && ib.good()); - testVerifyBool((ib >> si) && si == 0 && ib.good()); - testVerifyBool((ib >> si) && si == 32767 && ib.good()); - testVerifyBool(!(ib >> si) && ib.fail()); - - ibInit("0 65535 65536"); - testVerifyBool((ib >> ui) && ui == 0 && ib.good()); - testVerifyBool((ib >> ui) && ui == 65535 && ib.good()); - testVerifyBool(!(ib >> ui) && ib.fail()); - + ibInit("-32769"); + testVerifyBool(!(ib >> si) && ib.fail()); + ibInit("-32768 0 32767 32768"); + testVerifyBool((ib >> si) && si == -32768 && ib.good()); + testVerifyBool((ib >> si) && si == 0 && ib.good()); + testVerifyBool((ib >> si) && si == 32767 && ib.good()); + testVerifyBool(!(ib >> si) && ib.fail()); + + ibInit("0 65535 65536"); + testVerifyBool((ib >> ui) && ui == 0 && ib.good()); + testVerifyBool((ib >> ui) && ui == 65535 && ib.good()); + testVerifyBool(!(ib >> ui) && ib.fail()); + } else { + ibInit("-2147483649"); + testVerifyBool(!(ib >> i) && ib.fail()); + ibInit("-2147483648 0 2147483647 2147483648"); + testVerifyBool((ib >> i) && i == -2147483648 && ib.good()); + testVerifyBool((ib >> i) && i == 0 && ib.good()); + testVerifyBool((ib >> i) && i == 2147483647 && ib.good()); + testVerifyBool(!(ib >> i) && ib.fail()); + + ibInit("-2147483649"); + testVerifyBool(!(ib >> si) && ib.fail()); + ibInit("-2147483648 0 2147483647 2147483648"); + testVerifyBool((ib >> si) && si == -2147483648 && ib.good()); + testVerifyBool((ib >> si) && si == 0 && ib.good()); + testVerifyBool((ib >> si) && si == 2147483647 && ib.good()); + testVerifyBool(!(ib >> si) && ib.fail()); + + ibInit("0 4294967295 4294967296"); + testVerifyBool((ib >> ui) && ui == 0 && ib.good()); + testVerifyBool((ib >> ui) && ui == 4294967295 && ib.good()); + testVerifyBool(!(ib >> ui) && ib.fail()); + } ibInit("-2147483649"); testVerifyBool(!(ib >> l) && ib.fail()); ibInit("-2147483648 0 2147483647 2147483648"); @@ -180,12 +219,12 @@ void istreamNumber() { testVerifyBool((ib >> sl) && sl == 0 && ib.good()); testVerifyBool((ib >> sl) && sl == 2147483647 && ib.good()); testVerifyBool(!(ib >> sl) && ib.fail()); - + ibInit("0 4294967295 4294967296"); testVerifyBool((ib >> ul) && ul == 0 && ib.good()); testVerifyBool((ib >> ul) && ul == 4294967295 && ib.good()); testVerifyBool(!(ib >> ul) && ib.fail()); - + // octal hex ibInit("123 abc 0xdef 0XABC 567"); testVerifyBool((ib >> oct >> i) && i == 83); @@ -207,10 +246,10 @@ void istreamStr() { } //------------------------------------------------------------------------------ void setup() { - Serial.begin(9600); - testBegin(&Serial); + testBegin(); istreamBool(); istreamChar(); + istreamDouble(); istreamFloat(); istreamGet(); istreamNumber(); @@ -218,4 +257,4 @@ void setup() { testEnd(); } //------------------------------------------------------------------------------ -void loop() {} +void loop() {} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ostreamTest/ostreamTest.pde b/libs/SdFat-master/SdFatTestSuite/examples/ostreamTest/ostreamTest.ino similarity index 92% rename from libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ostreamTest/ostreamTest.pde rename to libs/SdFat-master/SdFatTestSuite/examples/ostreamTest/ostreamTest.ino index e3d4957..8c27438 100755 --- a/libs/SdFatBeta20120108/extra/SdFatTestSuite/examples/ostreamTest/ostreamTest.pde +++ b/libs/SdFat-master/SdFatTestSuite/examples/ostreamTest/ostreamTest.ino @@ -82,12 +82,19 @@ void ostreamNumber() { testVerifyStr(buf, "123456789-1-2-3-4-5-6"); ob.init(buf, sizeof(buf)); - s = ss = i = is = 0X8000; + s = ss = 0X8000; + i = is = sizeof(int) == 2 ? 0X8000 : 0X80000000; l = ls = 0X80000000; su = iu = lu = 0; - ob << su << iu << lu << s << ss << i << is; - testVerifyStr(buf, "000-32768-32768-32768-32768"); - + ob << su << iu << lu << s << ss; + testVerifyStr(buf, "000-32768-32768"); + ob.init(buf, sizeof(buf)); + ob << i << is; + if (sizeof(int) == 2) { + testVerifyStr(buf, "-32768-32768"); + } else { + testVerifyStr(buf, "-2147483648-2147483648"); + } ob.init(buf, sizeof(buf)); ob << l << ls; testVerifyStr(buf, "-2147483648-2147483648"); @@ -142,8 +149,8 @@ void ostreamStr() { const signed char* csc = (const signed char*)"CSC"; unsigned char *uc = (unsigned char *)"uc"; const unsigned char *cuc = (const unsigned char *)"CUC"; - ob << "lit" << c << cc << sc << csc << uc << cuc << pstr("pstr"); - testVerifyStr(buf, "litcCCscCSCucCUCpstr"); + ob << "lit" << c << cc << sc << csc << uc << cuc << pstr("pstr") << F("F"); + testVerifyStr(buf, "litcCCscCSCucCUCpstrF"); ob.init(buf, sizeof(buf)); ob << setfill('*') << "s" << setw(8) << "right"; @@ -152,8 +159,7 @@ void ostreamStr() { } //------------------------------------------------------------------------------ void setup() { - Serial.begin(9600); - testBegin(&Serial); + testBegin(); ostreamBool(); ostreamChar(); ostreamFloat(); diff --git a/libs/SdFatBeta20120108/SdLevel.png b/libs/SdFat-master/SdLevel.png similarity index 100% rename from libs/SdFatBeta20120108/SdLevel.png rename to libs/SdFat-master/SdLevel.png diff --git a/libs/SdFat-master/SoftwareSPI.txt b/libs/SdFat-master/SoftwareSPI.txt new file mode 100755 index 0000000..71e8b65 --- /dev/null +++ b/libs/SdFat-master/SoftwareSPI.txt @@ -0,0 +1,49 @@ +Software SPI is now supported on AVR, Due, and Teensy 3.x boards. + +Edit these variables in SdFatConfig.h to enable Software SPI. + +//------------------------------------------------------------------------------ +/** + * Define AVR_SOF_SPI nonzero to use software SPI on all AVR Arduinos. + */ +#define AVR_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Define DUE_SOFT_SPI nonzero to use software SPI on Due Arduinos. + */ +#define DUE_SOFT_SPI 0 +//------------------------------------------------------------------------------ + +/** + * Define LEONARDO_SOFT_SPI nonzero to use software SPI on Leonardo Arduinos. + * LEONARDO_SOFT_SPI allows an unmodified 328 Shield to be used + * on Leonardo Arduinos. + */ +#define LEONARDO_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Define MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos. + * MEGA_SOFT_SPI allows an unmodified 328 Shield to be used + * on Mega Arduinos. + */ +#define MEGA_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Set TEENSY3_SOFT_SPI nonzero to use software SPI on Teensy 3.x boards. + */ +#define TEENSY3_SOFT_SPI 0 +//------------------------------------------------------------------------------ +/** + * Define software SPI pins. Default allows Uno shields to be used on other + * boards. + */ +// define software SPI pins +/** Default Software SPI chip select pin */ +uint8_t const SOFT_SPI_CS_PIN = 10; +/** Software SPI Master Out Slave In pin */ +uint8_t const SOFT_SPI_MOSI_PIN = 11; +/** Software SPI Master In Slave Out pin */ +uint8_t const SOFT_SPI_MISO_PIN = 12; +/** Software SPI Clock pin */ +uint8_t const SOFT_SPI_SCK_PIN = 13; + diff --git a/libs/SdFatBeta20120108/WorkingDirectory.txt b/libs/SdFat-master/WorkingDirectory.txt similarity index 100% rename from libs/SdFatBeta20120108/WorkingDirectory.txt rename to libs/SdFat-master/WorkingDirectory.txt diff --git a/libs/SdFatBeta20120108/changes.txt b/libs/SdFat-master/changes.txt similarity index 73% rename from libs/SdFatBeta20120108/changes.txt rename to libs/SdFat-master/changes.txt index 71fa8f0..0285461 100755 --- a/libs/SdFatBeta20120108/changes.txt +++ b/libs/SdFat-master/changes.txt @@ -1,3 +1,147 @@ +25 Oct 2014 + +Added File class for compatibility with the Arduino SD.h library + +Added StreamParseInt example. + +23 Oct 2014 + +Added Read SD OCR register. + +SdInfo example now prints OCR register. + +05 Sep 2014 + +Faster SdBaseFile::printField(); + +Added SdBaseFile::printField(float value, char term, uint8_t prec); + +24 Aug 2014 + +Added support for Software SPI on Due and Teensy 3.1 + +Added support for SPI transactions. + +05 Aug 2014 + +New examples. + +Teensy 3.x SPI mods. + +Test version of StdioStream. + +25 Dec 2013 + +Improved cluster allocation speed. + +Fix for Teensy 3.0 + +21 Jun 2013 + +Improved speed of single block write. + +Added StressTest example. + +04 May 2013 + +Fix FreeRam() for 1.05/1.53 malloc. + +Reorganised SPI code. + +SPI speed set by SCK divisor. + +Faster directory search in file open. + +Removed deprecated functions. + +13 Mar 2013 + +Fix for 1.0.4 malloc + +New Software SPI + +07 Feb 2013 + +Patch for 1.5.2 version of malloc. + +Updated SPI driver for Teensy 3.0 + +Added fast printField() functions. + +19 Dec 2012 + +Fixed SoftSPI bug + +01 Dec 2012 + +Added support for the Arduino Due. + +The default for ALLOW_DEPRECATED_FUNCTIONS has been changed to +false. If you get compile errors for these functions, either +change to the preferred replacement function indicated in the +error message or set ALLOW_DEPRECATED_FUNCTIONS nonzero. + +A key change was to remove sd.init(spiRateID, chipSelect) in favor of +sd.begin(chipSelect, spiRateID). The difference between these two is +the order of the arguments which has caused serious confusion at times. + +A massive number of internal changes have been made. There are over 2600 +lines in the diff file of this version and the 20120719 version. + +20 Oct 2012 + +Changes to support ARM processors. Tested with a Teensy 3.0. + +Changes for higher performance with large reads and writes. + +25 Aug 2012 + +Added uint32_t available(); + +Support for new industrial SD cards + +Better support for MiniSerial and MiniSerial example + +Changes to support newer versions of avr-gcc + +Changed RawWrite example to use micros() for delay between blocks. + +Changed SdFatSize example to use MiniSerial + +19 Jul 2012 + +Require Arduino 1.0 or greater. Change file type for all examples to *.ino. + +Modify the SdFormatter example to format SDXC cards as FAT32. This is not the +SDXC standard which is exFAT. + +30 May 2012 + +Added << operator for Arduino flash string macro F(). + +New RawWrite example for fast write of contiguous files. + +New faster software SPI + +Software SPI for Leonardo boards + +Don't use __cxa_pure_virtual by default for Arduino 1.0 or greater. + +26 Mar 2012 + +Removed definition for SS_PIN, MISO_PIN, MOSI_PIN, and SCK_PIN. Used the +Arduino 1.0 symbols SS, MISO, MOSI, and SCK. + +Added Arduino style SdFat::begin(chipSelect, spiSpeed); + +Added options for SD crc checking. Enabling crc checking increases reliability +at the cost of speed. Edit SdFatConfig.h to select CRC options. + +Override Print::getWriteError() and Print::clearWriteError() to use +SdBaseFile functions. + +Many internal changes. + 08 Jan 2012 Changes to allow use of the SerialPort library. diff --git a/libs/SdFat-master/html/_arduino_stream_8h.html b/libs/SdFat-master/html/_arduino_stream_8h.html new file mode 100755 index 0000000..f77db2a --- /dev/null +++ b/libs/SdFat-master/html/_arduino_stream_8h.html @@ -0,0 +1,92 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/ArduinoStream.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
ArduinoStream.h File Reference
+
+
+ +

ArduinoInStream and ArduinoOutStream classes. +More...

+
#include <bufstream.h>
+
+Include dependency graph for ArduinoStream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

class  ArduinoInStream
 Input stream for Arduino Stream objects. More...
 
class  ArduinoOutStream
 Output stream for Arduino Print objects. More...
 
+

Detailed Description

+
+ + + + diff --git a/libs/SdFat-master/html/_arduino_stream_8h__dep__incl.png b/libs/SdFat-master/html/_arduino_stream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..f1b50512257bc3a10a11b41a393a0e0b43f20c79 GIT binary patch literal 6207 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_arduino_stream_8h__incl.png b/libs/SdFat-master/html/_arduino_stream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..8a4d8e17a20cc0a5561e557a6a46c06df167adf1 GIT binary patch literal 38254 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 + + + + + +SdFat: Arduino/libraries/SdFat/Sd2Card.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
Sd2Card.h File Reference
+
+
+ +

Sd2Card class for V2 SD/SDHC cards. +More...

+
#include <Arduino.h>
+#include <SdFatConfig.h>
+#include <SdInfo.h>
+#include <SdSpi.h>
+
+Include dependency graph for Sd2Card.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + +

+Classes

class  Sd2Card
 Raw access to SD and SDHC flash memory cards. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

uint8_t const SD_CARD_ERROR_ACMD23 = 0X9
 
uint8_t const SD_CARD_ERROR_ACMD41 = 0XA
 
uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB
 
uint8_t const SD_CARD_ERROR_CMD0 = 0X1
 
uint8_t const SD_CARD_ERROR_CMD12 = 0X3
 
uint8_t const SD_CARD_ERROR_CMD17 = 0X4
 
uint8_t const SD_CARD_ERROR_CMD18 = 0X5
 
uint8_t const SD_CARD_ERROR_CMD24 = 0X6
 
uint8_t const SD_CARD_ERROR_CMD25 = 0X7
 
uint8_t const SD_CARD_ERROR_CMD58 = 0X8
 
uint8_t const SD_CARD_ERROR_CMD59 = 0X1A
 
uint8_t const SD_CARD_ERROR_CMD8 = 0X2
 
uint8_t const SD_CARD_ERROR_ERASE = 0XC
 
uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD
 
uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE
 
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19
 
uint8_t const SD_CARD_ERROR_READ = 0XF
 
uint8_t const SD_CARD_ERROR_READ_CRC = 0X1B
 
uint8_t const SD_CARD_ERROR_READ_REG = 0X10
 
uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11
 
uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18
 
uint8_t const SD_CARD_ERROR_SPI_DMA = 0X1C
 
uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12
 
uint8_t const SD_CARD_ERROR_WRITE = 0X13
 
uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14
 
uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15
 
uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16
 
uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17
 
uint8_t const SD_CARD_TYPE_SD1 = 1
 
uint8_t const SD_CARD_TYPE_SD2 = 2
 
uint8_t const SD_CARD_TYPE_SDHC = 3
 
+

Detailed Description

+

Sd2Card class for V2 SD/SDHC cards.

+

Variable Documentation

+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_ACMD23 = 0X9
+
+

SET_WR_BLK_ERASE_COUNT failed

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_ACMD41 = 0XA
+
+

ACMD41 initialization process timeout

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB
+
+

card returned a bad CSR version field

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD0 = 0X1
+
+

timeout error for command CMD0 (initialize card in SPI mode)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD12 = 0X3
+
+

card returned an error response for CMD12 (stop multiblock read)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD17 = 0X4
+
+

card returned an error response for CMD17 (read block)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD18 = 0X5
+
+

card returned an error response for CMD18 (read multiple block)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD24 = 0X6
+
+

card returned an error response for CMD24 (write block)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD25 = 0X7
+
+

WRITE_MULTIPLE_BLOCKS command failed

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD58 = 0X8
+
+

card returned an error response for CMD58 (read OCR)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD59 = 0X1A
+
+

card returned an error for CMD59 (CRC_ON_OFF)

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_CMD8 = 0X2
+
+

CMD8 was not accepted - not a valid SD card

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_ERASE = 0XC
+
+

erase block group command failed

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD
+
+

card not capable of single block erase

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE
+
+

Erase sequence timed out

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19
+
+

init() not called

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_READ = 0XF
+
+

card returned an error token instead of read data

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_READ_CRC = 0X1B
+
+

invalid read CRC

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_READ_REG = 0X10
+
+

read CID or CSD failed

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11
+
+

timeout while waiting for start of read data

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18
+
+

incorrect rate selected

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_SPI_DMA = 0X1C
+
+

SPI DMA error

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12
+
+

card did not accept STOP_TRAN_TOKEN

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_WRITE = 0X13
+
+

card returned an error token as a response to a write operation

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14
+
+

attempt to write protected block zero

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15
+
+

card did not go ready for a multiple block write

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16
+
+

card returned an error to a CMD13 status check after a write

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17
+
+

timeout occurred during write programming

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_TYPE_SD1 = 1
+
+

Standard capacity V1 SD card

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_TYPE_SD2 = 2
+
+

Standard capacity V2 SD card

+ +
+
+ +
+
+ + + + +
uint8_t const SD_CARD_TYPE_SDHC = 3
+
+

High Capacity SD card

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd2_card_8h__dep__incl.png b/libs/SdFat-master/html/_sd2_card_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..9806aeb35383a7558f318439777b733743af90ba GIT binary patch literal 43231 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�HDADwZ(Va1ydd5D~F&Y&@iRINJcradsf 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_base_file_8h.html b/libs/SdFat-master/html/_sd_base_file_8h.html new file mode 100755 index 0000000..f353a14 --- /dev/null +++ b/libs/SdFat-master/html/_sd_base_file_8h.html @@ -0,0 +1,282 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/SdBaseFile.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdBaseFile.h File Reference
+
+
+ +

SdBaseFile class. +More...

+
#include <Arduino.h>
+#include <SdFatConfig.h>
+#include <SdVolume.h>
+#include <utility/FatApiConstants.h>
+
+Include dependency graph for SdBaseFile.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

struct  FatPos_t
 internal type for istream do not use in user apps More...
 
class  SdBaseFile
 Base class for SdFile with Print and C++ streams. More...
 
+ + + + + + + + + + + +

+Macros

#define PGM_P   const char*
 
#define pgm_read_byte(addr)   (*(const unsigned char*)(addr))
 
#define pgm_read_word(addr)   (*(const uint16_t*)(addr))
 
#define PROGMEM   const
 
#define PSTR(x)   (x)
 
+ + + + + + + + + + + + + +

+Variables

uint8_t const FAT_FILE_TYPE_CLOSED = 0
 
uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED
 
uint8_t const FAT_FILE_TYPE_NORMAL = 1
 
uint8_t const FAT_FILE_TYPE_ROOT32 = 3
 
uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2
 
uint8_t const FAT_FILE_TYPE_SUBDIR = 4
 
+

Detailed Description

+

SdBaseFile class.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define PGM_P   const char*
+
+

pointer to flash for ARM

+ +
+
+ +
+
+ + + + + + + + +
#define pgm_read_byte( addr)   (*(const unsigned char*)(addr))
+
+

read 8-bits from flash for ARM

+ +
+
+ +
+
+ + + + + + + + +
#define pgm_read_word( addr)   (*(const uint16_t*)(addr))
+
+

read 16-bits from flash for ARM

+ +
+
+ +
+
+ + + + +
#define PROGMEM   const
+
+

store in flash for ARM

+ +
+
+ +
+
+ + + + + + + + +
#define PSTR( x)   (x)
+
+

store literal string in flash for ARM

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_CLOSED = 0
+
+

This file has not been opened.

+ +
+
+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED
+
+

Test value for directory type

+ +
+
+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_NORMAL = 1
+
+

A normal file

+ +
+
+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_ROOT32 = 3
+
+

A FAT32 root directory

+ +
+
+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2
+
+

A FAT12 or FAT16 root directory

+ +
+
+ +
+
+ + + + +
uint8_t const FAT_FILE_TYPE_SUBDIR = 4
+
+

A subdirectory file

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_base_file_8h__dep__incl.png b/libs/SdFat-master/html/_sd_base_file_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..6e41d31e3b86f42c1422981da66f275c32a5ca65 GIT binary patch literal 39915 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_base_file_8h__incl.png b/libs/SdFat-master/html/_sd_base_file_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..8b7088743d98d30c8e6de3679196cbd00072938d GIT binary patch literal 29470 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�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 + + + + + +SdFat: Arduino/libraries/SdFat/SdFat.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdFat.h File Reference
+
+
+ +

SdFat class. +More...

+
#include <SdFile.h>
+#include <SdStream.h>
+#include <StdioStream.h>
+#include <ArduinoStream.h>
+#include <MinimumSerial.h>
+
+Include dependency graph for SdFat.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + +

+Classes

class  SdFat
 Integration class for the SdFat library. More...
 
+ + + + + +

+Macros

#define DBG_FAIL_MACRO
 
#define SD_FAT_VERSION   20141025
 
+

Detailed Description

+

SdFat class.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define DBG_FAIL_MACRO
+
+

Macro for debug.

+ +
+
+ +
+
+ + + + +
#define SD_FAT_VERSION   20141025
+
+

SdFat version YYYYMMDD

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_fat_8h__dep__incl.png b/libs/SdFat-master/html/_sd_fat_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..3909a34c6ad4397ae22d8ee60bf6b9bae714ac4e GIT binary patch literal 4856 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

JND^r~sRbQ#X2>z5zt_xw;Nacl*-0 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 o!4`R$ + + + + + +SdFat: Arduino/libraries/SdFat/SdFatConfig.h File Reference + + + + + + +

+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdFatConfig.h File Reference
+
+
+ +

configuration definitions +More...

+
#include <stdint.h>
+
+Include dependency graph for SdFatConfig.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define AVR_SOFT_SPI   0
 
#define DESTRUCTOR_CLOSES_FILE   0
 
#define DUE_SOFT_SPI   0
 
#define ENABLE_SPI_TRANSACTION   0
 
#define ENABLE_SPI_YIELD   0
 
#define ENDL_CALLS_FLUSH   0
 
#define FAT12_SUPPORT   0
 
#define LEONARDO_SOFT_SPI   0
 
#define MEGA_SOFT_SPI   0
 
#define SD_FILE_USES_STREAM   0
 
#define TEENSY3_SOFT_SPI   0
 
#define USE_ARDUINO_SPI_LIBRARY   0
 
#define USE_MULTI_BLOCK_SD_IO   1
 
#define USE_MULTIPLE_CARDS   0
 
#define USE_SD_CRC   0
 
#define USE_SEPARATE_FAT_CACHE   0
 
#define USE_SERIAL_FOR_STD_OUT   0
 
+ + + + + + + + + + + +

+Variables

uint8_t const SOFT_SPI_CS_PIN = 10
 
uint8_t const SOFT_SPI_MISO_PIN = 12
 
uint8_t const SOFT_SPI_MOSI_PIN = 11
 
uint8_t const SOFT_SPI_SCK_PIN = 13
 
const uint8_t SPI_SCK_INIT_DIVISOR = 128
 
+

Detailed Description

+

configuration definitions

+

Macro Definition Documentation

+ +
+
+ + + + +
#define AVR_SOFT_SPI   0
+
+

Set AVR_SOFT_SPI nonzero to use software SPI on all AVR Arduinos.

+ +
+
+ +
+
+ + + + +
#define DESTRUCTOR_CLOSES_FILE   0
+
+

Set DESTRUCTOR_CLOSES_FILE nonzero to close a file in its destructor.

+

Causes use of lots of heap in ARM.

+ +
+
+ +
+
+ + + + +
#define DUE_SOFT_SPI   0
+
+

Set DUE_SOFT_SPI nonzero to use software SPI on Due Arduinos.

+ +
+
+ +
+
+ + + + +
#define ENABLE_SPI_TRANSACTION   0
+
+

Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature of the standard Arduino SPI library. You must include SPI.h in your sketches when ENABLE_SPI_TRANSACTION is nonzero.

+ +
+
+ +
+
+ + + + +
#define ENABLE_SPI_YIELD   0
+
+

Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during SD card busy waits.

+

This will allow interrupt routines to access the SPI bus if ENABLE_SPI_TRANSACTION is nonzero.

+

Setting ENABLE_SPI_YIELD will introduce some extra overhead and will slightly slow transfer rates. A few older SD cards may fail when ENABLE_SPI_YIELD is nonzero.

+ +
+
+ +
+
+ + + + +
#define ENDL_CALLS_FLUSH   0
+
+

Call flush for endl if ENDL_CALLS_FLUSH is nonzero

+

The standard for iostreams is to call flush. This is very costly for SdFat. Each call to flush causes 2048 bytes of I/O to the SD.

+

SdFat has a single 512 byte buffer for SD I/O so it must write the current data block to the SD, read the directory block from the SD, update the directory entry, write the directory block to the SD and read the data block back into the buffer.

+

The SD flash memory controller is not designed for this many rewrites so performance may be reduced by more than a factor of 100.

+

If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force all data to be written to the SD.

+ +
+
+ +
+
+ + + + +
#define FAT12_SUPPORT   0
+
+

Set FAT12_SUPPORT nonzero to enable use if FAT12 volumes. FAT12 has not been well tested and requires additional flash.

+ +
+
+ +
+
+ + + + +
#define LEONARDO_SOFT_SPI   0
+
+

Set LEONARDO_SOFT_SPI nonzero to use software SPI on Leonardo Arduinos. LEONARDO_SOFT_SPI allows an unmodified 328 Shield to be used on Leonardo Arduinos.

+ +
+
+ +
+
+ + + + +
#define MEGA_SOFT_SPI   0
+
+

Set MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos. MEGA_SOFT_SPI allows an unmodified 328 Shield to be used on Mega Arduinos.

+ +
+
+ +
+
+ + + + +
#define SD_FILE_USES_STREAM   0
+
+

Set SD_FILE_USES_STREAM nonzero to use Stream instead of Print for SdFile. Using Stream will use more flash and may cause compatibility problems with code written for older versions of SdFat.

+ +
+
+ +
+
+ + + + +
#define TEENSY3_SOFT_SPI   0
+
+

Set TEENSY3_SOFT_SPI nonzero to use software SPI on Teensy 3.x boards.

+ +
+
+ +
+
+ + + + +
#define USE_ARDUINO_SPI_LIBRARY   0
+
+

Set USE_ARDUINO_SPI_LIBRARY nonzero to force use of Arduino Standard SPI library. This will override native and software SPI for all boards.

+ +
+
+ +
+
+ + + + +
#define USE_MULTI_BLOCK_SD_IO   1
+
+

Set USE_MULTI_BLOCK_SD_IO nonzero to use multi-block SD read/write.

+

Don't use mult-block read/write on small AVR boards.

+ +
+
+ +
+
+ + + + +
#define USE_MULTIPLE_CARDS   0
+
+

To use multiple SD cards set USE_MULTIPLE_CARDS nonzero.

+

Using multiple cards costs about 200 bytes of flash.

+

Each card requires about 550 bytes of SRAM so use of a Mega is recommended.

+ +
+
+ +
+
+ + + + +
#define USE_SD_CRC   0
+
+

To enable SD card CRC checking set USE_SD_CRC nonzero.

+

Set USE_SD_CRC to 1 to use a smaller slower CRC-CCITT function.

+

Set USE_SD_CRC to 2 to used a larger faster table driven CRC-CCITT function.

+ +
+
+ +
+
+ + + + +
#define USE_SEPARATE_FAT_CACHE   0
+
+

Set USE_SEPARATE_FAT_CACHE nonzero to use a second 512 byte cache for FAT table entries. Improves performance for large writes that are not a multiple of 512 bytes.

+ +
+
+ +
+
+ + + + +
#define USE_SERIAL_FOR_STD_OUT   0
+
+

For AVR

+

Set USE_SERIAL_FOR_STD_OUT nonzero to use Serial (the HardwareSerial class) for error messages and output from print functions like ls().

+

If USE_SERIAL_FOR_STD_OUT is zero, a small non-interrupt driven class is used to output messages to serial port zero. This allows an alternate Serial library like SerialPort to be used with SdFat.

+

You can redirect stdOut with SdFat::setStdOut(Print* stream) and get the current stream with SdFat::stdOut().

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
uint8_t const SOFT_SPI_CS_PIN = 10
+
+

Define software SPI pins. Default allows Uno shields to be used on other boards.Default Software SPI chip select pin

+ +
+
+ +
+
+ + + + +
uint8_t const SOFT_SPI_MISO_PIN = 12
+
+

Software SPI Master In Slave Out pin

+ +
+
+ +
+
+ + + + +
uint8_t const SOFT_SPI_MOSI_PIN = 11
+
+

Software SPI Master Out Slave In pin

+ +
+
+ +
+
+ + + + +
uint8_t const SOFT_SPI_SCK_PIN = 13
+
+

Software SPI Clock pin

+ +
+
+ +
+
+ + + + +
const uint8_t SPI_SCK_INIT_DIVISOR = 128
+
+

SPI SCK divisor for SD initialization commands. or greater

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_fat_config_8h__dep__incl.png b/libs/SdFat-master/html/_sd_fat_config_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..dfe5981b91f750b7b55f694cbd4129b6b7983156 GIT binary patch literal 56878 zcmb5W1yqz#8!q|{El3Pykd6w9go4zN;vgU;F@&UqDBT?+h?IgO0unRIqTeY&t2;rUAl;w{q6nkH=p-;C+eP-3O((4S_p#Z)l^Zs5CmI; zAPNo|D)1AZGeqz|L}jI}f`U#+e>0o%;~|I_QbXO+_f7jd=@)2f+oZ78x7%a0_{zB& zmpu5MY9Zkon<<8llCAd2z3)7}RlGC;WNhy)pW6vgK2_TF?b7Qifr^5^S28OWZR=<$ zZFR0>vn~pK?s2ao1$DVy>Pq+x;gK65D-em&$`aCoWiUbJIOda)dD2EL?SD z)n~ZCwCh{;fUq05HDYb1UQG}i=e(9bUZW9d)EXt5+5bx~R$}w&NYKxLz86F0(zFvs z?XsK1K*HA@IgzdVQ36qvX5j>mrH@d6Ru1@o7>dOnxpwPYQ4bJml zUb!Sy1QNbf1sG@f-6fhcC3jr#%og}rV^$MAnp^zRgRLRPqIYg?~EU?zMH@TY6ZVKl|G|3=8q)VnB8HY3A$1bg#!5}BHSyO*N*{&Ki5*chVmWF#&guNDmm3l26ErpW-cf7m*SbKpeV&nbX({+9^0iO?MtONvo`KP# z-(qH>TJMdOcxd7FKdURB|IKjvaI@oU>S{<=$)@jU|2=JF!q~Cyb*aS%-JvDX^*z=o zCjCj`(0E3{ufn_Ymnwgd^Jf<;Wi6CG!5r(d1-$Uz%k^#a(3b4uh|w?65y6n{W6v#miZWNmbs)*f*paajccXj?K3!?~OzAaV2-CIij|Nv8v-|gy@R6 zsB>bx?y~jO206oJpZyfhHA>tbRm?ojmGhW&5piuoPaP+ zRywFHMf@6-CPnTSOUATFrl|Mn_Qu1N#Ar!~B5Y;171ruD2Zx{g;%lToZ`7H**YkI@ z+q($G5I0~{TxmvOM~3(9>=8FgOpq7AF-XMB@WD+hoJ=yutH;L(UuA;oKlIEYc3PwC zjjnk1Uh2MU#yI2qoOqx(+&RmYb$5<7!sJZM%+Ajmm8N(BUBp?kE%kNZk;#OvS@EB) zOG&6XD(GG~dDrbIRHvP{yvw*c(ptGv(sjGk8h9-o zy}Z9C=XoOve{ofQ^>~Mx8!Is}Y|_WNLMbWi!uQ(ErH@s`l^cx&k(1LmL}k9Tl@vlZ&iEJTpw^74f5|nT=cGavi!nzn@;q;^KQ{kt8azBX zS$+e%P^)-pO&(%|{53C$5=4O9tOiF5eA7PNLD59??Po=Lh-MCAiYxo6XV=r!T5+X9 zSt*5e(nx;X@JbDj4kb#zyrbe(XNQ%c;otPYsuZz&r>xl-U5E$Wew3K2Ze3pLmFJ=J z0N6C%taWi0UK1u2WT7 z^2!*G*48HIt@{!>QCnBwe@g|5+I}vKD$4ABUW2i_W{>ebQJkTILiD^6V_KmiALJd^UeA5*$oJAW?@AhZ_-O{=>)4_c`ssSbGnpAISee1a)^Af&-6N^J z%Bvk@TKYK;`<&@1$u>kW931D@a35|p3L^|VthiS1;|Cp5Qgg(Ji@Vwa~mIbVxGmYuQt^Uti=-ZnH? z=LjT5&lF)*mwx7L>gO00&mPy;e_(|9^JjL06ElV@4VY;XvTMqL9}iQ?8rC*RoM2pl zf3|6h_wu@3MqVq-z1rCCS#5`B9&OLmYf^gkN}kyjEzx6clDj+0PPxh5 zDQVYwND2qm55FRd8x47t`jtON z|H$kxe_+Fyvqhm!`X@MXE=a=?YsR#K4iutfn!I>WuW*LDwffldU9eE5LUd=t@t|k* zI!#251^WO8YAe&IxafDHe#v{_4=mw_tgV;e((>#}dy{WO5Qe0^+y>Dj9g{{aMcCao zOQfOV(4xA20e2^V(Q!6G)pLSkp$)$=o0zzBXV4FCh8Q6Jn6casgM#z%jPxhBx^`cr zwt`!_O$J+L{ZP5Sx0M0KkYlQ0{+s*TW=(mO2}%?eoBY9c(V`v$)Qf z1!l!D1oms3GQzH9#Iy8%8(8Gx$Da!~@KQ!YL}dTU5ARJY$b*YNsBqCSH@dxkxbO=l z)cXR}J2CE=ejgs=b%YXc62TNI?n{ryaz8}s2|WNV1XlSFcf%M}2F>xW?xK1fk|=D?fiJoIFL5riWS+!FGMx)W|Qq>@Zw>Rs-lB`~xMz zKi0{m&gpm0W{L&@@BJ^!s_r{Bgufu$_`0$Z`vS@ou%KQu6&xn2w5@-^HynI1L~kRY z>C+K8bQ*-h8|P!Z%muPz^tWf~>$CWQZhL4%;2)CK(GqVWYo%M?`<_6Ggkl^o`(kG7 z+XhUrs-F_c_lj&6yHIlYw?@TFSQ};@ic2`HCA#WK@61Jwp=glxM+2j{0!2hGjLM9Z zv#SN4d+C&Tx#oN<;g!r_>_z^fUv1c~G~2wv@7eSm$XRmo?Fceob2i3jZB7}YxWe})o^J#Wm zAvanEwN~URwQoC^jHf3hi(}P7uI!nWVISs*GCXtY*n-0Tu54zn~?hSQYm9w=>5q}vcjdfMFF`7NGbB+!6j+Sz_gWNP|k%Og*02w!57acm7AEVe0#Sk6x_@gqeQQ(7y@%tsmT=ad7v?Rb@KgUgvoOX zF_K@3z^Bo6A%J$fAhkS+y5<2%@G%c^i^hL#{BVm92#up&ndMb7y;Sv_x)Lg(*z7d!l>er8R)wUHAFG$k zA}xJ7u^wU>EFW%QCdl9CYuIdtzThxy%#9vI&Cy|1w<_~CnV4d{N})L=v?&imjj#l+ z(*Y4-CO;_znQM6IHv#La{P;= z7eP1CN`ewW=P(ia^Xaa&CGDQvE#SU3>ijmfGD-!`L}upX6aGk6a=PEdOheb=6MBCu zPfl`ipvzhN%VIV5FV2qP6cuBs*Xn7wIn66Eq@s1sqfq}gtDgGSa;%3%2!YVs|np3YF4@|t3M8xce-zl)iSMPK4f?vHV360#mdp$J2mL$a49 z|J)B@U4Y#ck)ca}c*e3lUpu2&bbJ%U{0E936LT32kf|AwGY-(-4bE;wAJ#ddOP zW1J`1iw{ZgJ8 z-HaM~iONz9w zYRf$QJItAad^@57s-Iyd_3yHuT0@RNKFr8+oFyl3&{wS=z$gL}U83<8tk|;o#US#R zip-ERHSXG2Tp_ zDaRT;l~6YoQep-65AXgcjbDiBteKx2F=0D^`37@#=Lgd&HXr;!3r96Ko6Jbb{3et7 z?wN9aO$_2^cb^HE5?hYokaQ-7+AeNG@{7)bA)xZcYWLt8z8eh1quu;q;lwt)uQO-< zV1#yvLV^2u298W6+ z8lX>jEzzh-mPcjuCwDwhU|DBUSVg(!2^ehcm^V8W&kCvULTmS9w+EsEMYyMf#WBukV(FqFAK0;< z>2;|sacFqPvMnK;vn<*SW;W|yoR;rH^qMzCYl$6y-Sv~MbEB70=sUbJU&U?y!NpdW z?SyjXscWs5#o%KNlJ2~tq#IjO?&k~Ti7Tczi`z>Wlm2wun4rhfbTa&&SR14OX79#xpkr`xLHTaF7?=w7N zK*-#-<0U+lb8WGDzN<21|pR#lrj}0Evr_v)`N;i_FRjjG0+mP)z zrPUF7C%9G5if640{+zVY9U@yM^l(9X+U?csrq%e>?+X$YX15!?eG&4XU0+sSj=XH8N&RxH)~(&Z=heKt zS7O}#SJIzMpO^bLhqGGO#MoaQA=IO?m$V^nvN@$e<9`sK^|KM*YLMAni<#8aU>k%S zZ_WFw5ufEu2CI+y>RbKxF5KPfwC~*d>rr;30fX=x{^G>h+Sg=KQmVx z`CdFe%^Inm3!pQ<80Z^q7gyA$=;mJ*r7!SjuY?q*(c&7#)7A7w)4L_z1T8p-8^0Y| z-l&=7#9b4&YbI>G@O|#Zk@IrZL6}(Dcd_jc*jffdcy>dImhLH%5-`(NagkX*i5!wX zHu!Y0MI%b!8u#iR8)ih1t^`yWWWa7CD9GGX1k$716BQKFM`RdS@3Fh$(X=!76}403 zj}8m-+G
>?;#B#ZGGY#)YZU6hSm3-d0=Z!5quU%a?&aRb-xM0y(hG+!Kb|8)QL z<(2gs#Fq=6cv}t$(|Wd-<1o1)Pxcy;jdmKsnw*x$cHFd;Dh1WZ3a(k_*~dF9Zzw%{ zNHA$@{E&cAzRYI*DLbZ$IqkiHmfWC zKH~BE6A0jDA(V5*idqu5c1_YdEREe?2^^<@Ois^AodeP^ewW$QEcgK*vq*WbAXI;w zA1_s%o9mRaDCi8VUbLq=NrS>wmRB-qDrJ)oDz<2Gy0hps^cEn|fBSuZKf72rcIB;R zT&c_o7J^f zzRWz%L$#J?yI7uAS^EUs8ZTTD|htT zoiWFajY8eiuy+`O;h&w<@J9K~TGJ5JyRL>S09d8SJk>dXPkqq~F#kwf=}xje71`kV z%6TVa3s}Fbbw|b3d8d(@i66n0{UaAUJ=&cm@6HadK*L8EZYQK#9nh6?1I|%1Mv5y} ze7YAs*VG_g3k$=cZdGQsyXas_OP+Cg2jKYUL9$?@c&TDu5sl*H4+^Lo=T46*4WUj8 z`!Xqk<Q`o{F zZi9r2ns!$~GLZd+1tI|xW-?E@Snw5nJ;?;|Ixhx1^5x-4^m;IQ$+M=<)_8as-^(cJ_`~xo#^MZd6LO5v~v&Y{4NqLw7eS=DUM3O@^(`xxc zKN$Nim7GX$<=&Uo{~W*kL+1o#J)22R!9eC}c)4$xiXn>yJ^T~m7FZo45W8@gzz$$c zf@_o^9cw&0qXy@S7UMvg7nG+ZcT>)9!`yAq7{4&fQIM&b8eB`+Y5^5Si!%cS6tE%X z(Bx8Q`=<^5q=9Nwl8mV{*;hBW*Z2h~&44|TfzeAb>Ya-g`Iwn(f z?ZaK1M{Q@80?Vyy{k=wS%eJB^J{| zbeYtyI}*5DePHoyOti{Al%8i={XTsnqDx%JjcmqCCbEhxW61FvbP#>lo>{V%ngdE*x1e+i1HKoRnd(?u;nhLI5t_DZG1%3CUF@un4KK9Q8l-{FK)06$ zXLOMOw{z4m-w7KGfWbyE&6$4!`)nA>Dwi*_aCO$*zO<|1(Fq6d5X2?g!Ma*8^Gga3 z!3~&7{LAxi#?0Jk(_vNQc(xkuamQbaMVRG-a95MA?U#xlcjDp4E=;b7{vzX?}7@9;S&O63**n8;H0LG zo_QR<+oGbE-~#;^tgdk_8aN$$k%yCbvt+-wCiX=(euk;OukgzzV(;Z5XD%rB+>;|Y zGifhY_Ejz}FZ=4C%JhbMNd+LNpp!tYnM55{_z<4P7kU8u3qkPHu}BRR*s2Via9Qy; zx%$+$FgdAcbRSTC5||Mw>xArn^kJqy94gkw|CGtA^!>`=V#*fNjtt?9^WhdkBo$bZ zXBxux_q#4^Lwu<{s`I>MWHi0WVt!`^)jB{9+@<{4=BNe6)Tve?inD$1wNyGu(N&|r zUPbDv%={=TK=&e`-F7Q8!lzlY2Bem~p`v!Bps54$T*5<3-X<#O+v6TdoNXh}J=3?* zN06T!Fl9TWdY*6NfeK_Gt+k&Y%zei*#wkNi54}UV*4o?YA5i8m$GuwLoS(l*88%RG zTEf|MogK5CnD7t?)raLnFvcIhdsHnmh?j!DBx1Xsx}<8&isKjClxI%U=kiG4!Y2?8 z`X!SZ`DaCd*Y^oRvGpZ0VAT-=b?p5fFliCysNfz??l|MO(F(C!-wOm5&$m7R?Ukv= zJAa3ncpr2#Yctk#%$i+;1)c5Zu=|P(i?4(LN(eEW@e9~X!^h#9sc1;;VXY6mJ7iF& z+EKe_;*CeVmN>GmEz5ULx{JwZ!hf&OSw2L9V2SRjC>Dpj&k@7E`jDiMEf7GKvi6Ij zS_2gCatMEh%x*^+|2K=Wd6Z-T*E!kQ@os#Cq^s+6dq<@hBqeJHV#VwSkeV~Y|DNiy z&?H>Z2Y{R&)Iz?MvN+gRwwTbN?*+$DYZ7>Ca?PnB^j~}AXW!?I&iMbq1pp~p9g2+y zT6?v~sobxq*qkX~U_Coy7R+TJIJ7oF`B&)U&rSOz)#4wJWmm;_37oAg*yzLsXi6ko zB$Yw;ISC6)%sqk4w7UBC0zBr8rLh#Jq9~5xu-B8_9Y?l6Zd1L;`)`w>zke6dTfV|? zGY%R@i#Mu9-BDgEajkX2F3M5~lC3E;H6^)-aXl5dHA0T;_KaR9>FO>I7y>xyX?X(~n^*hwkz3R_gMM{P&zEvojXY4E;9BsvO3tQCq%H zL*C%nW2E-w0xK+yc}#n$Z@VWu{xp0GA1ddHIM0V@h%#yxo`C=)bYzCof?O+{R79@h zI)nT#?d_D`AEX9?9XJ`-CEIVw(|dheaM-PdCb8hpF6d$;X%gJJC+gIl6y@in8c)pB zIjNVx9in6kKN=`cc*eR%wIf}iE$YNvg^J|`ehq@#Z6ud0S!=B2z2kAPiAxT0m{VeQ z=_58swQ_J7U!2_(DK5a5Z{Xgh0dR~C?Ust4;-XdFy@|`8&@ZQHodwDyqhXizMW_7^ zR8XYecO92&1pKzGgpczT3f@fnb`ZzKa5t>St|Im-Z5M+8?#v;A#MmU zNd+O+CS`<3PZLbQSHgI4T4)nk=bxeF+aQaPg0##g`$g<}j3nAU^W147__-jw zU6#tA#3rfRii>(^%^C-SMGq&n7~~k&Zs05lvP?O-?h`o8LZ|Ze>56ZReITIO3?|=w zVC;Vh5}wjcy+d0|>IE#Ju4}TTY7$&ce0CGc@&?_dG8?GFwp$z@KX$o^dn`)|YyvxT zE7sx;gtyA1{pI5aQE&gyNkLmAJ2T#+;0+*w{X>Vu?(-UU0*QDp3e0g7i(Xu6uTlcQ zeQrRCToGV*zoQoP(UVq4mE5f@&*m8^_e&V^YA3owvPX<5z51MHZ=+R4ij8kPLY_L8 z1yQwfOTi1j=wtuzDDjlk_z(pY&yerwgJchxIeDhVhBFW`GpKwEUfSD1a593Rns!x%afnf3TGmVu% zqwLcK1W&irye1Vjzp6lo>j>Iz&wJ;Q8a(hr86Tb;c;f6Dx0KFTmJgXUfi;Na z)Zvl_@4>ffi`vmMJ{Wms5{{c}_vle~CrpF${6`m!-@Ii^Aoqhqmi=x-#(pVoKIkkH1c-c#(Hpllm(A>J#t?nthlZ@b##h z)y9>*Z=U`PHw~-_fdLGCR4oJFBZ>=+?8v)6O#vb5hddLlK*5rL+vLj>)6D11E*HOP zqzPFX1J^;}5Ej`;-L^X%+119Wk`DnC83bU2<2_|Fb@kK{iM6wwg) z_jP}M;qZg#_gm#^SxK(i!&2P@K8S`Y0g!D}B_TzD%jW0r7@m%!sU^ltFT*45K7Ul} z7K@uc=!vrmW*;@TSg5W zxm{#f!w4D_g20?b)h`)r!G72q_X_7#vR?VWK%S!R=(Mx8hPYfHuYE~}y@q;cfNs=n zRoSJwJiFxBX%lQ7yZL)xc6=na+Tt(K9oO<&LZzEim}ki}{P3rK*Y@1L@!*xja6a_< z*Tq#9@RmAV z`n6e68-A8+rFR?od2_<3LoCWkFbyXkd;xt)BjPM0NMj7U?!*5+M7Bq+_ga>+Cs($D zl=#44;ko-iaL8~||FR&WdBTeXc~HjYh>*RJ^I6dyw|s83((Qli^2$h}zjjEmx5l)` z&RE~~P1H?_4CmA@VB?|nNIw|#>hny5rro)Sz_zyB(_935>qg45eu=lOvl~sqn^otx6@Vh=-x)79?LoXF+fn~Qr)yU{DR89o!FC#mJic+WG(ckq#`V|9EZ<{TbhteT z!+m7DjnrDGRZC-E^8|33qHl})Ob`XxW8f1W-3-#AXsCYwUQ-PBG;->zTiSKVak>-` zOa{ii|2_)j#4yl*z6F{pWV6oq49@1cre&)D@}x_DISD}Lx5ro|*{Delbv*m|jtmbeC6L*&9zp2zbu zAO|V^)(H!Y-2DK1T^1Re-x}cd^Sr2wVJ941lYfop{Sz8RDk|5^ML~INiJe*L$JCd$(Ra3kdZoAv zZQg$i0z@G7Pr##R|K;qgJEQohH|^^|a__GPv&-d)4nkh|8?o_Il+d3gF0kP*r8T=> zlAy*Et!^DqAgD@5KP+#T*-V$HnJIoeEDTAMnT^+tdcIl*>)|1IlQt?&0@ubQIrS0! z*PxIXYsc6~Rrp636S5jYPAU|$q7R_I+$8$bps{TBYat1hK4uZm@j+9UYuD!DVggxK zj1GhDQZ$eaD}Y><5_ly_P&#Ns`_Z<>pj~IBSXc9-XQy7N=AdUM@L`8;^}e8ugWd+k z=xvH3&HR6FXz%(8X`S^upoO2Su)Gz}6nRXCX#pOAmV{HBqSBLuy&0b7*?Ybyh^qSg zRdPD5EE)+1fJb(D(|QN`23+<^Hh*%jl72U;c$ZvtWJr_Puqa3>zVN)A*i@KwF~CSV zJ=wGG=L!TsdxWv7W%9hr*QEYu=y{I(DQZh=fn2*3us{)NEf^9>?bQKYr)=8u#F!R6 zihPdk+`ozDWqzOHR}D*C%3sC zfZod(lsWSV{F>*XUW+st#mA|dP4=AnY%}dWsMf`ilA7wHmR|*5+db_`A~(KNj8NTQ za%rw3`a+WId)XGXXA1-X(`j7v@wecB-R+~TW6%1QHwv%qC!L^UOXO1yP89{HRV|ka zpq}B8fdZV)P2$Xt1IjyU&Uv9PecSI;eX9vF*K>K5FC{^nZ55C;npcC!fhpR&Jmkmh zj_&X^i%d{@5QM8>f}F=+q(3}5yTL@b2&IeRvN=K4cp6YzMxtj_@a}G;cIl$*5MT0X z?lOU^5EJ&O?PoPR=-RW`xS;)}Jfq!#utmEn=BS~EQn4QRMZuwtinYsddNK@+Zeng{ zN-yf+i|1dS>W>0IfZ5B(XRE*}96!X(Ad+f})UJ9*0+7o2dC4GrfnEZTzw$$RdP;dR zMScyiZno&V;^i~s^~#rA!@s zt*?-Seusk0Q7hz@=D%n01!o4zpqJ4Rh_XGJdt59(AYfa4G!$uKz#15|_p}F%4>jXh zu*EUe1=-T9_D3~$`4OAHdx-l1P>&uOyjY-YW#yU$<(4Cy_)v<|7JDuUw66H^_CeKl z$~Hh&wX_ikM%COW{yW7)}mr{5I&ZoeET#4&WFy1p>X0P3)}H^bM{K7f=SFFLg@&k*l5zRJCQs`gFlC zvX7C<(j>@RgH$oMF5=x2oocw8Knp*z3k#9qRT)B5?f0w+BW>-IZd>usa&#$$jQY(P zEiK@Lt0c6t0SouLCp$&l1g%Yl%o@;NI{*|iSHfE|sn{wMDpf`9J!57**+y*Bh)}nG z_Q!#)%oiLre<>|P?Y*{JiQcq`ID3%5b8=2J(zf=4OfHU;qxF08wVaB`>5N=hUiak> z85z1h?hHT!;pk2oJFE#Y7vK-3fz4tGmq9~6azPTcb{jN~I!M2M>>S$* zTQf%&;aC2-xMolgnhAt9=)1)`)vP!p8L<{`b)}dT1#sMZ@c`Hbpwt{At)s%J{v`DL z2W-%bs7I#}{#SVWwzka%U6AS|h?s~1)XxLJOj3nX<3G>LX7x)~YT6+-kmy61Ou!rX zNy5x|MnONwL~-U(_ea3aoE-Z0ZR!z{1#39!y(A0osSyNqNn}qw)A;oaK9ILZnCaH zhmmT=H@*L0`iwt|#>Zzm2QI<{CjkA0<;=Ag;C`7rNKCf zJ=CzU{Z9u1uZS4f=7%q_VE(3REs_7H-etk6;iXh5w9CvVxWA?)_N`h zj&B^9Yh0v<%Oz&HuVBG10~htznedJ$s~X^(X#4FyJ6XPso7WI~+?gZ5aSCVRPWtrF z4gj^Kvb>N9s>5Fr$9)?5lQ-Fy9I59{EA~aAs*C4BMfAT?QE%Ua9yz{N(Xev^5Tg!# zWT#B2UR5mF)(=&iUp%DZ6&!Qr_JN1{Y%LeT?T%8k< z+>6qGNH!CB|ExSUaK!d^1-;v^(bMbgQq3jd_h;6E+!zY=ylBFEO`*(l{nQ$Eg%m(w z=POC3B0E)%Lbs4DTm=L%6;i9r5qU)$!R57)3OK!3hzhgJnEIcWQOxvu0-{GbK2Q~%8g`2q z0JxXgi~6W=-S!i`_EoF$gmF!~LRMfQ`wD=3{O8%T$8=mOrR1(TPAaR9fVE!7#a!VT zHy4GsK1f8%{8L-Ftx-dD5HE=m`-%7lzk<_}0d&)9g4l+Qdf^7h^y03xf~TqVP%9QbN7%^MMMImR%|6#SlE(A=UR>o^p|SJc<@%onjaLhwA{3DdGHn~1aBlsLKBaX z6j;9)azrmdc}^uS{>?{_IHTrdu&SFd%u^wChn-_d($Eeu7B5V-m9Vl>+LF?1Mf>kZ z8V#4TV_VOz+;g+rdS2eJdNZ-1#L;C)V7|)P ztVN{YOB7^I>Is7`ry7uZ)h!s!#8JD5aJ5;~&Lpz4cQxp@$_<4W$1;(v3AF8p&>erp zSlAlfps@z%=_ATUjn@u~&zF9Pmv9<$m%=O}_C5adt8CM@p;3RA|FiKQ3lGjC1co0F zq*E-iNbu4Aixv9c=j*wGdKNBB>jo1E_WT~Ib+5A%ie8wGhz*z5jfu>k_m+?C0F=YR|H?o_jtq_8bnDE;~KKGyh34DQIR%YztQJ{}^N;2zX`gG6WK^}B*$(Xd;modQL=IgvJE z+~q1q+}-E2um4kE#yR>f+ufJ&^7`Bkd0&bTYXLpuYox}G1~EE7nl|KWTVD>_*qz^> zN|iPV-NrrQb4a`9o#-3G+sVf{*@F7z6s=A{K_gqKy}#JN{S6iMe>NG7<>-4`7|7Du zv0wkPlNR^J;I2&goZyyhc(vZj2)o#mzB7&o#f(Kr9;OeEK@oF`q(y!y_+ZL@LqG^u z06zFKsis7wi-#OnP${<17}bDiAP&|?%^8nZ8)r~m7h-DF1aAe*Pk3Dxr;Hn$ziDA- z?dL6GkoKp2TFf*M&=%=Eq;;InJ0$C7r#9D$1lgjW* z8IaTwl57<-YQK9QjGAY-jD9O`7S^xk932)C*$E_?t4lv^8wi6YFEaJdf;%9Q-30h0 zy?^0fTd})c%{3FiM5fcuXp>k4;<)xAQpuQbGhMD#g=aN^+p+xig8oxi-%&v*gL+E^ z9QGVA$vM6<)(Q8b4u_4?*qKuphCJQRCZHG<1=V(e>4f0$=t_71Wx&t*%a}@vm*aJA zYQdn|#->h8MO_6~5f1(o1`f20E- z%NQE@+-MPSas2;YrGt>7R78-*r$9dblr)`o`o3;{bUezHygywO*P#tWHpdeNX+cRV z#WYxmPjl?dc+Cl0tX}-M4x|3BOF!41&I;013aXcueInvd8B!uP;{2c;F|KR_jW_Qa z#wO?d7zqrPt2g!LsNvrwj;IOiKb{$`gSD((A?4R z9_mc|#?#riTIMam?GAY!Xga{6&BHSyV=E0^Rue=3qf(Njc(2F5B2p-L6LYC4$ey%B zv<;~L?z0%SL>h_T^UB6=ObbrUlAxK_VY6>TvIM-K%xEM8gQrbS^BkH;1rA?$HcPzk z;jv_n;eR-};%1Sfbts_o5_PQsf%MDHf8TWu;|}(}FTUJ+m8& zO_Z6sc6!#{)%QYkrK*?qQ>8r;#SM`-9^=F`DoY1m%SlIM42d2LpN9hgo4o%F^mRb* zHTKtv;N5(3P6qDV>goYGG~nI!pcBOf_`v6Yehs{tv%|lVetsOHkJV3L#muvvo(H2F zsd3bv(X$i=;KqGO=54K-`zQDU!Z^eNkGP5`S8N@V#4a?Je;hcxqYr1pjt2yYShygc zPm>=1B8xP!6e)kI_1sadz_-M31xALvoqrke?e)O6>YNOUcf7d7YaoH5BCSn%FCk-g z`P?7_Z>;U23-ovJ$D?K2>nSdcO|I&lF@UB-P7(mw+reIu8;ysawEfG7y*NO6e}t~n zMhCOe3Qe|q-VvGoC^X**?m-{3z0}|j3qnzpQIhRrK|k9ZO3@g`QCK$FQm!~V$7)^2 z4HkWSoW?LSgt8g~F++yqBOfc$uG%)&{LBZ+awC4b zjHFYf(0dsSB^(QfijYfPV2%>Lf$MZY>Dt9uss|mt=Kn2wy0r#-DPTVkc)rM173IdLQ>eT$1~mjBXD{;$)BtyPYR<|&~6T3 zj?58k!17T+@HyVXCr`eMgI#ivq)<^O=4AYN7N$l?_IVt$leviEBe4{0;E&k`ibx&a zL;x5(0~S&6+~2=6SPvziFK{rvlc%mhxN-Gtu?1P?RK?pt&qVuAq_fyodoAfj<>eiX zz}!c{>{nBT*V15-rXBu0=nHgs`gd|+CeFrqO*tU7#jQYVw~G>t83{oK_%GT@Sz-#7 zNbOvD24^BOuby6EeK)vI68RS;44A7Tlxv~3#=GzTL5%tCV_}$d#s$rwprp%Sdg9-! zN{y3Q%VWu}dp%NhhK)J=@^QXYK{SFk0f`5Atf6AQV`~IL^fJ52@iY83C0Y)_IpvwP zD7)fN0|k<|mi%Y7LsOiTZMYjF$`5tWb&4oq5J%;0k#VVx0o``cUt#9GX0TQ)NgiZ? zh<{DrEkAPN+rMF&I1~Nt7Kms|O7ekp{}~yr4t@IRM{%nBiXFL+nU`CrzeO~K;2q0bJr2PsM=|K@Z^oC?E|QPRU^G|E$a9fed2)Bi?Z36 zJ94I63q%aGhnomI1wB**xm9@~m?69XZwew2y7M+)BbcMO>ANDJBhq*c3XBpX@aWCo zIC;4Q`#qM-AQpZkb=kjSKkrwS3AXEZ3*;-ry(&BAnR1_`Y}gA+!)6ViE4CE$ZTptT zOXl-7pQ}hUE_y&auAKQ)?1k&>qyQnhP*Rh=f)lkp89~p#x~jJmV!bqs?n~{}uk|h} ze7wK_XqDHR^!4Dfr12&rZg=o@UaDN+b z2u#4IQO<+{l5hEe0AU7kwO&K`_iZf_w8e3D`B_;)PEek- z)*44%<##0M9E|rtv80Gnptke}OaaZc*2u>I(|d+bXH*68XnskPP)K6V?wS+nj{z@EM*YTS9$EY~{dq6epSPhzXu)n{j5pseT=X3wD zW9$JV*kQcZ_qPpYoe|_sEF{b3J`?9-jzIX3?{9*M(W0o+_pJU6u zr#to~@$!f`k(o69&i=2=xx;g0^qVj*_aysdYYxKOr~b0oaFd!W4}YmeQ;cThYfoAkxwGW z@cHy779>)&Y15vre*1Ml(#Hen$GFpv4o5rQ?g;dOS!^NO3A1p+oi13i};*KDMJSoP|NvviXP-H}~E&Q2M|QNIi~ z)f4^MfIuTBKBQl+izex+N5wKGad};7-bB^5vG0Xfb6|Ha`{2XE5pxfcf1e<9>?9{I zKldr>Q>teF>eXu+J;`0gx%ed;0vUL-&&=w=;lyv2`-q zu(?-@-w2t>AWS4*noRXfu9F;O&WsMc7Fp39iwUL6W@Q?^#q=m8xq{U#W@DbZ!jq3a z^R+T1ioHD?ZJ^9_Pq8{%wf!64?$l%T_;2E$CpHg{Rrkf8{!LC6>)s4*+P6=s+nwlp zU$Z%v7O*O_24rgRa3H$Ry^z}`_~gb|qJ+dcR0UcF8o zd1uz_?gJ+#$H~SAZ5}@wiRiG=@awl}YneVu{hsMV87Ra_xKWBJ29-uLU+C$n)N&;vmPN(qL`^EXRdFJewYT!U;&%|8*4H+qaG7EF+ zd@c-`Kwjwt@#Q+(?ux|2ORU*zT}<^%h}DN*Q&w$6hqHR5UPsEaP{^i6N{TUVC4ZWb ztJl&N+ca*@Fva#YDzPH2&L~Bud8CC`z9Fh2H~~DKeA*E+_WI*&PpzqgEH{Im3e#GI z|98~Fw-gETL;7j$NtxCQy}j!uSM1*E=jM8;ba*ngc|&V}EYd{UpN*MdV!>ydExX8t z>rljvB`#>{i$))l8%t|kK>9ANt4n`?LT6OX^^3!sDpZO+fn~!+wf zsRv>H@nphJyF%~SjxQ+;4R*`R()hX{{vW#DGAyd^jT$~fhf*R)%cz9XAsxyfN{5Iv z(nw49sE9+W- zn}#&-JOM9`yMWgI4d866xrQBKwG5;{+iaw?7@Nw zRu+lQeb{~y-TA~jtHh|inf`TnMbW|lJEkco&0_M@KUaw|FZcd~aTo@lZv1vrG+clc zjcBM=+wMZHDpQT4 zhcHGsrBloqwFnt$6 zFFEgBz7;5+%{edK5%j>_eayq%UF3)O_bQkB3Ahs_$3qdx=kJg1!Qr2BS49rADiR(~ zZQX>7LQdYJ4=C`J9!uuQT*Z&t#>Z-fS)ub{jIRf@O-vr>HhF)E=`L^TH}!ajq~)a; zTV1FTmDuKm_@F@6JUruEcp=eEOY2GOa@Oz5ELvk^Pur5vbeqPPVZ;Z+Qxa?s<(IAm z+A+r8RMbEm?Z`VqBT6|92V=86<)yA=D@)GS)HZi=`5G7RJ@bdR(R}~9)~qG7c-^z< z75L6e@dcw%N)TrWbAo-55{!ZIq)1u?@s9gX>o2WWyV={$%#gF)sTU2NODIH{D_G#-|8W?45a5rmYkV(&!gCbdw>!q=2O4;tj)f zxj3t@;K>aBva8kAt(=n!8)Ty-$+dLU=g`z^ zx$=weCU5_%`7EWJpbjUPGKKSL>-Yx>%nfYgkLoc`bKo8^y2mK`+WK|xiwnv9(_}|Xw(;`x?4y)SWZt|7(|C!GAQ@ET{5Cpjc}U#xK3M7DnSo@XL}x( zEb;aRbBDE0_Dj^P?Z)W`YQ_#TJ4)m!d#tc*W1&OeRCe~Q>Vl4DhD+~}Mp39KA+1gP zSJ2uy^ejyl#Fk{Ssf11K$a(ZK?JW$blNm9as3nbCHcDt+>nopfNxC?*?nEZi+u_o- zy)Qg+UF|;o{&yczZJ(%%X0W|;m8#6iwyLYx%7cA}UlPW@j}~r1?Y0l7@wxws-Fe>SILW@hRQIhk^OP%kOcY)n zek)Rdv12ND9^1>{-v8s5@bNySss{9aO)i|3krL}0pffmDb9BUOAgJjeF%7-q`?-t# z%-e?l=XjMVAmu0J+flNk@M`76&HQ&@$1Ff;=W;i6K9Z-y^r=p4U~4l_8}P5JEgrkp z_RalY!Sw1Thn;4zc{=O7ys#yV2xU-3L{9vXV~a8TC+Zj(eZP2I8_@_;y~e1lGNLRj z-1nfzr4h~6BTh+q7`~kez0xht@y&{wkKQ+_pBecbq(i&CtE?H#?8QrCA!VlWT)-EO z*@o7pw!aU0MlUfHD@Qtspo z)V3H@a&boQCXsFPQ^ScX6h4a&uQ2}vVMy}Cw?A*n9M9Iz7nAyCy7%C>TgQF}1#(rj>H`6qM?3qe)?5*BQA;Z6uIR=w*@1K9$(0 z2f9Oa8gJ*V$(-Xi`RO%a_@!??Z)a3soSQ)ApM|_9U{k}cPC(3=ZG87EZ=JxKQL;fJAZ+=(|F z4KXizGrRSrCjH|KSCVs9C$ph&>ZQV*hF{lk%Lv|dCpq2q8Z2|*Y%*!gatXf++*!tyWJ(oEqZU#~=O$S~_Vz_S*UBVrXznoz=_9#--`C)+9Gi^5T6$=v4c)!vhbyVlyK+QKudOf=Sk8f(hC?WwSWkMt;~CyrxQQV9%Zre_Ubq z%8I(thY#{6h{$O4xy=TUmdKm4X`Ri@>R#`kM=;q~wjQSZH*EAwTY8oahxu*8pJ_&E zfB65qhb#`X+O_%;T=Ct%^B#13zr^Nfe0(9bs#e-{Jd{6)`j{M(pc&c_l@B{9mh2i8#dJjXZK@xcAI0}a%chZhyPDEq^He7SXleAC%`kt zr<>w0u8!ALUM=9TlsP!As%MS9>TeK}%U9rJ5zsIGxv@B)(fau=NVQTA?lDI4_{cXy@j*+V;db1}^12(-8RO0E# zYumRJ;BLZ;I0ZQozc#vhqVEF#hR+qGR=NQ-QCjnb?sn@hC6Ikx)_RFzM9X?tT9e#& zG4=g-w5ejfqlE2C+6(8%(`xXT`LhspUQ~#~HH71)V*BH-@4~Dpymq^yLvY>kqW=VG z#kHR8U|w8`%K0rnY}aiH>5&ja;3v_mHQ>e;FY`e7Kea-79h0iAAC4>~aN;=gpltA$@l}an6fFpz@mBDrl&@rfo zEW%ehlqxboA9jx0ldPyt^s>RgPrce&sZXip{_ZW0#2E+qziQOiiv+>V*I90u#%rSh zG5XU;LE(V2d|3#-Mn#~8%Xj+~D?W4^UWnwtH($>caf8ZB z1nE=rtzyyG+Ih;|54+NK_i9yye0HdkxjXBX<)^fxZx^dl4xly|5dm+GMOW;#{sMq- z^jF)dXgjDakxkTqzTOT z>EgABH-q&~*hT?%8b2la5wr60=U$9LN{uY9J*NVpYz>jw^W7@se*4|E0}l_A+1zUU;BPKl37lCeMRXb~&gdB7KOjzjJ4qRgdPS zf;Hum`mh!^z;tt7x%Z@zHco9DrY-!05-wCa-O+Same2MGzRcPqa9<))MAHn6NqZ{c zwB37Ne)d`i9BO#XH9NHZ#z||7<$#&S&x+1Q(TC49z=0LU*C7gJkzfbFIm>mIJrh<%ob=bv@EUj^J$u0gJW0NR*tVo=303qz54DS z>I8X`_~tEMJI%^`o5fYXzLf}*%DlU7EVB0zEY)jY>gN^qc53zP@7$2ApnkD5o|^iL z1@{9H6!V2?{u$ExQMXE%ieK%rA|D7;n}~m`6YlaVCOu2&ON*Y+?4Q;WjnvK#{<8&R4X_KC*M$jY6nSmFTE#1t3w)NmQF?p!WY9{#s zjWr3;Wy;E$MWz;PIO^r~H`_AZWu{rlc4Ed`FG%JRf{gr^xr;0&9prNbJnOT+ljhN) zm%*-V<|3accYHqQ-=&tV(hIeQPY2_MkeBpqSJ3Q09 zrT&a~`_2@_LW)#G&w|lIwkG8qK|_qX!TWN{ed?Zj)0NCh^fvO6ZG@l_CCi58y;r{# z)t@ehXGOOSVDX+Vrhn>}6<;7t@${D$WN8BidgiX*@aAKbPc{r#{4?2d4_xY2DY(?A zvs8H6_@RSiPN8(fsGrf%e)!5Q+>gj5yrPz18#$)5Z4>y!6zK=fzDa}CO02&98&oFYX!r>R*xH=WV+mA=9x+mw&~`t zE0TN~LW&Ebp$gEuq7@`afJQ#C$mNm}411y@btnvX#hgg}o{Zw>~T0U_Kn`P6TSWCCQ6x3Jr zdmvLmyZC}_BM1jV5T)~=lZg5FchGgk``G1P1u2n6l5TL(+oa5Sn&y2a35pyh+V{Wf zy=b18_c)cw%S`_^+&P!99;)Jp#+r!4#Lo+5k&j3t?jDBY@PO*@int%MJxNLl4Y&NY zgq%oaao$Y)3rG7+m&q-DWxLC8I!|paMlU^p5(NrXejfE{J*fESow@9GJC4GKcmZ-L zTnYib1M={b3zEtkvaH&}dsRxJemts!*ndeIM;ButOgwaetJU}3{{Ua) zTwL42?8ln6^&r-9gpLc|s%`!{D#`7u z^8o41#(AjqZdZ53b5C52Rp1p#kwgRw`|(rTckhs~2Bqan5gG11o<=d&u#f73yDB+p zZVwwO4#L2SVt5gcwz9byaK+p+XCn9_axwX<%wYD^!$ZSyRy@Rlil{JE_n~$a@!Xn}w@D`s=4X$+1Ldu{A zx#?R`4YWsLhI4^d#>-trGx`F-kQk%CF!_M>!V5oSlT_(yb^pw0V0&psujJRC=PDC= zpMT8@W?FFCP2t1v)>jT1mOM}AxD`a3oA-mD{ht_G| z)U#WVf`Yg;8h|$jg2zIT-YT{NKylXt($ZRIKYe~0j`~ zyGaqOqUNrke`FU#KV`*Jrb@pXp!|Jz^J%qyF5XAiwG|Wh>5pIQ+)~cS3l1oUC%&8h zX10?U2*~YVb|M7sZ^D;yVe97Uy)eFgy)ZJ$HX zH0~oG3W*PSvsXARyo9xWiJJjg{!M0rWf`3Rkj`N->|vd1oPT3T-f6?@J2HpY zQ7t%7mbQ`QNix%190Oapn9~rsm@?-^W4~|eQ}CKjd+J%&xXA)vqji^-{UV0;jBaQz zG6l&@Dx_1{{T`|W~^ zRsxZ1KMv=cOYkKB%#oF%U3Hy>$TT^yMLovxtzJXwt>nBaT)y$gIsH=p=ct!G626N1 z9B+jKJKdj0HO<%@?al;T-OS&t?{x9J8WkK7B)ozRe9D%aC0X1ik=w&nQ6VCqONEnH zn1}#IJ8kcfY2`tw^IaS;MS5b3rR9F3cCX>zsF3Y(XOE1P&AQJXoE&BGpa0N}pWO9W zS@|^c(1-5tq|Fs>HOuZxL-EZce7?&A+eOpoMy#JB zD>Ps;7vSWrSdgx*A_6ZG1kF~JEM)wQhx=7;Q#~Rf4Ww4RrCl=Fey7~ei;nTHe^!@E z5zg%jd8;-y-Fp_%6McFPvku`U9zC0t$+r3vwQO;l>Q-bsNo(;k=kw)*RyW&)(zhV1 zDcXh%F$2%$rPg?8jD_sFA7NJ{b0%uNfT0c@Sb7Wv9G}PtSEQwPlXUpmrWZCzzpFAg zcla`?(ga4Ywi(2ub8Ndy5#t_h?fZhblE~h-7P<(#e~e{@w~~XXksr#0upB??y=MwD zqhCS$aktYQjlmB=Qd*ZVuQ(p|mfdpcsN}8X-eg^o5A~zFpQi(_DwoyOH31uwJU#S~ z1oMQ>aVp#1g*kb`+Q&X2LyVTbR5S6_wTP|YNe#uk-{d)34Z{8;+jUt#j zZ$_v15*^4!`{GK|mlbfuJ?=(w;G>~_)C`x`uSZd$mLg#C`0b3gY7fipBQRD2WOdz| z6MnrAl?Y>OCnM^fL8{tLYzZGel$ek{G&g|Rou$H}Fp%rMEiL_X5q@};k#60p#vE0h zT0XZODkOXzf>y3UsSXY_AR@Xy04a(l0&m;hSN{pq+xwK62w#-ll7x<(;6fAf`;n_f zz_tD!3Z5F@H1$QGapR{kG>c9TFi#DZ@i5Cc@Oku7hkJCQ!& zjr!fl-k8_t@?(W;i%d{4#YkYIbwC19%IW@$Jy320_W`DKP2WbB4mHxfl^L@^S>$7H z%ffpy{Ln<`LKMT+Dn#@6^Q-)KI2}>3d2Yuxd3<6DcruBE8e)>AWlAOEve`g^B|s94 zaOjj`H?IGu1&9=ocx(CBC?+Iye3SPX~wAFk0;dpZLc^K*tqjFpogwTGW@VNeMoVc>KWkz=;Xi8ccG1w zkXK#3ZGIqM#7ras{8u+X0)P^aWJhOM>n0R`w%0JgrvON74hfmW_={&dyc@6h^q7>f z;_}bK$;rcq$_awxtw@mavX>vgAnOtKp5E=5+bBZ~M5Q?EM7-Nn<3=hEDY1@DdSO1$ z5JP+aszk)mWkS1{oksa?ahS?3upqrn_1e{JTLK;m`t(OlC%<4-p#9p($rn6>yQA-r ztibh4R=;E<78)1$Ru?jS`_FAE1G-dkyQAjj?(4W)cRKfGtf7ZPWj^7;7BqoRy|cQg zAtlYo9*{G0&z@01MUvFKh&C~tIW(3kyc)9tnABz&o1z=(-cKq*=D?ut4rea}NZ6IE z*5@?Zs?R^bp}|w#@7Y9(X@7pX@oHKR_3vtLaf|r=`U!q?kg_T@ zUhgJa_o`<1Q;1uViv&V-Txb4JLGyyoL{PfvLk%vhy>tNYEI&cX_@WcnX$9WO!);@it@xy^&Va07`A z?BZu3S3?JZ`%1IbMG3So_;mCi{|Ow(5Sy*$)2S`{u%+stzPaAu7BoNj*FVBoS(47- z>pP`YKJD)zd(y7q!4V8@Yrwz&HBC-HuSplyL1uT$ zXYuBPGV_TOS}4~@lLsV%zo>C&#JvOe;mR!Utf*rcNRw=#>kVPKRF>E-2=p5?-S0U! zvN<`mmrJQ=rSHS8oz=Km1C_8zwr#!N_-xI8avl#AxxYY<|2>CY_AxO6i``> zw=-WkkCz<)bGMe$cX|@+MOg89VTeaE+pf%_;rC6)GJTq~g@Q0a0>#*Pj*2knMksK4 zK#V`FXxZNcvq794JI4Xl()+9;+4c^?SH&@3E3zm!UQ|?!L}Qa-5PXuKJ$`~M;eLH` zK?7R+8hd%}Bl&^v(;N(QphmvNbZ_m|`gkF7(Gq=bYr}qsiKm z9v0hS4hXQE`~c)+fX$>q>C5+VP5s95Ge1aFNfoDjQ>)DC%c_#tOfGDp6MR1JxYY}j zE9!w?)Q^u}Kz_~FU#M}NC{hFy{!%6YoHJzo{_XcKqVr)p6STunpc}Y}wJEp)a&x7q z61J4-x#%nb(hJEk3RYFmwZYbhl6f1l{|k? z-aK>`qeoY)ctuBTrq(wZmUE#UDu%TIZS!Eyp15ZfpwuHSBfV8R8@va;Hf z!8kHT4;#9bP?ey2@?nE3ZBq^PR;S#I$FES_t7}-!D*tt34((su=pYtk61u6N-6ZH_Ojv6(Dt!2u4v;344k}QNm`|B@I+P_s|WAA?oQZJ226_P+v&J9_&|7{OlUf;fb zDfah=55*lIs9<+t<9>yK2Vf=eXh#-P;A8OHiZX`p6Wdd+_uS(g#I~20Wyx10v-nr9 z?^~m{5;lvw6_Z7bN*qmrOkvP|UmV_A=|_|koGo~W%?b1Hb8`AtkU*zQuc{i!S5UEF zX!SJ}rDtCx0*|Ep@i=3?i_Y6pF{j=B8OlVGG&_597}D4GSx6+8wAAa8>9LKTOii_4 zeK`4sBuBljZc&exOf&KNz086gBct&ZqdWjqh{GU zT~${2Nm7C*68W=yU&Z+>iR_8ScgIOS4N8mu{WZ>l zboiN^&&mxM&j<99xYLI$>-hie`J`xNC6AY#zSI~el2(|$NvioA_g%0;6HuFfTa!a? zvOqvh1Ic!78@7vOU(2+uBIltd*=1qmT5s+<(wIuv!SuN0)VU=2u_BdV@`#uQf%{bt z3vN<*iDR6^eH0kO%vVPSmA28e243k^siVJ?*Sh=?%@*DIG#DD|S{NXshuA7L5 z8jvC~XH;j%Boq zyPNG=o^i&()sYDTaK!hnIO-ywU$?=6DRQozn?T5tgRoi*P}s`xR%X?HKO>Wjp(|w2 z*tp2Q_v42OX7gmwjoO8p(1-!ir-hbnp7PlYZ*OJ7fU~xGg}@7Q^wxioZ!c-!PIEgm zk#S{Xh5%EY*$Cv1765wrGV@j-xJ$x-ya@x)AM+p=Oo>kj~F!w+FTL}TRXm$(aOe75S_o7p<3 zHNqg|h}M0rg$Sir<%cygD@jhAOA~UG&_3Iyef^A2D3I`eY|?DJ*cb1gxlgjXj-gqb zaUayuK#qyh#9rn`%1>cUT6c=~_Af_TM!6uziSh0|w&k3!q&!7_tK)cRqyn*mD=#m3 zlg(kqECP7hTalZR+l#OhFiU>;6)Ovjl<#|0q{P#{p&ukYI-{*fU25WbCzg@4!3!3JOk z2VoHc&waAdn^&GmetqP-{FELJHe(ES586jB78(|9qy8|&izr6kwWhF9froSJzija^ ze9*!4`z}o2Knt&3>_c85dU{BJsh$sjQ`al5ercNW$YE>&6}^x+2}y{l}<85deLsd+!#|%7~~;9ep<+asjaH)ecgDwm-6(oaZSX$Xwlp+q1m<{rNmXVL zl+Rsf^s4OGUqj64uwty-{xwy!SK#V|!;^Ebx#F+0yDQuiY<|VY!(U)6Sg7aXa_^I) zJeon>hJ-On$i5Ixb)EbCi{_40V{Zl|<;zJcn!rTo+M6%}RJi{teZ{eVv2$fX0Zpl60IAEL^3p%1&CxXgLb z6{iv1$P1FeIiMq?n5ti+4V0a3N=NfUhuX=Xlf&RsLv&MrBXLi6(*P}pDK~Sf&@QgL zQA*Fn`@~+t;NV<7sVbk*mbUD4Npu-0G%fSJ-oX;{b`+q7xzvQ-{P3@g1r4C6`H+yX zy9i}LvNR*{SOB^|egWc1@~b{X>t|n7s9DS359a|TdJz-;iey%$$5b{J9nqmZ0kj45 zU;_XASnd_zTPsQy$d{K&^0;cz@~GnM=Xrf*My9)%mQhJ)Q)TRdgBgb7qR&w|_Mx${ z^e!Cdf|!d1#8~Y(t-So?1&EK-_X4B!YI9#oQ4O_0#t`HP}&oBlt3}oo)8-()mLE(f8d+EDYuSiZJP*f`9L=Pa% z;R()JmMs{$4~k+54-1WFY>Sd_pHbZ_f4=&gPlNZ*Ky|Mpg2kWoRtplqM*G0k>fFdKI9Q7ugtSNLN=MTxLqi|bxwt~PRoUQH1vlgW)V1gZJq_VEs)<^9V{QKVM=6l(XR(TP;8Uq%Q@*4krKP zqxm28<;*knlR)yp0|p`+;yc+$fCM_hJgUYwmjNDuVz66y0Bp;=XTFrWDa;OO`xsP^ zhn`hsuxvs2^n7!lhV~+(BQ`@C-)G+ui>#20CMwr3d+^e5ghiq#T1i_t8Mai=E{jjC zL=Q-~=>jaz+1%#qq}6s}JdioVQvfo;>L8I$@5PES@%Ul*ZF>Cg+g&idcn@U)JnX(S z`>ofYU7D7K9M1|xmpl`#W@L{otuhl?s5oZZq|$?Z<2h9b6v(2gPWLui(Z%IJu1H6L zF7xK6NMZ9?G9NECKk#S@-)As&&1H9mgON^;(*Dug*DGWoWf66FTUB3Q zzYeQT{#h+Tzy{J{K9hd3`bw@ywWNXFFWzivNU&+(8nJ9m954`itzqWbogv+DV-U^Cc5>= zg|x1U%uMfndm~H$#H*|%7wLPory+%bZ1m zb;~NiLG1nN-fnAAUy`#gXwq6EBTGvkf=4pg+M{+j;mHR?xe-aXHeFZj%H}SU5Mf&g zesU9O9@>7OgL8>wxE+@~8I3-1kXL^S1khC{Rsu~V-0|Z%=WG-TpPfo)t5flI^^Sq^ zfW)E)TM5hss8Ay$`f@uM4mHg=1?adHAe3M9QKQP?5`cs`2&Dc0kT6dolJ5@vp5u|3 za!*-rnjXE?0$nZ~a|J{oiK7*{*D|Zul!rAinYum^ou-b{HDM5oB^uEK=THCw%% zjVugEj0z5;-zP>)x1FMoHgJ2ZpC>;-P1kFqq?r@#PT%_)s5Mj9M8#g<_GUi+#`fY9iTjn0-W{DU=9hTownKHq?w)E3 zUwk4Xmv;VR*+>QCtD*6t8fsxSzTc-MR@^b5iFjMwJa|@JSC~E z^T`$Q@AxUNms~!_x1>_{Ox%81r271za$Gx47_4)xoV1bGg8leV+7XU|pSu~Eww{|&!^Pek@2;@sA5EdCJ__!1&9 zUs>eC{HCHJMi-(YIUHe{0HcZC*M{ihY(8z?7XSWg@?q2z#bdi#9;W{v!i0SHR=U#@ zk%&MQxipP3193Y&_+ch`p0%jIUz;BS9QS=p>>=OH9+&h%ZA#J| zR3KBk1%{Kg?40O$As*5w)Za|+P z2;TdKgy=fsxcYM>sZ}D6y-XV4^>YG6LTXjn}JTojMUb$|&)0k6IfCwJfub!U zDrBP%jQp|dsvYD>|1bhri(k67nTi%3?ksNxzd`W_!$d8wGcoVs)dmp)5~fCK_BX zBGH95X^2`yDLFL5}AiDAr3Kk%slv+Anr86+FB=W8JCt3MrzYX19s;XVUgvEe^> z-ZaK|l-aA?MFg6ycE|!E(nx_PSlRooZ|1he1u{tJY($`j|KK`G#@kfl!IDnnn^ZQb zhC%>}h$%wec+mvC+Y^ptP#0mYrh|PfX>K<2(Byt@o6+mw1RXT~$bY*SfR=NKyPeM- zdE2PUZ&jh_EpxTPlkfhN$RvHtqJ#l?#~d5gOQ*}s8L+|+pnc{tgcfX~I)7w#Q<8^d zq~;8VSdh>!xsgFK6qg9?)F^VU+=8shZGO)^yyo7Y+}ZZPV2-oK1s9vvetIGa_EV!g zt6q?_P!Nwe>s8<>DSo)p4=eRGWiEcH(m^lvo&RxOwwO7-E~)x%wQch?y(>DBV+#ZbxMFKX>ZP(rMJYkD78IDUAX(kM(z055M+!gzY`6CJhn+eN zW|W5E(EZr{9P6Mnnd{}RM;AunakmH>wD&Cz8TVFeEsA7HHufF;Ii@r`4lSP z@AO~~7$DKa6d*~ZXl>Y(MI{hYg~JWWhKt2}gp< z@hQ~hYQSg2yCX7A@idzp@Qu;>v>54ZwYYPPhb%+}jE}s+l&B=r-CsIFsh2bmk09m4 zAig-Z40Ppo>;3De%aL;bu0e^y*0a;%zlv<{o)MNAfbU*rwzaSA?h0??vR$Bk?8+L- zxA_!dg?Jkc)QYE{%i75aCQI9LIHlSl`h#%4=jh0e$TL+n#Hmfj=H2%Oe0{TRDQFWt z#0$RQ1&Y8Ibq@l@0sB#YI-xEOlqkpU3R`f-Qzi`0?R*=JVXZIdWkI+v3}S3X5i<Qf~QO@Da9q1k5X{S@HPSRlZCo)yqJ+0m#JoG2uq6H zOmhFXeZ$f5gak7T1&a=w|A`nlx&DP!VmlUcajdwcF(B&Ss4poRJ3XC2WBg0mwUo8*@a`wp|H)BYG7?6W*56GWV`=$dG&%dd#>YW%|hNu=05I>ViQT_y~`w6Am+V-`vk^)|R!J6WT#_#D&%%oq6c6uu__ z@45;SDl?~dlvcmS%bF&Eh!PJ|W&(`sgR9kEJOf_^9oNVSbcN5fe!qEn>HGjqcF(y9 zzvA8+yqrE6xrH$-?lKjaA=EnzlDRYlMGzY(0T^W<#k|r?Gs5o@zX+S`*-HY(J6g=e zXGj57HWPKqGa?)J!oBP6#aplmV{GKsyaJFdKm~+Hj=R~;wI>n(l{`UY`amW4?Z=OB zYM+T0(Clj4(9G3|rZ4IDjZKRsI%!_Wr-35p1I>w?m!ks=voM(Si@%YH&^${E&61YA z1vRZIkWgr9XdJbt2Qe~MjLPq*JXabP?jlNEFRwyUHI!Q%*aeZvYS6S%(m7L5-BKk# z1*i64i0A&F7T{7s2VakvB*^T0^QydcNC`51dfa`d_YE?B`tYt^}0m1x;^FVT`?aUV`D#V8iEY4 zi+KJ&Hp1JnnT$}5m7UrCu=xsIg{YU)?MzFrYH=v30mk-zF~(eSM7TI4Ddo4NY{7(RCVJwjZ$L&y( zTQjHpJO`28a?GnMR5$qf66&(8in7$^7nB}#K0Y^;_e~-?uYMc)z9RNn{km7q;Wx-pU-+h+}+)&9qXt7 zhNz6&`z_x9w!f?4&chk_Bk&bOz|eDkP(gEEfd!y{A(LGisUlWmK{@;kNUab2Rwu3P zig*~d-e?yYRrtiV8q%m-?MSM~3?2stq6S3JS^kMy-)2Z#47_|+MkOq^VFJ|E6%Sv( zx!8Y)mt6;Y?I$y`6SZVjNPLl+`mXHo>YwZEI-HcmHpF+}Y4OC6NFF-hO`QqaX`olk zM5YTg?#F5-CfDjces{vAfmUDKJBzkRk}~bW*0R|=4|ZQ0bV+>m6)^}u%igDJsZB^4 zTk52DW0nN?Rj1YQ{}y%?@|HtCqF~3 zCR_u^$w8|iYHU@r#4=1JD0*7vvUcf*$zXBlB3*!$Bba8_p8;}s#0*)4*5$1p_G4|g zo!WZf$Vp9b0DA6wXZ)$Lakk3UpFXgYV#C9aW`l7j&=CAn{Y3e!Z7-z9M_FG0ggY1q#? zpvuVa(ggN>r6=_@b6-EenVDBc4EwSt0THPx1P*MKFsd%FT}^x!aD^s*{%V5FLJ%Uf z3)EuSV2PF53KBM5bimoY3{9h>`8=f`s-=9s%t0Fx**%f}kwcOlC-6w_Qbhv|LQ*5Qm6d?nIaPr=!?X&IGB=>KLDNZ zNzU>WbOIGpBj7L2b=CLe(l2qPe*^iMV1T+I#^rq8l_De5G;c>Iwvoa4{%`SPr?=JX zyH1SWS0rD;KJ2yXsF0`nqjmYZRD<~#4n=AnYZfPMf&)J`VnA2z42iz|P}ZR)SVJCU zpHH1Ohvui>ubw__pG{ix5DgyncXDjdFXYxg2s1|9x}|#SmK>RI8Y+f{N+`3I6VAOV ztZ}dYcNx5ZNM4fnOkeIkQI*b9cxmDTd3}4c`xYpHPXUiS4c4 zw=?z&l9fNQe`OCliJU4!HSQrsOQK(vnrA5GhG_Mm;P?+^D8w)6lKZxDu`<%~-_|A& zVy_12LVx(O(A=e;-Wzo?eZ^`W=MNDY+89%gg1T&x45`z-F`ADT(qqZq<*fhf19-VXa@c$d?w*`RH+i; zBqz{X%;yaI;lBS1so{D=~4M#qGIygbH|LA&3>wqseI}3_; zXE7%;h2`@r)HfG-+HXU|nZAz^AxGpsz#fRHYJCG|Zbp$?FQmlrO3SdMymIl@V`eE* zQc(*Uo4+FrL%>wpiV4LnJ2GF|Z3sWHz}`yRufF9kYzJ-}?fL!HUG$KeDD_S zWFPqiu3(mw0x6RU#X&c!!Or%fMpAinZ`an?LZCp9Q4Vwj?WGT?->2?bUZU{2OyFU7 zw`W&F)urqO>3>myS;Y&lA<9x9M}J@6)*rs9OwsNExjBO?r!W-kkIV2>eZ%6lhpmDm zZVGJ>#>9B*_x;Dqo7#){mgGf9^VEN8WR*}biR5F|-`lO%A})MZ(b&)(ADNtDpCb zPya1pb3l`^l@hb4?bPS=ca3)4*>~v)Mn&ghJ44mqz1C8I8L%4EHG1^e8Xxl*N2uiS z+sV`aW=#k9sjc5lS_J&{fvNz_em-R7E|0h}S^ZlaE#c5U@o+p@1do?E>y%95Zx64$ zYv0qd)-%HKfHu?;BoBX2|-;=ZB}hq<+SrT z#Az>Yl>K7v_-i01f7_^c^RPtrTTOpRU-^%c{jW#zJr(q?S+XU54_^OjtEk16$VH{x zX1%fxd`M{?cKcikmYP2L;%y5&2`>2L(qom0j}GZElR%<%-3557LUUL4@~_b2!DU&Z3$gd*6kqHv-pO#k8RBzO_3Ah7sZHFV@KC)$SqFbKQ~?F$$=Y-3+x8r zVc~UJ?U$EdY(uy4J-HFmMA}}ILt*a;{(#XQ+nANaK049edm2){70h=AG`BEF1i*^ z=a<{A|H`Zw`Dj+D`aceWwct>+HtYRx>RMnz{*U_=b$0fJJz&F$ z9L0MC(9yDFIxe2l>X>gl@tI;f4!t%YkXkcx7$@zX|M!OJ%j`Rld-h zZPApdP1ZK++rnPtt?dz$IH=x9g7c1O-pC#EzHY^wAlfk5R zfp_em>MT;|^uCI~08-;((Vs<0@m#@WZ zTwB#>`FZqWGfkh?hMrUZiygAf<@2+g2RPG}ci%bkC-Kgu`Qx6`*#qypTkX~}B@0JS zif(o6X`MLSx3g-qX1{xxw$VYIo7BEzd$^q#j5B4osG6(LjOw5P$Dhi0mAK!H#$C)5 z4VZm0&KodkIC-Pz;p#*(kD*`J-ay6n*6~*ii77_Ovkwn*WB&XUSZDnos@^&*s_%OP zJwpou4k<08fFdPQ(!wB0*9eG!($dn+n3R+VNSD+gUDAU}OG!6KcX!=ApYQ$M=ed9J z%)>eR>~r?sYp?yTcdhqHE^)@EMNpi*kXGVamL5~n4xLRy;yay3>bkGGObTgN8)-Wd z9pZ~e|A;zl?0tw)0NpnqTF#3s9k%glxPGk_FKou)X?UJ>DGez2lOB7;8Ww<&9z^2G z|A1e%F#5(>=-{jH-G#4Ra!90(!yDe|xIaCG3IhG3!Sbq>><9#=5=*zWzgjqv9?YdP zFVLqSuQSa52|l==-u&4+_~}N*XHT-E3*kw-gv}r#>R~)-6+gc8O@XBJHq`86bw2@( z(lJkNosEp~kU||Nq$r_ED%p?C)oxUA>@3eDD8I*PdXi3#e2G1Tqi*#O`uzL79FA8l zKOh5KFwU4U`P(9Ay0%t@Ul!Y6iB=~0*hQy*CUd`r;s(hd?%q5i>Q(ewGv4VB398YB z`hBJH1P#SJ^L|^+5fWFw8VK#yJzYv?%<$%#eI+`z8o#)xH59<6r=y%v*)2CVsyAl( z;Iwu&9BT{EhfXrIlDak*#TWn;W)tE|D} z-VoHI4e0!cUf5e&0&)wFj?NvaPbSUx->cE+?61x5oKtJO;h#>fT)zStl<24YS_*Zj zRUBIAlBlMSkRW(WgX9dcl=9lp!3S4ici5o@A`fW~79Bw!qfW{klT(r)M#GzIzFmhJ z==Z5;d{8hL+CqG+O4*+&GmJnJi}lWa=b8Xa~F1yM%C}LMs3U_zWA=B?RiI zBA*Go`dj~1=oKv4|AOM^0=@j0-&CKv=yZdu*lvv5cI<#YhaxUaNBL5KC6!d}+%Gq} zqC)pY^QVkrzw^#k3;kcpG+z&umkPf1^};234!3gx>j!teF73tDOBtj?`Mr}dJa{gm zs547P0SWinW^?lW<$KN+L;Zt;Rw;oSM6DqRujtmE5)ktNS`{Mc)~^#cfGP+JR#z)` z&JyhI+piP9V%nc9yZj65?GCVG6B{f@x)4MAO~sn3Sia&csIe-rYl*>Foa(&3lUf7Y zf*Jm`0%+04`^!{UEyq=9V^91#o`IB4*9iq@)y12b=iwZ0lTzNX5z{^T)SQMPGlUU) z`9PF`(|UbR;@^NO7HeX~r#hto(Go$6d|HdwjLv`e&hM}7&!0rZrB_fR;yb1^zec*B zc1q8J3vFw>{oic|a{m+KuT@1^d^#K6s7{h>5;2q0!@}TI)Yyj=EC~SB)~m8VyFL~s z#hD%+GVLgfL_Tw?F9>Gu_?yRAd{_rE_d703^&jW_YmmSy^a$4Si9JUq7p)JQ7BDSZ zQ4od&vXZqn>nRSRjDCLQZSQtW5qIKZimavAHSt)3{b-+JXJs4M!Vyj zJjafcjB>GW;KiKarrIrFAxNWpr3HsRD>-v+=?vLOd@s2NMai_hXs7(LDm-C)@e^?AjQLlgc#_|gKoKTAC&c$bmF zz<@frr5O41CWvMwP43)4FP7>Xf>4v*H?6i!%rh>0t)k(er3jK3z$G6u?zW8vnT3_c z$k-qn35Ibk)aslL<}l`j<0d29RLhlPH@l$Ji3*8Ha|AUgEI=k!$?X zHnn@sO3O#@j2bOknW)~ot4VoUaaRj8c=wu+C|b+8ybhWxmS=OiEDH6?-TS79&{I+jub4}$>I$Vv}%ZlZvW0C$QFiV|;g9JRqHs#1(cZxoHUv=I&VSS-+mxFjd&|gD9cM(ybCo z(x#pWzX_cRB?ZJt2g-QRMia7xc|Z}w9^wpy?^p|uiCaG!qk2_1PiDl4(iyL~!ib-m z!OqZ%8M*oxblDS5YYGW%PH+?7K^QNP6HMC6A*DN_TS2*tq1jrapdq2QU-_J9qo(N4}e!m|d& z4F00^BfLKSw|`#$Ysp(-K^%Qt+)oaOOa|^dKk?js#PG~1iS4F$wynsiD|`)dd?h~N z-PGE*;@Re`utkol`{io7c|R^PC&F$lJplSD<}}`X?W6k@^1v6eU>2ywx`65?8w;Pc zgx_!2n^pZ?&TVi>>^w*NL0IlS&$q3wO}Kz+NqzXLcCMMI(?MaTR!||{5hl)Mpxl0< z#2@eL=S7bFTC-TY79aTdj977$cJ7?vewU(7qGUd13P1HGed#FC5<8~E2)RjH?3QB! z6da#*8g4dR4%EX?<}3v0R$GJ<7wr-epERU4b3Sw${eR_+=R`;_-*#q46v zN+_tlzQ_Thbm|$(nN%sXk^CXk1{EwaK-eYS@X1pGo@w@eAwr*{0&S;C?tor0Fl~2{ zd)Dx}-@BisvUUkREOJQmr^f~^4HS&|CNE2Z2#3|v@-5F9n&;qoFzn&J1w`B(*H<39 z%oEz|TGOo?oryU5vbYaWAN3v&qfK*!R}hBB6*Q~5$Ugc6b)Q*|GCPZVdUDQDZ5weR8ag+qrc7mHUSDXGS+)apcYoYTYV~Z7lSjnOy^Y%gee8^7evlAgR|~ zi5qS}5&^8JA%(36vfW_7Ktc`Icdgvt`{+boL`vnl$F#$qT;r{ucZ)xuwCT1gDwgj; zwbz4Mfw)vZsLI4g-Akt6_!PH}!Nd5Xm3ZhI^$}j|A!2dUr=Jz5$A4fLgw0{brCFB5 z=mc0IIgf3;LskJ(jT`}e;52n|>|7`L3K+jBn%?^gdvZge+p-Tac{A^Zf8f4I2^wGa z7GenY)n?3j%1&HaN=(f*h}#4q)(P$qOv)YsgBFU|VMqOD;cCVw%C$#+(KR8<&ElQ* z^$i+896gv$0e6K4&AJ#9Py4`+BNjP;WNnVVr_n!ug*hQ;G5k!`!}}@b!BnLn^xv@Y zPD9hDPVY!2SH(hrB5S6I7f(x&A!Ta|YW`hv?2ieTbc;pLpfT_Z?KA$`WN6!qK!>fJ zKZL!%pN(~SZ;&l8m2FGjLrFh;UM#`kS|g~W4U|=X{Bl7s#;9>^Xbfm8IDVY1b(9Jb z8~AMAh!-K8^bS+lCL z2!WaubBY?*rf^bVuyS_PA=m*SvBruC12k)Lp)yL?hcvE)m{m^I7z>jfSRvd3g?}0V ztg^itRK2laps*#46_-v@D-cQwREknFc4d3P!vFTL3j9m|cWyiw-CE$neCrERgw8Yx z41vqo9mgA1dMtuszG=b|tHj}FA`XwXoO3vkMlsKVPf0d(kHPHkmbBvm_E#XG&wFk! zg}rZGT^@j#GXGVkA+OVwYl?9CG3r74E*0h1F63;K(moJ9Zh?6e&Z=0zv$^3L_>_0( zw&2=XW)9i|i@wGH(#X`=UD#I{t{$jXMo|*()!n>#h2}-_(CLj-MZ6RHp`^Wcp1WS0 zptXlwaI|7t0G#Y7a3C+1Jg}7#Fz`e7|FNZn* z*75NZHc5XTJPx&)Q!`t86L5_TFDmrYr{eP!|rb(c}kVgi(UGc8H_F4Be z9doz?dgOx%B`M)m&yiEhV%wr|U3d`S8mZd7Vt9V#g#&z*q+9u7(uEVl5B?hc7H7sz z^76jBYuU9HZ!Jzu_$V*XiA3tX9(H%D_P0FxOpSm(uB)VlH6^ikknZ>ndPt9s;(xdq zb=-`n?s;R0qZoRqtXu(1xm$>K_Pq!b7{BcA207H!)QIOro{IU>+NW-2#`vupsY%de zy_?-mcvgvqsa}o9v0_IF1@Rur&aOAb)vehQNF;@Zf*C+h<^f9vlZW=Q-6Ee%g{L87 zc6_2#|B@Z1q1Nu&mNPJV6}a6axo`dE2IN(D9Q+c3{QWGLC;!fCC7 zvC^gmvpCJiUCNqxOBGV}-_O3dSVcH5ByKniZ*56IB7-(nt3&?oe?KuOHdyy%on8nE zeW|ZD>Ja`$j}5o!Kez{V6>5$(dm8aSdp2%q`A5uYN;Sdn>?Sm(Vrgw60r@b?HZ0$$ zLiP|XQS?2?IoYAzl82bdUnnG%3Na7B_744bjbzJ{J6IT>Rlb_2PN?tURuq`|WRnaY5Q2FGF$W2v-X^jUy`Hva<;MD!)BFEA=&_{}|(06u59^ zuy#416XH62d^xVju`9Cm=7DRYUDe+F(;8m;4pi!jI^ZmX5K6ueX89n^N-F#4+<>gy zy3%NU$eQ7U-{SlkZ*xLkjK72S58ea=qRM%0%_cKA)QX#u@t!17R~`BVzT>0#u8uvt zK9~kurhx(`;Ip+^u-BfD+>7=!Op889MGfa|Bg>+Pwb>>{8HDn>cd6K=AzOV zzq@B91zDIoi`zw);^lK&{Y;t!t-yt?n)>dcF~%?oUhQv6iY+S#{3oIJ`KBCL(xBYb%V#8SOWF#Llb7=!~>7YNj-{Z z%CbC5Q%h!QeUz4iXtZ(`wSz2<=(_DZuUF1r+wxVRkL=8H*09qlB{s79nx{X<6mu7q zTlc|)?L|4CK=gOxp8s_QA&w7uPqU*!-wn5q#14?G^hRM^WR~>SziyC=j82t3`@y?t z{786VzQPtA_~#m&ZYu(FD81Di?0e(s?5~o~>@~egcBXqf?QO<9mJe1ntm2yfL-H(7 z-VNWf?>No|H-5zcagnM2dXs^U^};IGFE=}4$YxZY1r8fN)CndY= z(cKv59&HUr1HJ|p`;Jh%YHr{J+>OG4bQpH{9|-$ySPm0c2nvtWSYy7X0m|WjvJo@4 zpe%hl+@&}vOFN$sRtSMMJfGF2Ui6N5v zzyW-U4OX`4#il_NL=u_=<}V7!#A1Omh7F9j$d^8flbCS_{O%{?l|!70lq{CV%L3~%r7jTHsrK8?=}uCbgsrhODE3DC9``wzfZcEgo(mwWVklR)5y-?;nL%5^DAT?t+X`}9q(L~d*45MwxF_e&N5eu<@&Ipih z;I~noO{R-FF21i#y9CqJ`W=PyZpNx1UZk5d^8O^-X2MV6(q5NFS>XUdvVv& zZp0*iWl3*OX5pVkX@bO|Bt7=cFPY<4?^ z(|te}6hKFk@mlF1pFyg_ZfhG|T}LWW$2rG(bZYdyx1qorrutr=fh!{oA0fjwG#b=> zWF`CY5OG3{nlrld1Y(ZsJjr9`@+%5@-tY6g@>CczOn(gqp~`aF15_8&w|nZKvp%rZ zNzpmJ)0ux5X-IjC<{{aQQkd_stEm)LE*UN>%$W_fO0D=fjD_(FM1JHJWaF7ueM2~& zs>6LOgucMzSA_I1N1s;RB*#Y>HgimctOYSgx6y;W-9axj2)LMnk+YStm?E?&jLvbF z^;)Aw_~6;!Qv@%<#}`q(-05tMTlOrZXsLsvxvS891s}RCPAr~% zqV)9X2mbh*Zy!PckogvtmXo`52l4qZoforY>#*tPTu0q|bd|ikmI^|EZL#)B5t?ZM zxG8~i>oZ4C|KV%-TZqDg+PT8jq|o@rpCo9?Tx*+pT?MnAlK1p(q$Kb-${T${mHRkz zbD)PMUj@-$7IgL_8Lo7Bv^^dGW|AZu3i*pCRK!Uo#x}&RW7p&gDe2v$LW#AA-eJn= zZ*;>tLe^t4B3{58t{$2mk-T8j*!NxagFpzn^)=n*D-p&Ip!z!I+1~Z5P)W_I8|%{) zq)yOG$dB6r-3bI_9`X^yurd(SKz4z$buB8%Ywj=)qE8Xrw0)E~LbY4Uz1&j# z$^bE$2lTD4V-SA_4rN!_e_EWQ>gCgMWrNfcx*qQT!ehOb9P0te@}pNhtQp|zN(V6P z%q}PJQg1|pgg{zf%tfdy<)s^P&lqumS42Fiqep=E4GfwTRWCS-=7STPNuOt6&OLCD zvBWb80avK#VezvH3lF;yPJC$oT^Be451KkWgh7#iv`tl&X8@}~7M!H7V0ke+6F?pa zsOBKeVz}v`;aa!#5@|45{6GushZ&2|@bD<6a_12>va@ScG5WM2ft<`kcK^`0YT)pk z8Z{5Ky!I?~Oy?B&i*E^Y5agML4Nf)e6=L+Rw$h7>cll@IT7It=Q-37_D9g(2H{r25 zF1zfA%Q_tTt`3fr@|OXaC;en)?bBvv@GFconMc%1808xl3C=|P7dArT9@O2GT-JPX zS0``3O$(y7JZp2I!|?kJ2VimVG}QV8UHfh^fLfSoqWf@rFJ4$mLWL{s1Z)mLI^5d^ z@Z(yN`ku+jb2{7yGBT5qec&?*&Mxx5ce4yBrek9`++AD}Yid9zb(|4zMR%Zzh2MCr z+*0-CZE~_Dm|j|0^?snNheR zzY`!O9JO`>em3etA{ane`-+E+k@4pf#MjY5x+;9V>-UlZ1Dh=Y!u=ezM%Y@YV#yBF zR1#W0lDB;!nZ%!dF}CseE9mL$eIXi8CbWtO({boBj~N9Rbx(2}VCx&c&FQMUx}&}*80_br}Fl4Hl9;~?;+tYl&^2tW%%I{Osx zx=a8oOt~a;A5%f|8G9|&uA)8;v&}Ux#1$bneCR+vR5ek|@j9ezw$=EIKZMb^-vzS1 z9^Y1$H1b#Q$Vwz+v$E27tKwRs=?Nng4g=NfB2u@`?XF+<7T0rIl^<*#}EiprMoQl9hB#|t7aX0}0ubNM-~7X_BIk3A40A4cGq zw@lN29mqHG_f4f7#gc?kHNFh%YrEMO#E7(9JTAl&P)CXRs6l$zJCrz}U_ksz4sTe!>PA?YLLrcr?<#BF z1u9J@cCV5bF?HX4I`Z8Nj@1S*W|PnI{S9qL0D&DlXVq^B%f2*$W#8L7iVWO;2tNK?l&TIT83)5GTS zfT$~6wgy($55kM0NiC^zY&)R2aLY-jkI5mbT!a_K_7a(l6OZa$TX~C2Y0rGRX-6+7 zGzhB+xB{nHlcgV3fmUpDbvDTXa345s2IxjW&8%cRZS5oT)BJba6z=r#g zhLHiL%3ED)Car%iO$!}Km5HvcNfloX+V2gX2qQH&0Z>KLn8qxf4MM-Ua(7FBjG6>F zb`y!9#E}b^k+iq>r}MX&g`zjhO^Cy2Z8G#GP1a+bHHMa!xjXgO%1v&vnyxqBofxmS$VM%fNK9)}wSOarBN+boXVYX{In0W4< z@NC_4WCJ+a#@Q3k_BTjV)eYzn-bc**4PPdym@_tAjpdIke1F7a|KwBXGk?v z6Bh`mMK4RbTAYkqkP4uHE~jVrSaU}AmGyOlQAl=RH1d>@Ol;uOB8T6tw;vE={Hf0J76V5=b)Bfw}nq@Hb z<~zc~KaaDcrik~Lq1Pbl0W=3$<|)V)ne6S&X4iYeEJ^BeasB|5NK$mD%3u6_hSfu; z9Z!uYQ>$(Y+KYnf&Bltm6S}k&GoRCyY3k(V&^?>Nj$ipcsl%0g<82UT1P9_hqKXqb zE41(S1;TVI)<;JFoG>KP_XQJKvnaR6XLe0~Ex(yim!N3cKt8(UV0+qBx4c)fpB1HX zvv&l#7W%BlmL7aMcd+^lk?Q!4^|QYV@V$Pp)ITrAZ{w~a(@hg`a#*-Gn1mH*E>X5? z_{{H+#(g1qm=OGx<87L-&1e3(dMu@y;LlyJhHP#&f~|Wko--#AG}}&;SZ){OVb@~t zgp}>~8b{P>!ONx?yKS)ybSwXyy4#GDM#YKMM`NHzSe z*WlR;ob_(v!gt1!eQHTYQTaB&sed%rP1Rf5qELj6dX0-Y9d7f+5YHaIJNIhH395)fHgkI%EYk9&|UdLzc8sTSSur7`tmdil@5$!mYjs%^1bEkt*Va^wRS@+?nlqtd&3Fi8u@oI9RuN(E>fBomffUA`OZ8-|HFDYBFxvIS86r_THGzN5`t!(v_YR;)up6ULg zLBMoU<`zEJgDOLgWSkN=)W3}UhR`2c{mt)5w|kV8*U4q{#x*+&ZQ(<1pyv7rCBAsu z;mr=Eq=5KvOf8QXjkIi<6C-6gMA0R7hNwd}uM2 zFiF{(=QDMQ25WOz$J`ix?wL09;JwaT2|?lqm6>eBEwu0 zhly1euN1HADHZG|vlaj&DJQ!N{@}FxhPjYFhH3xEK0xFsk7f7rz?> z;~Mc5w%!L`1_Bbby}0&QyQzBfm8BFE$G_8yL-c(E(oXqfz|;PLq;)^o=RFTt7V01N zktyXz|M~VrUY#}`$OGfOIwIMhyMl0v3-lSQm^EIU_+y=sX})D1Th6i^y17~%C1ZM9 z>&Any)7Pk4Mr<~i>dlt=gR79C;TnbO88+jFcDM3DAiylV>St}MEf@Y2Hpy^a1@seFt`9m?u!69(whtoA_VRb%1|0q`!8-K*!UH#UjPE-NZp z)yKxVy+16gy!?0iG>xg_C?>OVOSy0OnZeBoi1Wy=V+a_p8+z9P^^V)m&=%;mlYRi_ zJY`fZgRBr$&_(0x>L~|tZ9OEy(|a1ag_l~F&)a^gM?V7s$ux~kh!a%up=##R($`aQ zNSn9A3jpvu(=?3BE>5c4!oL1fv8ynBz!%y4@!yGyRD5bE_j?}!K&GcT=l*z)3eHS2y;nip zYpM!VP1EK*>$=tA=h#SFRWV)(v%l;6fN`-B*X_yKsHS{QFa|?G?;tj8g4*H;-zdubms~vX;-cGywZLI zRKz4Bg(qRG%k}8oa#jdX9?(Z$CQqPO=N3nb0?mioVARiEc=F`p?J zstCLM{Jv(M>9sf7+K)4VUPAOcNaYg}5e|qGxBKG2C-x&g3WrWS0cN3^9mN7A16WL6?kBdW?7}Nz(|SU6yzv~&a|`Z zlR>pJeK6{BH8sQ>wf~9hvy67s{gL%gY(f{da|N~55mKSy3HSvgwG>!gKodfls&=x9 z2}gtAZe^BMn>K3y7R1JQ-DBp?P-tDJOF?Rz#k>(zBXxP^e^kTNcq&Nz zW$WGN2e}>kdKP_I*2m`F$?U7Ui`*keTri>}C4G2ZClfPt&d-DVVMj6@S{uRF@7X;4 zqZ#cGJiXvj?fzj|l136S2*+%loKka4SjP}1#>Xt~ORsv?Z4%5qhp#&&K51B4le`3Z zgM_WVm=o4McEs+Ra}UkZ@PS z!>Bh!Shz`$W*lh3uu>0oz&LSE)MLi7BgCSK4|+ZR!~hX;AdTZ7PD!Y(9KwwM!u!_S zlrQ3xWMaMkyljkBQp=j?T7BWun#f(xJK?ynea^o{OlJ+756)6xyg~w{jP`-wCW8w(&X&NOK!MX50%WvqF4LDi# zjL6RYk_~qdzed={>g@w+;n$WX&N!n96K@yR*Z*z?)`4A?0=5+fjLRjMUiewg!i*gy zepg?BQiy|Ns+PH;fT48-8yWLqR&o=w203~@HBzN>tW^2Vz zUVEj2W6f&w=8R#bk)YO(r@865AA9X2{19mMymoz?Ax?jg9734Dtp;ti#tXM~{&%|& zQMW<8-4R{p#Te@R7;MGHpaxae^7BwRg1c`P?o6+*FE*$l9cX%2f#Cp>-Wo-&0FshO zZGldboEFVtT-=e1yuM}mcFjyW#mqf6EZL`%VPOSoeO15+6jMbEfl~sGO;s-9U}Rfu zuI~;z%3rh#2Z=w8i>LWyu&XD2%KE1b0HIDV`3_j(Hc&& zN%syNPBTf2ioUl-0#4E3&sHo{pC8;NFE2)mJEFrsyh$cnnwYKfgTTm&ebWjueuUWZ zg8MLGD*@5Eg;Oyg zz##cjobtmv^BFU!JG;+7soJxRZ&&vLrDoqUIDv!%#GVgzej7c@r4o47`QKqSFPVt= zH9z_aCQ9C2JZ{x3B|Eq~cslC*ye$QEDUBVSTo63gTq6PY!5nd+q>XbmjsNkU0)GB-o!unZvhE0eE-@(rW-MlD z#IkVgixNjQ>;X-Ll)~1R)n+d`o~2j9N%<5T_=^So>FvtE7gdWK-e9IVY7Ue_ zXFqpi&g^RKK;&uw+xpP{6#s`3ZLID1(a((kyfx>6nC}Ez?E>SUUAqzs>VR@RiQj$G zW|w5XM<`*ZdpUv!)r$FJg2b7zSGZ9y=vgoew>9W{g z#0aLwOO=eTYEei3te|Jf4A#Zl2~`>cz#1k4mFGpIor`q1h49ArP$4+{VSkof^!%fa zuooMeuEY8PE^8GB=6Wl4^x#8hfb*d!UT0gktU{xPxcGqh!5^(8ZTQLnyc*HoKF1(1 z?tQ3vfvF*>^xoD!U>=i%SJNj{Ec1~5m(i=xnKadvu4Oatwe2>B`l+1=Za3=UFdW%< z3ebSKh79+Jpn%|`AnP($sp2cX8wSN&4HQB~K!zL=65RJ}Jb_r5*Rd90|Yn@yrd7ddHN z-iD{ve*?JVh$OYcWcKvaz{k&!Z0?D}?;h4XQS!fZR>vFeX{~b{+lZg|E4W2+!#n36 zudi<%C?6B_Q&srn3d+{rF3HWHeAEoaWi0^cQ10EziB|d-GmwRT%sz2T(1d`cntRQ% zZKi%Cp`#4rUI`{CX`2GRN{=Z?2=uoSPkL@DPW@pF$B5D#aE2LHkO6aU$UITs%Zh{W| z{p-ehV-SmOD2rb&K~oEtvC80!8h5P)gIA9lDoP5b+rK6fdx>f}$Rz z*d&1fn@ zocrPiVhWt$O~DaJpl@UchxgO;a-o<^uh-R`pA7{~$6|&f+sc?r{)?By_m+DIT2Pn?$0!A%~QMXsxhBF|Fy_fkUYnf2WS9dnh-eSqJ9xq&j2PF z-W(jHw+@etoL{O~jy?HZO(|>X?L9uMxd+@uhKL%}e#?DJH5rTZ6PwDf?Q)%#tAk65 zus;O~n@m>IzE(&b@u5(*jnir*K_PXdMCnLc$mwa}Mdgeh@QsoKZ%Oidde+g~k8L+0 zya>@?3#^6EgA(|{g$D;@oCbqE*6{Haa6!KbL+>*orG8{Oq(&&vXa>k*kX4o6Xqh{! z&+)ue3hs5h;^!7FaweqpU|*IWw4M9x1#XuJIV zMo3V)8KRQzzcoU#w!9=5CXHH80&1b17bS#Biy$T%Tdmw-%`( z9IMC|ELmf$#^<+l=*NQd#cQa9{5b`s$xRUP`RuuC(x>pvfS^Ofu6pgmGd=*5 zfvg@SBBDJxXt=&EpS$uZ??-tc=8i=50M|ODbA=G%!?W+bAPbbv{RjZ0i-(T{zJ;DK{1pArg6Yj zEzI2w9C*6=RxA81s+*ti|D!(%%0pFJD8G0$EXoCbF7hBS;KZsc*E`)>9ni zsYj<6zvcg>JPG9g|0z!po3H?G8$n&-L58b?`v(bsezJp5WBO;FPdO)|&<>JY*sf|> zXzdL(93G9Wkm#aoTrC}0V|oKfE3BYzAkZe@eej_o(B}#5(B2{cdET-lV0MA|Xd3(| zpa8$9?Jy$+NP2JqMhiD5N#)cWd_o6ABTuiPO?k+Ov$b^Xg_A6~DAK^(d1Tz-y_Ydg zRx~HAWGE5|#~E};8CGSnK04#YJns3?&Px9^n^7ZsJ z#2)o&$0qa@cPvMc=5aW(NyMsxV_jQECLLJ0@OkR8F^7^NRaBY4=QgARagp2KZ?@wu z@c?@dvXb;TRVC$ZS+2d_BbwWO0oX1~K!oBN?o|mL8lI@8)%o_q(3ga=e2=rK^FZ$0 z$5U+3?bzjvZvEP}K-><>OSSC)Z#)Nwq+B5D`Vy>JrQXMtQ$pv2@8q}{S(Z@Ick0=s z@L@*?u%RNW7|#z9qQ~vO+~yw&P5F*t(`@nv=JGknlehz7WJsiHCm=)QVuoOP$!c7> zpyU@fZisS%ct1fSn|SebBlWE=@lH5)l4f7Yde`+-;uC3#l}(4*ynNbUxN)~uT3-*L zxYi32S)Tj*Z_a{B68~A8_%0klHD>t7~+A z5%yOO3AJ+JtZ?whJi4;F;@1azYm0MFp>dKW^5h}!gk{O-f3zWi;CuZy$?v0UDK(T) z4(i$7>bdS=$GbJ7751Uu35z7qesG`B-NDJL-&O6tT(-!8=UGIB>T>N) zoI8#3yZQD_TU05r=#F8t674+}bRZ+prlUv_-$yf{_E#Yz!W(!wc!PHgDkLlFCp|^% zeGn3^E3hbt8Se!t+B91&>7a4KO=7x=-q>f&!L+l%yu-8s(4x?m(5);rsp)9`dXKp} z>@UB3XKm9s!TIR~MYJO#vVwjFb?B$As{Kuu}K$<`3x1xllKOLYz9c+V25M? zTF(`yWI1M73bV-%Ec+xmZ+f)5da1Kt3b5Va;!#JC*oB&RLrGo_ZEpi95$nR_s^lO6 zicPm^AK~ZE?+8IYz5AIrdJ@@5<83|K}Xn7hc>kwl_;T+uW_=e9I1KRR1h7 zRI8inXPFuj6%*y*kLS41wPNEpYgVd8GdZKg#jC|pH`R0gb?5f)WxPq=2}9dDf-Otc z;$Y1=3yHA1q}g^SHv2RCLTA4d2XpVYiqHX_F1ntfjOlHO&zdOcM?tyk^lrDb_e7SD zc4v}zvV;(g;guIpg)oZy`}-GFPvhD?0bPb%l#^6;ZYy=S9R6vZz`k zj~b#)ctk6G!@Vo7X;hoiAfCgjp5sz-GsA0_B!A`r09pNc) zgF9U`OUp*4#P7V^bYpY;$9B+KvN!AT(vKBE%IT@a$tQh(pTuYJJ1=rZzI6@1 z8$4}b;FGo&ipQ%lgizGid?^*I8kHLuFk6sNx}u+#|HSHnl9c7pfFYLd+55kId*ll2 z=K1Z_sKda&+VS3&shl5FjQ`F}T3$ZZUloh{qhbMwmZuN0v)lgEb^F@yB%ID2)--r; z-UMjBC-n_uOkTpJiQvfnm1Ada---!83G_Yy7*{7t?=SfT2LVfC&9bw)TIdmg0S@+^ zqg{l3eAc+2K#wy|&e|hwpn* zFh!K4wb{|5@rzkWwn+hf0a4`RHIrXGQW%eRS0;PnWbO{GPxEgV!O>nV03MqBgA$ux zAC3b26#Oa5e7fG`$bb3l@MEPOeG5eTVR8-YbHxH}(Lph_p?ypV9Q$-EY$8$pdCRg9 z<&q_GZ?|H?jlZYS)QsV)@M>7m%OyAXk6*u{q)A=%E_Jo}Ee^)?LIwDFak^c0)tEnYwHM!inhT%Ec_ z1@ei_f{~+7uYa^fH6^!2F-iN(J#LA^`=&~0poi=Gmm~ zd1?+Sedowm9}jX&^nUBL2c!~YR8_5Obw_2x&U##H>3)M+7Wa8Oc*Mi0$36Ni3ch!Iot_3Ou0qHq((umT1^o#bz0vbGnIU#%x~vrZA~;qHeEh5 z(^Fb%Sy^9<&D9F7ayGCbCN9RumT5dLFyCfv1gI-JU~k=A^Q>mV)*y@eT{j=lxTs|= z9Bmg;e$C<`bR-e*`?9&Vm!a4&U~CX#j&M}%lk6F1PB0i&Syq3V(DrTH5Zc5$L$!pt z9uOsI=Dq+J5>#q20jK!DDMc|&^$SbYvV7v%^B@{y+9Iy5p0tv$(d zJ2tl8k?PFt%3oXb%CY&=#{uXd@JJ#devq$=OU?iCL|3ZN;>wK%+IxqJ2%D*A(>i(a zc9nKSdvtJ9bB9f-)3;sO{f<;jnhZ9!w)utm!tO!SCMX`aiGswGpQs6G6m_W4)(!ML z!s*?t%fdcE$>X`M+^h$CUop@BotE5+T$;Pz)N+T>?v(q6JIpC+)op`BJVom_I0nag z{bG{7Uso|Wo*f(lIm1KTr7Nyh*>9?%ZFL6}?P}~^NoxXY!1bo@uFkyf$F$S<_`$lm zp17yfWA>+bH{A19?06m4tsVb53Ug}&V;pH(~x!5HfM40WMTV7KjYcnDth3jj)@3%~U4IjH0S3x;YqT{lb`NiGVlBWohv_HVd?8m-ySB6ag z3hUc{Ed7wL>YJ&S@l;SgLJt%-_t>3suib^8Kg%>uuc-KncA8?`Q-bhuao{jz1%bYEYx)B0@mmc<6N z$0pbdsV5}8tZr+|yiJkMUk$%AP93v%SU{aMMw}otmm&*GnG(-G3+S;hiU8r|_o%p1 zFME0f=$_0#t;=^VB2NUMGhekO7&>mN6-pm@+soy&_v;wV-)L*$Gk4j)lKhhh1`jfQ z;w_O4%j7hOZCrF8*)B^@?jkC?7HFtJ@*cR^>8JOtn&etBIafK_SVvtSBa7viFG(!f z489+A8hxjBS_O!@px%YGErnruhmh2mLxXjx%ohG(*+!<}xDn%7&Q zi=yQ224G0bfpyJvnzKd2(>VrlcRL{rq@PHO+WCdt?t=gy6FodUyg1<+kav}=5rwN~ z)YizBP%*KEJLToxdUm|_pT9>7JnYKP_2I02^3-Vy4D^}WH>_~vZC+sD59w>NgjCVf zQ+_z>rE+D#iT$|vB~C;xT}xLRfKN0$T~+kB;Q}P8h_yIFbX-RB=3#1qDE3B02oJ2N z_pM_K+xk@vZ{GCWp6mLOQR=o9Uay?K@cWXI-#M4ZwafCbNV&qay7C`N$5wvtN@W&< zVmsxQ^CbdO!Hsb9g;#x^FZ6#3dpr`6$4`ZV9v}y$`855Iu3F*0L`zKbwd+J%@D_H* z(}E@c4#+R=uKpyNGz~(+)@c`KluS{*hT0gScMm)ylis-AK5L)$vRf5`wHZx}X8}ac z^-TWrXQN_t)amai(2)oM=D#m;3cSMb8T+!A7Pai6JCV1?gYcR^DB<0oj*i6w+^Uo= zu&aj$$D25&`Oo>x2UoVF?gu9(b!tWOzH@@v`Eu|(<<^vCe%6WET`Vh|^n(e8=1XO1 zP;?GJ2Ho%?h1Yo8up^BE`C%7#Wi0L#!F+Xnuc%<;!uQXq6g`&teh}E2^C+ARN=#@L zeLw`bU4aZ;x82rbp|Y*9OSY)@a?tgh55Y{jgyK1x*gknntOE&?(C{w_Vx*t8my7O8tR@=aBL;uO5tEGG+{oIpu^IhXZ?M3h zeTz+mAmA=2bCd_9zLva5Q8_?dZLeZenW*&$iwTLe;9BTFp?@g?gf&oiZ|}z83jqc4 z5s|+F*dyE9OO6LM<+|w=igg88ZhAEuZ%IEVwrz!fF*=T| z!^?rwohHlWr(ka_0ToUXAW1YRQbHb&aJ>6f@_BAssn$HAH#TXYe-3`Kv4%|ZN3p82 z^^n@%c1Zl#lRpmD>Vq@cUiN$`v3)%9Ck>)$u1V7ZQgoS7*EptA_*7POvK zGCsg0tSo}RpD~do2#ta$AcmhNAykk}y6VtyMEwypK^Vjf+S%V2CxrT$GEPm$TO=$t z;ivNyV1is4+87KsZy-0^2;5??E5(hM&d$bwjQ3im;C&NnmIeA>=1hRd`K3w9te?_U{zT57my^QVMrzqB) zz9o)A(^%NL)0}ddF-`Y(q7#dh@*mg|YwJ&Pi&^R6IktkU6b}9Sq1LtNZZG0T^fz*{5Rmq`DQ&elKR)6)x$ISr$E={U0NGJUP zOsJXS{&hImUK=q?{5>lz&EI5&CQ(DYz1X>o@NlgNCGBxb_vbNSD_ePC#=Ct2Auh}V zIB1k>47#Wx5n{9WPqo#-={7NUe|jM#6w+i~w0Q)6GzV!A`0;1c-Q3GgDB0||>*C$6 z6Rj$A#Pi`0hw2YfCLefkNGowNFWz8P=mm;}f&7!{8wSS}rDXO>GXd;_?p$#|>k|^X z5ACMJt{(@5LO5LhlEU;OV_JqrwSC2d3io`(<*{n*EB1u#gdV6#2PJYomYv0}d+K{wJnua5hjlRy9*UXO5!J-z z77}8MIa=pP1(NeswFdaa{%e^VGRV?U|&6XWc-UwH#aM60=s_k3drNU%8i$5P& z`l7r_mZ+3uNyW441bz9z4wDyxz(Rwp_$iR@g+EmWbf;ZOP)|%T8L@h8^&Vj?L$Y=H zqS7V9w7qt#Tjqu5E%Nt{A;Zq3Om@TUg!iG3qXNLuF|kJ)sEmXtj&%i23VMUVdYmEH)KhfEkl!JAArHH@24>%k7{@o7x&52Fq7Bpk>dEJ+4fTb@_~$Tu6vn(I=RBQo3KbD zB34{To~PozG1|^b->e-BV8cmwPLO+wBMSP1hP<>e4va8t-&8!Fd7c>x1*}1`@y{D* z9k(Ld;|6?5be=cY?7B()z(NPp5L4_)VRXAT-qRE<=$T-y_1;wmR8c=na`PvRdNFQqq91Jd(CsHw61zC%H~x_r+Uc3u;r05;DxrTZ#%ad% zWy@lVcW9Tl1S>;`Cpj(T;gq0=3mY~|iJ@n1lxKW3#4O$`%yAwvy!-yhKy^x-s@}3%ERbnn7TUoZHU#q*^$Kka$D(e_?tuDyNc)!w%~ z@$cH6e+fyI#un>y2- zcf`CH9QNN|zg1z;+_|zn#~%xyUd*snAT>$DQ?_l=l|&%*exVEx+tz<^H@|JZ)wO-* zw>!(N`V#-y{9N&Acd2asyeq5U8?iMrx-Gu=aewKG)puRD#$UI)6!%%_z3a_gHT&<+ zeY@}Vp9eZ#(tQWh5*PZs*2;}_DT<8yKI^LA#XODGvbW1JV-v1z+xFG2Ur|r;mR9b~ zEKloYT6;?GfAr6d5|@jgR`V`-f9CmI`|#ZTFaE{szP{ee!D8#`(oeLeU6#ie{HEXziraXv6S0)bK<3}le286Y+b)4(skX} zkV;*rjF|6tx7;*vP2=DBX7!6VtJXxiN3G;fot=I-bS%tSV8&+Hch`L7;ebh2JgP7%dH1h6zLLkk4dyS( zkW_LPnAxVcG;^N1_>FfjbQml69oByK=06bsk#(E# zQ^AJY+?vZ%{pQ#GeRuHSGlLRY-{XdGvr%oLAusv&`=y%4Pn~Kl-aGH7!9E|Cdj@Rv z49{NvKmFnKy?e)&cdy@Y^GEszuMVX-!V|wwKJ8i{HsQyj?FRh$!6GS+ZbSqK3DS;q~5wiMOH{zL%HpKf$dRX)tA} zYkcR8<4=^*v<|J?t<$z?$=I?TfDreVU$%&;kfdot`-5`Mz6kOxiB3^Kgh+UnObf4or5J zzXo`{5sYV>W3yRxyLaCFKe5xzHfOzBqt_nvVbSZk_Rky*I_oFje#Uxi+uF6h*YCfb zqt|Y9vNUJL_SmV`+G}@e2fNPBGZvd_BW)<)Rbn}%VQ=@c1H10jmY1Db7CZg?l*+s1 zf6lyoeMtG9+W9k@yJWl+Y(=&`)w`{>y)gFqr{eUIoxjzVN_YjeFH|W-rEYz(eQLe< z;)~@MTv@gV?P7?(C3I@Nv-pAo!3_2-dQBZ*p!1KFBcZMTN_6QjVBNvs>FVdQ&MBb@ E0LjA%$^ZZW literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_fat_util_8h.html b/libs/SdFat-master/html/_sd_fat_util_8h.html new file mode 100755 index 0000000..0019295 --- /dev/null +++ b/libs/SdFat-master/html/_sd_fat_util_8h.html @@ -0,0 +1,132 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/SdFatUtil.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdFatUtil.h File Reference
+
+
+ +

Useful utility functions. +More...

+
#include <SdFat.h>
+
+Include dependency graph for SdFatUtil.h:
+
+
+ + +
+
+ + + + + +

+Macros

#define PgmPrint(x)   SerialPrint_P(PSTR(x))
 
#define PgmPrintln(x)   SerialPrintln_P(PSTR(x))
 
+ + + + + + + + + + + +

+Functions

int SdFatUtil::FreeRam ()
 
void SdFatUtil::print_P (Print *pr, PGM_P str)
 
void SdFatUtil::println_P (Print *pr, PGM_P str)
 
void SdFatUtil::SerialPrint_P (PGM_P str)
 
void SdFatUtil::SerialPrintln_P (PGM_P str)
 
+

Detailed Description

+

Useful utility functions.

+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define PgmPrint( x)   SerialPrint_P(PSTR(x))
+
+

Store and print a string in flash memory.

+ +
+
+ +
+
+ + + + + + + + +
#define PgmPrintln( x)   SerialPrintln_P(PSTR(x))
+
+

Store and print a string in flash memory followed by a CR/LF.

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_fat_util_8h__incl.png b/libs/SdFat-master/html/_sd_fat_util_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..2cddf1f6aef43321abf53237810ab2158976e44c GIT binary patch literal 70898 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 XP`Q(H2>i&r{*#Q9f@Gn%!KeQVi_JOx literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_file_8h.html b/libs/SdFat-master/html/_sd_file_8h.html new file mode 100755 index 0000000..1a95e0c --- /dev/null +++ b/libs/SdFat-master/html/_sd_file_8h.html @@ -0,0 +1,128 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/SdFile.h File Reference + + + + + + + +
+ +
+
SdFile.h File Reference
+
+
+ +

SdFile class. +More...

+
#include <limits.h>
+#include <SdBaseFile.h>
+
+Include dependency graph for SdFile.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

class  File
 Arduino SD.h style File API. More...
 
class  SdFile
 SdBaseFile with Arduino Stream. More...
 
+ + + + + +

+Macros

#define FILE_READ   O_READ
 
#define FILE_WRITE   (O_RDWR | O_CREAT | O_AT_END)
 
+

Detailed Description

+

SdFile class.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define FILE_READ   O_READ
+
+

Arduino SD.h style flag for open for read.

+ +
+
+ +
+
+ + + + +
#define FILE_WRITE   (O_RDWR | O_CREAT | O_AT_END)
+
+

Arduino SD.h style flag for open at EOF for read/write with create.

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_file_8h__dep__incl.png b/libs/SdFat-master/html/_sd_file_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..a8e863f97294937e400492c6dceb289055f1dad7 GIT binary patch literal 6144 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 VnD*F4GIgX6=xQ0jF`9_D{{iK5nzaA` literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_file_8h__incl.png b/libs/SdFat-master/html/_sd_file_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..410d1a6fd2da655e0f0400a2d6178f8742ed55e3 GIT binary patch literal 31637 zcma&O1yoeg_cnZomL9snQ9@Eex`aVdS{VT;B?KfTq+twT00of}X+&Zu8Khf8N=eC) z2I-KHhWFtA_j}j(t@Xa&`e3;RxHIS6d-gtiKl^$1FVUk zEBzg{YSQ%f!NjXpt5}_djN=9Hb406Ex^(IbjDUe~D0x_Sk|e4BMt$WHM_k*4&n(q1 z@5w+YS_B!Vew;(7|9iE5Z$fqkb4k062Z87mOjv@D;ES)61%W_hJ^yBPJ~ugAWmjU z+t~2b91fB!Kl3aX@AXLg?kN7tY$>2V9D}3s4;65oYhm_LRwO}WnYCD9LY*@%=AVXI z&A75ZW^w#w0*@f}7>;ny~nC$_AM;&Ax95Or)H`ta`^ zN-4vky^8(xyM61bDtmhyG3zR$f9W{Cv8`K=?56CU?CD2;Y@BS{@W@M9;$q@ObV`F~ zLDHQd^jeikW3j$cfx$9APwyBAQ=(W}&w@TZJ@W6S4=h9?LteGg?mB*&PFFjm)7iaU zgY@$!k!2DW zRUJ9!Jjtsx(lFT=$w&O|e5=zoyojvTW-H8=T20AjHzE`x5d7rbD|aUU`xuM>qcNp{ zh1MYB1Sy_xw4gV7PH-EEjPv8*`%w30U8s)ca#BI>Ug9$)QzY_tDN9yL+>%gTE_oz3 z7!ufS>kgm4rR zZ5{)UqprhwPEVm$uB`bC`XM?s{?891917epFXR8_mH#gO`D#zBhO99xZ}+6W8_*!G zzxHxrP1{i+0Yx4|_tnaDU`$t|eXl%Hq`=0^aivIwpvG#+Nys$+apV#u64~)U+)&oyDrXY|zF{gCD{tZT zQyX#|7)`K^Z?rNwZ5;i3;4i0JC7$XGhZ{WJ*Cyq;ovWWW4XL^^_eGjl9&~tC4)^`( zPw4D)Si@Gi?<~IHa(1VY9a9e(Gx7#@H|6YZMbqM4J$|{C#+(bmCUrn_WP-?Ngt6(_4@b5OM!EL7O_Dz>! z*|isL#myRu5&xT#1WajC{lBMt38suy%RD$Dd@I>v{YTd91~N`*L=q{NYv=R5hEYyh zk;!$~jrGAv==nqa{scTWwidk6FSH8^i1_z6H{koXi)sF6En== z|4zquzE9K|sQ&X_Iq=@X#FGEM_x#rU4ix^g8hl_}-2I0CjBD__)DDBYmr41bC4U6= zPT}BC#eDx47Ou#)X$eG@_RLjQ+m92|r3&Q#U0{hYu-;zeUjJD$i5IQ3wy9q@|NDU{ z@PT+W?*II{W8Fh*OGO>M`_Fz$tyUNuNmv`nm-Deb=>}kVn?x^mE5qBll)1Z28XJ~G z9srA%-zTEr;II4Y`OV1&@3oDZ_iIZ2T@z_Zj2;_1NRMiryNB{spt}%^cS9nwQodSY zBntbu$(={Z7X?&npz7>wo9{Xb-YzDWo=XoGz3;Hdd?s~2vp0be!rs1(&GCBbaw3{B z4Be+}ryee1Bb2(KlY1G_c@22vE8N--QkVcC5{k=P&MGbz31*H_(%7jLen~R07{1?4 zI45atZhBgbjfCQMloM^QT{ESYN_~S7UP~!;l9HMd@&RoBC3b;ulkowyku0@+ z6b&XVd-=dnJb$lxh1WbSEa^86qz6&pc?Jk~sSJ%k*Si`q7zW=oGe+`JM<@Sji<~Xn z0{y(xvP}IST50@7;hJ#h?B>QaV}57fjW6J{vfZp%uaXpfEpFWm+aQDpMQMyQ42i~- z({)W78xCAqUnQ15c3k-z-umgr;8tW_@SEDF35jjr>UM|TcE1V%`;8Dd$twrfJ-rs5 z5ZYdaBjPRYo^1uz3-N@0X%s7y2>GApTJrLR`AO{{&gy}v`3*BA0GSgWj}aPbxP4rS zl52WWJQ>&FH2NL9&ed2`(>BMW1<^tLNs$>^$f!;?MPQjWV3`}JXpJ)^bpzDrNMn8w zdt$m;js{q~QrtdZyxt0q!2(w0?r4-QOdAtUgCNYdKxuGewF19)lbO-0e0p}cB@(t@ zfJs}H{jtG{N$_y0b;-gW!<(4@l!pJrXnZh7vCB-1xbU#S4Ro!5r@fq<^b%0MLzYjV zkE-tWD#$6Ly`3^E)o5hFrNHop-QT6JAvQc9D7Yi@#&fWadCm87Xg|KP?VwauKpA9V z$I+hmnHuJ6bZFjpCq()gy&4>SdUCrbb`o~Kzjm(SF3Jw_`Ss7~n$s?J(kkWT(yCQr zcByHTmt`L^sa^WH&G9WK!gwPui(NI`cA90N8a&g5$cwjYZ^bSb82<5vX#4yXdnzq2 znOJ*R>J*Usx{(6p4F7OET{Hn9n;t$$<5x>7| zq!M{4Y9D!jj5bEJXPY`r&f|B1g99WBHEpxZDBjA6j}N5&aFhGhYxZE8o|UVd{Nty@ zQ)M~ov+nzf-_>kOe_O7NoF2&28(2(VWrf4xj8aVML;;@0$fIM`)Tnp%InQ(3)81Ad4EG=Z9g5+!&zG%N-XOIZ{H(HzJxgWrTnuo?6D+w zsMS*?vA{D<*E~5j^&fIfGl$J#-e@J@lylYQ-QN zf9BPH+Zg%N^BQX)b~m%XV}aeABhq>0wztBEn|kAc3*Fum8|xFFl%Ca+_NRtn$VnqJ zkDpMXm4L@AuG>o;nz8MjaiD8q`^u+6F$N!$B_Dzj`Iwl8hcNrcX_bM4-KnmXAH{oa z8X9V!#bK5!oD0rm;*Ugx@ZNi!o$7xb9sL)Ry1Tth?^JIz9G{lj&d(p|Ve{UdCK(q7 zntJc~*|kMg{z_GtoFK9fwwrb#+_bORqBVFpZDJW7def@n`B1V_T`;TgYCw8%kBti_|BLT&f8qUyjp;rB-ycn${`DAPPwu1 zsKIL`K|ZOQo=hrW0=MG}?NzzRil}E-C{=2guZlzd;foKW297s8KhulRR@pz-+ z`@>-H18g7WtAkARw^*IfwCP|^YQK&=h;F6rqvg{*w(#=yUSh@i<&fnNZc$H-&-?lr zIj+nEzw2ZqGm~n@WjR81D>e9N5|?#dBU9_P?gHT}f0U?rp#6rqn&HOe;)+9Syhj&$ z>k`Tbih-1-`!1veHLI7k^lbd4eA3Ux$}h4 z*Y`z&WzaZx(<8X=*mm7~YU)Rt@^bUCL2YS(t^tl#-U;4DBi#^a2~{ql&D!N-`^bdp-;yn-mxaLW?> z25p53CYU5t{(AC0J#5-S3DK!69GdrF^zZQt*oqk{g_>s!AM0i+9sDq;%3WK`E9JMN z_IzGZ5uTqZHXa(PTK^l1^JwViNO#5$DD}MO&Eh8

MhYMHejNj0=xSU$eV9$#A^I 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 + + + + + +SdFat: Arduino/libraries/SdFat/SdSpi.h File Reference + + + + + + +

+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdSpi.h File Reference
+
+
+ +

SdSpi class for V2 SD/SDHC cards. +More...

+
#include <Arduino.h>
+#include <SdFatConfig.h>
+
+Include dependency graph for SdSpi.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + +

+Classes

class  SdSpi
 SPI class for access to SD and SDHC flash memory cards. More...
 
+ + + +

+Macros

#define USE_AVR_NATIVE_SPI_INLINE   1
 
+ + + +

+Variables

uint8_t const SD_CHIP_SELECT_PIN = SS
 
+

Detailed Description

+

SdSpi class for V2 SD/SDHC cards.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define USE_AVR_NATIVE_SPI_INLINE   1
+
+

inline avr native functions if nonzero.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
uint8_t const SD_CHIP_SELECT_PIN = SS
+
+

The default chip select pin for the SD card is SS.

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_sd_spi_8h__dep__incl.png b/libs/SdFat-master/html/_sd_spi_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..384d60005e367638f420bd5e03d2ba416bac595f GIT binary patch literal 44233 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 + + + + + +SdFat: Arduino/libraries/SdFat/SdStream.h File Reference + + + + + + + +
+ +
+
SdStream.h File Reference
+
+
+ +

fstream, ifstream, and ofstream classes +More...

+
#include <SdBaseFile.h>
+#include <iostream.h>
+
+Include dependency graph for SdStream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + + + + + + + +

+Classes

class  fstream
 SD file input/output stream. More...
 
class  ifstream
 SD file input stream. More...
 
class  ofstream
 SD card output stream. More...
 
class  SdStreamBase
 Base class for SD streams. More...
 
+

Detailed Description

+

fstream, ifstream, and ofstream classes

+
+ + + + diff --git a/libs/SdFat-master/html/_sd_stream_8h__dep__incl.png b/libs/SdFat-master/html/_sd_stream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..921e0e50e4aaff6163b007e5d8b9e9048367d71f GIT binary patch literal 6191 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_stream_8h__incl.png b/libs/SdFat-master/html/_sd_stream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..b396434cd37cb5d2136dca23782484a54c8041c4 GIT binary patch literal 40473 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 lWX8FJ9L~ PL*TlsZ-OT4IXwOk?RU^1 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_volume_8h.html b/libs/SdFat-master/html/_sd_volume_8h.html new file mode 100755 index 0000000..dcfe783 --- /dev/null +++ b/libs/SdFat-master/html/_sd_volume_8h.html @@ -0,0 +1,94 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/SdVolume.h File Reference + + + + + + +

+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
SdVolume.h File Reference
+
+
+ +

SdVolume class. +More...

+
#include <SdFatConfig.h>
+#include <Sd2Card.h>
+#include <utility/FatStructs.h>
+
+Include dependency graph for SdVolume.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

union  cache_t
 Cache for an SD data block. More...
 
class  SdVolume
 Access FAT16 and FAT32 volumes on SD and SDHC cards. More...
 
+

Detailed Description

+

SdVolume class.

+
+ + + + diff --git a/libs/SdFat-master/html/_sd_volume_8h__dep__incl.png b/libs/SdFat-master/html/_sd_volume_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..0a577beef457fd3afceb5f02ea09b674a97aca21 GIT binary patch literal 41657 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_sd_volume_8h__incl.png b/libs/SdFat-master/html/_sd_volume_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..543574c11550343477cee844f03c89425cb53f5c GIT binary patch literal 17184 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_stdio_stream_8h.html b/libs/SdFat-master/html/_stdio_stream_8h.html new file mode 100755 index 0000000..a1201eb --- /dev/null +++ b/libs/SdFat-master/html/_stdio_stream_8h.html @@ -0,0 +1,208 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/StdioStream.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
StdioStream.h File Reference
+
+
+ +

StdioStream class. +More...

+
#include <limits.h>
+#include <Arduino.h>
+#include <SdFat.h>
+#include <SdBaseFile.h>
+#include <stdio.h>
+
+Include dependency graph for StdioStream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + +

+Classes

class  StdioStream
 StdioStream implements a minimal stdio stream. More...
 
+ + + + + + + + + + + +

+Macros

#define EOF   (-1)
 
#define NULL   0
 
#define SEEK_CUR   1
 
#define SEEK_END   2
 
#define SEEK_SET   0
 
+ + + + + +

+Variables

const uint8_t STREAM_BUF_SIZE = 64
 
const uint8_t UNGETC_BUF_SIZE = 2
 
+

Detailed Description

+

StdioStream class.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define EOF   (-1)
+
+

End-of-file return value.

+ +
+
+ +
+
+ + + + +
#define NULL   0
+
+

Null pointer

+ +
+
+ +
+
+ + + + +
#define SEEK_CUR   1
+
+

Seek relative to current position.

+ +
+
+ +
+
+ + + + +
#define SEEK_END   2
+
+

Seek relative to end-of-file.

+ +
+
+ +
+
+ + + + +
#define SEEK_SET   0
+
+

Seek relative to start-of-file.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const uint8_t STREAM_BUF_SIZE = 64
+
+

Total size of stream buffer. The entire buffer is used for output. During input UNGETC_BUF_SIZE of this space is reserved for ungetc.

+ +
+
+ +
+
+ + + + +
const uint8_t UNGETC_BUF_SIZE = 2
+
+

Amount of buffer allocated for ungetc during input.

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/_stdio_stream_8h__dep__incl.png b/libs/SdFat-master/html/_stdio_stream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..ff83845bdd5af6a090c7465a55713a694109939b GIT binary patch literal 3890 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 G(|-Xc`Dk4L literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/_stdio_stream_8h__incl.png b/libs/SdFat-master/html/_stdio_stream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..183820d67ed91758f12ec5fd618bdb5c2d34f17b GIT binary patch literal 70453 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/annotated.html b/libs/SdFat-master/html/annotated.html new file mode 100755 index 0000000..3d31fab --- /dev/null +++ b/libs/SdFat-master/html/annotated.html @@ -0,0 +1,89 @@ + + + + + + +SdFat: Class List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CArduinoInStreamInput stream for Arduino Stream objects
 CArduinoOutStreamOutput stream for Arduino Print objects
 Ccache_tCache for an SD data block
 CFatPos_tInternal type for istream do not use in user apps
 CFileArduino SD.h style File API
 CfstreamSD file input/output stream
 CibufstreamParse a char string
 CifstreamSD file input stream
 CiosError and state information for all streams
 Cios_baseBase class for all streams
 CiostreamInput/Output stream
 CistreamInput Stream
 CMinimumSerialMini serial class for the SdFat library
 CobufstreamFormat a char string
 CofstreamSD card output stream
 CostreamOutput Stream
 CpgmType for string in flash
 CSd2CardRaw access to SD and SDHC flash memory cards
 CSdBaseFileBase class for SdFile with Print and C++ streams
 CSdFatIntegration class for the SdFat library
 CSdFileSdBaseFile with Arduino Stream
 CSdSpiSPI class for access to SD and SDHC flash memory cards
 CSdStreamBaseBase class for SD streams
 CSdVolumeAccess FAT16 and FAT32 volumes on SD and SDHC cards
 CsetfillType for setfill manipulator
 CsetprecisionType for setprecision manipulator
 CsetwType for setw manipulator
 CStdioStreamStdioStream implements a minimal stdio stream
+
+
+ + + + diff --git a/libs/SdFat-master/html/bc_s.png b/libs/SdFat-master/html/bc_s.png new file mode 100755 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/bdwn.png b/libs/SdFat-master/html/bdwn.png new file mode 100755 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +SdFat: Arduino/libraries/SdFat/bufstream.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
bufstream.h File Reference
+
+
+ +

ibufstream and obufstream classes +More...

+
#include <iostream.h>
+
+Include dependency graph for bufstream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

class  ibufstream
 parse a char string More...
 
class  obufstream
 format a char string More...
 
+

Detailed Description

+

ibufstream and obufstream classes

+
+ + + + diff --git a/libs/SdFat-master/html/bufstream_8h__dep__incl.png b/libs/SdFat-master/html/bufstream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..d704fe264474849595680d88ed7a0b98b0d73f1f GIT binary patch literal 7573 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/bufstream_8h__incl.png b/libs/SdFat-master/html/bufstream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..76258a4903a81aa8278dd2a65430da7dea67eacf GIT binary patch literal 37650 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_arduino_in_stream-members.html b/libs/SdFat-master/html/class_arduino_in_stream-members.html new file mode 100755 index 0000000..4cde3c6 --- /dev/null +++ b/libs/SdFat-master/html/class_arduino_in_stream-members.html @@ -0,0 +1,155 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ArduinoInStream Member List
+
+
+ +

This is the complete list of members for ArduinoInStream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ArduinoInStream(Stream &hws, char *buf, size_t size)ArduinoInStreaminline
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getline(char *str, streamsize count, char delim= '\n')istream
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ibufstream()ibufstreaminline
ibufstream(const char *str)ibufstreaminlineexplicit
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
init(const char *str)ibufstreaminline
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
outios_basestatic
peek()istream
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
rdstate() const iosinline
readline()ArduinoInStreaminline
rightios_basestatic
seekdir enum nameios_base
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
seekoff(off_type off, seekdir way)ArduinoInStreaminlineprotected
seekpos(pos_type pos)ArduinoInStreaminlineprotected
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
tellg()istreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/class_arduino_in_stream.html b/libs/SdFat-master/html/class_arduino_in_stream.html new file mode 100755 index 0000000..406ad2f --- /dev/null +++ b/libs/SdFat-master/html/class_arduino_in_stream.html @@ -0,0 +1,2664 @@ + + + + + + +SdFat: ArduinoInStream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Input stream for Arduino Stream objects. + More...

+ +

#include <ArduinoStream.h>

+
+Inheritance diagram for ArduinoInStream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ArduinoInStream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ArduinoInStream (Stream &hws, char *buf, size_t size)
 
bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
istreamignore (streamsize n=1, int delim=-1)
 
void init (const char *str)
 
 operator const void * () const
 
bool operator! () const
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
void readline ()
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + + + + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
bool seekoff (off_type off, seekdir way)
 
bool seekpos (pos_type pos)
 
+

Detailed Description

+

Input stream for Arduino Stream objects.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ArduinoInStream::ArduinoInStream (Stream & hws,
char * buf,
size_t size 
)
+
+inline
+
+

Constructor

Parameters
+ + + + +
[in]hwshardware stream
[in]bufbuffer for input line
[in]sizesize of input buffer
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inlineinherited
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::get ()
+
+inherited
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream & istream::get (char & c)
+
+inherited
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+inherited
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ibufstream::init (const char * str)
+
+inlineinherited
+
+

Initialize an ibufstream

Parameters
+ + +
[in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inlineinherited
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inlineinherited
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inlineinherited
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inlineinherited
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inlineinherited
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inlineinherited
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inlineinherited
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::peek ()
+
+inherited
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ArduinoInStream::readline ()
+
+inline
+
+

read a line.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArduinoInStream::seekoff (off_type off,
seekdir way 
)
+
+inlineprotected
+
+

Internal - do not use.

Parameters
+ + + +
[in]off
[in]way
+
+
+
Returns
true/false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArduinoInStream::seekpos (pos_type pos)
+
+inlineprotected
+
+

Internal - do not use.

Parameters
+ + +
[in]pos
+
+
+
Returns
true/false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void istream::skipWhite ()
+
+inherited
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/class_arduino_in_stream__coll__graph.png b/libs/SdFat-master/html/class_arduino_in_stream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..4df6fab93c592555037e9d1612bd039259531248 GIT binary patch literal 3427 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_arduino_in_stream__inherit__graph.png b/libs/SdFat-master/html/class_arduino_in_stream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..4df6fab93c592555037e9d1612bd039259531248 GIT binary patch literal 3427 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_arduino_out_stream-members.html b/libs/SdFat-master/html/class_arduino_out_stream-members.html new file mode 100755 index 0000000..607de1d --- /dev/null +++ b/libs/SdFat-master/html/class_arduino_out_stream-members.html @@ -0,0 +1,144 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ArduinoOutStream Member List
+
+
+ +

This is the complete list of members for ArduinoOutStream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ArduinoOutStream(Print &pr)ArduinoOutStreaminlineexplicit
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
put(char ch)ostreaminline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
tellp()ostreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/class_arduino_out_stream.html b/libs/SdFat-master/html/class_arduino_out_stream.html new file mode 100755 index 0000000..4a4f994 --- /dev/null +++ b/libs/SdFat-master/html/class_arduino_out_stream.html @@ -0,0 +1,2312 @@ + + + + + + +SdFat: ArduinoOutStream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Output stream for Arduino Print objects. + More...

+ +

#include <ArduinoStream.h>

+
+Inheritance diagram for ArduinoOutStream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ArduinoOutStream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ArduinoOutStream (Print &pr)
 
bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
bool good () const
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Output stream for Arduino Print objects.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArduinoOutStream::ArduinoOutStream (Print & pr)
+
+inlineexplicit
+
+

constructor

+
Parameters
+ + +
[in]prPrint object for this ArduinoOutStream.
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inlineinherited
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inlineinherited
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inlineinherited
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inlineinherited
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inlineinherited
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inlineinherited
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inlineinherited
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inlineinherited
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inlineinherited
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inlineinherited
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inlineinherited
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inlineinherited
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inlineinherited
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inlineinherited
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/class_arduino_out_stream__coll__graph.png b/libs/SdFat-master/html/class_arduino_out_stream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..97a213ba291284ff8f4e04060ecb7142c6db22c3 GIT binary patch literal 2738 zcmchZc{JNu8^?dNmJ(}~QcHPhiL?||rLk0Ec@2gp2*RY()RZC}w5TObTWf7qoKD9w zEux{Z1Sug^QMJ{+RBWj|B^A_~;!S7HdC&XD{QJ&x|9I~Gp68F}-1B+9_a^@6WGf-2 zBnAM0guNZim7kLVKtM=Tn7E_b!)WXV!a4Cs~ey*)dcyHtMMkjC;w2!8{ck$CX$*3j=Yqe zZV^&f9~>{R%Q7hxL9nEQWJC&8lkDL4mF~GBPESUdggds*JY6-UQFwI2^#l7C*A`|b z{QUNLbjr*gknlagFy*O(5WweGZ);SPD9a4kXOr;7rDm!o0xS#=8|rPV2m!)nn*zvU zI2HMypxVjgWNm>kv?Z$^087O^>^d%Q@Uur-*&~eNR$|`zQG4I4a}aX5#E_dJ<8taY zE>}zM-Tb7M>CKkAxnCjGD51xor;E@>eaaA{@@?0ToeA{5hihEu}sCH%W5>}S=k>&i=GXxbC?7%x7Iu?0<|Ds6uX&rMTOC9 z2})#0KRpMz)>@IyZ}z(R@2p8FR`rrbTdYOPt^+E#_XwH?CkKajSGDh4mtO4OJz!{2YqsMtiN8<}*0qqM;sEJwrLF2ki@Ew! z`T7tUjmRGk2i!kcsf*d0^1Y4DbUvPaZ*){`S-4pN(Wlh)IsOmT5YH!meAQ-V*j*q| z(#%mNYVQl}4edS3B@g2v+^laRxmf(huJrkkzoW$p>C}`y1c+?RQnbt$D3tLkBz-z^ z8Xl2=5s;4ibO9FH>7@Yc1!mbnTX*l&m2_SJi37-sFTpx1Auu8t(jWTFmP^IY(vn_zL*>ROf@$PU2rJjga|BlBajJn}}S@}O5 zNVz#Ky=j(0Z_noD(Wz}}S)Oos41xrn(%F*6TL^5omqb}K>&$=r^0Qaf}5NXLJIM4jWLMpAG`>8awUsQnJxM_PJ_i4 zg_md6lo@|k&MqlrC16mmaK}5!v#kU^QanUWKmtE`l$n6;G17&~--9arP&wxZamSTP zLOiBLpt^@^B<$q={$40xwBODp{FFjpdRwS6)VA#5~{YQvqQTZ`q+>FTJ(J3l4lenBs;+;7;A&1i(103wTD6J7!Qrz zXh@Q1#XhxwxXCdyTzaip&WDl|DNEf-6uzf?8Nvi zO6@E|aM4A^UXdUipdCq}_*p<-CPg866$z{gl5yq!vBDci2`8f_Q5kt99lp8o#o+Ri z>HW6fc|e40liu^C^Gds8?QS-c0aSN+{+z~$owMS^t5^La3`XtF6RiQ&P;`rk+P67Y z9yI?jet;aH7=Eb9jGWB<5Dz>V$Y$rfSRT~aF#X*Od7# z^cQ@5OG5E2N)M*$s=~Nz4ZiE~T%jD&X|x$U+;EB0I%e-*`ZcP4JU{2^dN2SFCZ5TB zfE^B`dSzFiHK;w4TeSso8&lC-vg#UhddZM+pU>0kw2_i+%(We^a7k3h9!E-ur$fDG zM~%TZKE6yLNm|2ITdHgQkI5B`Lmh^Hq)g~P85-~yODT7cz)JECaQ#MvZgO=X!F6W=pqRK4jXGvvxIW%RTcPh7j%;i{Sb)gncCWoh%&7y? z8Ar)Ws}hW=L{){1XFx%c2yKEQ;_W_rG;Yq=bpV2O7{d!Dzx19V8RzYGX1d>@JZ{o6HERw^+t`i z$$9pJ{cNtTJDJ6-2~ZG#*eslmA&xgU3reb(8YR}ZSu33NZh96>ufv-6p#G97;C>eBhs6TbaxnteW6bjM-y_Vw`o zO@?+F)KQ)Bf7L+H03@S{dj9tlhbnx6nm71Os^)` zviGA+MH18+wi`ILirB_NTq>gtW51MLio1NF43j^Ea#m97CW^69{XRzq;V#aPs*NAV zsVLZ(zWux`J!WREK?`B$S$fAfAiG-%)1S;LOMzV&l|P5NoFPouwAW#2Ci k5|$T-Vj_iL-vha6(c+;V4dCRl{7)!g4|jr*FaJdN4+0+{9smFU literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_arduino_out_stream__inherit__graph.png b/libs/SdFat-master/html/class_arduino_out_stream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..97a213ba291284ff8f4e04060ecb7142c6db22c3 GIT binary patch literal 2738 zcmchZc{JNu8^?dNmJ(}~QcHPhiL?||rLk0Ec@2gp2*RY()RZC}w5TObTWf7qoKD9w zEux{Z1Sug^QMJ{+RBWj|B^A_~;!S7HdC&XD{QJ&x|9I~Gp68F}-1B+9_a^@6WGf-2 zBnAM0guNZim7kLVKtM=Tn7E_b!)WXV!a4Cs~ey*)dcyHtMMkjC;w2!8{ck$CX$*3j=Yqe zZV^&f9~>{R%Q7hxL9nEQWJC&8lkDL4mF~GBPESUdggds*JY6-UQFwI2^#l7C*A`|b z{QUNLbjr*gknlagFy*O(5WweGZ);SPD9a4kXOr;7rDm!o0xS#=8|rPV2m!)nn*zvU zI2HMypxVjgWNm>kv?Z$^087O^>^d%Q@Uur-*&~eNR$|`zQG4I4a}aX5#E_dJ<8taY zE>}zM-Tb7M>CKkAxnCjGD51xor;E@>eaaA{@@?0ToeA{5hihEu}sCH%W5>}S=k>&i=GXxbC?7%x7Iu?0<|Ds6uX&rMTOC9 z2})#0KRpMz)>@IyZ}z(R@2p8FR`rrbTdYOPt^+E#_XwH?CkKajSGDh4mtO4OJz!{2YqsMtiN8<}*0qqM;sEJwrLF2ki@Ew! z`T7tUjmRGk2i!kcsf*d0^1Y4DbUvPaZ*){`S-4pN(Wlh)IsOmT5YH!meAQ-V*j*q| z(#%mNYVQl}4edS3B@g2v+^laRxmf(huJrkkzoW$p>C}`y1c+?RQnbt$D3tLkBz-z^ z8Xl2=5s;4ibO9FH>7@Yc1!mbnTX*l&m2_SJi37-sFTpx1Auu8t(jWTFmP^IY(vn_zL*>ROf@$PU2rJjga|BlBajJn}}S@}O5 zNVz#Ky=j(0Z_noD(Wz}}S)Oos41xrn(%F*6TL^5omqb}K>&$=r^0Qaf}5NXLJIM4jWLMpAG`>8awUsQnJxM_PJ_i4 zg_md6lo@|k&MqlrC16mmaK}5!v#kU^QanUWKmtE`l$n6;G17&~--9arP&wxZamSTP zLOiBLpt^@^B<$q={$40xwBODp{FFjpdRwS6)VA#5~{YQvqQTZ`q+>FTJ(J3l4lenBs;+;7;A&1i(103wTD6J7!Qrz zXh@Q1#XhxwxXCdyTzaip&WDl|DNEf-6uzf?8Nvi zO6@E|aM4A^UXdUipdCq}_*p<-CPg866$z{gl5yq!vBDci2`8f_Q5kt99lp8o#o+Ri z>HW6fc|e40liu^C^Gds8?QS-c0aSN+{+z~$owMS^t5^La3`XtF6RiQ&P;`rk+P67Y z9yI?jet;aH7=Eb9jGWB<5Dz>V$Y$rfSRT~aF#X*Od7# z^cQ@5OG5E2N)M*$s=~Nz4ZiE~T%jD&X|x$U+;EB0I%e-*`ZcP4JU{2^dN2SFCZ5TB zfE^B`dSzFiHK;w4TeSso8&lC-vg#UhddZM+pU>0kw2_i+%(We^a7k3h9!E-ur$fDG zM~%TZKE6yLNm|2ITdHgQkI5B`Lmh^Hq)g~P85-~yODT7cz)JECaQ#MvZgO=X!F6W=pqRK4jXGvvxIW%RTcPh7j%;i{Sb)gncCWoh%&7y? z8Ar)Ws}hW=L{){1XFx%c2yKEQ;_W_rG;Yq=bpV2O7{d!Dzx19V8RzYGX1d>@JZ{o6HERw^+t`i z$$9pJ{cNtTJDJ6-2~ZG#*eslmA&xgU3reb(8YR}ZSu33NZh96>ufv-6p#G97;C>eBhs6TbaxnteW6bjM-y_Vw`o zO@?+F)KQ)Bf7L+H03@S{dj9tlhbnx6nm71Os^)` zviGA+MH18+wi`ILirB_NTq>gtW51MLio1NF43j^Ea#m97CW^69{XRzq;V#aPs*NAV zsVLZ(zWux`J!WREK?`B$S$fAfAiG-%)1S;LOMzV&l|P5NoFPouwAW#2Ci k5|$T-Vj_iL-vha6(c+;V4dCRl{7)!g4|jr*FaJdN4+0+{9smFU literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_file-members.html b/libs/SdFat-master/html/class_file-members.html new file mode 100755 index 0000000..7d62537 --- /dev/null +++ b/libs/SdFat-master/html/class_file-members.html @@ -0,0 +1,141 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
File Member List
+
+
+ +

This is the complete list of members for File, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available()Fileinline
clearWriteError()Fileinline
close()SdBaseFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile
curCluster() const SdBaseFileinline
curPosition() const SdBaseFileinline
cwd()SdBaseFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlinestatic
dateTimeCallbackCancel()SdBaseFileinlinestatic
dirEntry(dir_t *dir)SdBaseFile
dirName(const dir_t &dir, char *name)SdBaseFilestatic
exists(const char *name)SdBaseFile
fgets(char *str, int16_t num, char *delim=0)SdBaseFile
fileSize() const SdBaseFileinline
firstCluster() const SdBaseFileinline
flush()Fileinline
getFilename(char *name)SdBaseFile
getpos(FatPos_t *pos)SdBaseFile
getWriteError()Fileinline
isDir() const SdBaseFileinline
isDirectory()Fileinline
isFile() const SdBaseFileinline
isOpen() const SdBaseFileinline
isRoot() const SdBaseFileinline
isSubDir() const SdBaseFileinline
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile
ls(uint8_t flags=0)SdBaseFile
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile
name()Fileinline
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile
open(const char *path, uint8_t oflag=O_READ)SdBaseFile
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile
openNextFile(uint8_t mode=O_READ)Fileinline
openRoot(SdVolume *vol)SdBaseFile
operator bool()Fileinline
peek()Fileinline
position()Fileinline
printCreateDateTime(Print *pr)SdBaseFile
printFatDate(uint16_t fatDate)SdBaseFilestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFilestatic
printFatTime(uint16_t fatTime)SdBaseFilestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFilestatic
printField(float value, char term, uint8_t prec=2)SdBaseFile
printField(int16_t value, char term)SdBaseFile
printField(uint16_t value, char term)SdBaseFile
printField(int32_t value, char term)SdBaseFile
printField(uint32_t value, char term)SdBaseFile
printFileSize(Print *pr)SdBaseFile
printModifyDateTime(Print *pr)SdBaseFile
printName()SdBaseFile
printName(Print *pr)SdBaseFile
read()Fileinline
read(void *buf, size_t nbyte)Fileinline
readDir(dir_t *dir)SdBaseFile
remove(SdBaseFile *dirFile, const char *path)SdBaseFilestatic
remove()SdBaseFile
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile
rewind()SdBaseFileinline
rewindDirectory()Fileinline
rmdir()SdBaseFile
rmRfStar()SdBaseFile
SdBaseFile()SdBaseFileinline
SdBaseFile(const char *path, uint8_t oflag)SdBaseFile
seek(uint32_t pos)Fileinline
seekCur(int32_t offset)SdBaseFileinline
seekEnd(int32_t offset=0)SdBaseFileinline
seekSet(uint32_t pos)SdBaseFile
setpos(FatPos_t *pos)SdBaseFile
size()Fileinline
sync()SdBaseFile
timestamp(SdBaseFile *file)SdBaseFile
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile
truncate(uint32_t size)SdBaseFile
type() const SdBaseFileinline
volume() const SdBaseFileinline
write(uint8_t b)Fileinline
write(const void *buf, size_t nbyte)File
write(const uint8_t *buf, size_t size)Fileinline
writeErrorSdBaseFile
+ + + + diff --git a/libs/SdFat-master/html/class_file.html b/libs/SdFat-master/html/class_file.html new file mode 100755 index 0000000..a3705ba --- /dev/null +++ b/libs/SdFat-master/html/class_file.html @@ -0,0 +1,2906 @@ + + + + + + +SdFat: File Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Arduino SD.h style File API. + More...

+ +

#include <SdFile.h>

+
+Inheritance diagram for File:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for File:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

int available ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
void flush ()
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isDirectory ()
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
char * name ()
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
File openNextFile (uint8_t mode=O_READ)
 
bool openRoot (SdVolume *vol)
 
 operator bool ()
 
int peek ()
 
uint32_t position ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
void rewindDirectory ()
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seek (uint32_t pos)
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
uint32_t size ()
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
size_t write (uint8_t b)
 
int write (const void *buf, size_t nbyte)
 
size_t write (const uint8_t *buf, size_t size)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Public Attributes

bool writeError
 
+

Detailed Description

+

Arduino SD.h style File API.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int File::available ()
+
+inline
+
+
Returns
number of bytes available from the current position to EOF or INT_MAX if more than INT_MAX bytes are available.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void File::clearWriteError ()
+
+inline
+
+

Set writeError to zero

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::close ()
+
+inherited
+
+

Close a file and force cached data and directory information to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
uint32_t * endBlock 
)
+
+inherited
+
+

Check for contiguous file and return its raw block range.

+
Parameters
+ + + +
[out]bgnBlockthe first block address for the file.
[out]endBlockthe last block address for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::createContiguous (SdBaseFiledirFile,
const char * path,
uint32_t size 
)
+
+inherited
+
+

Create and open a new contiguous file of a specified size.

+
Note
This function only supports short DOS 8.3 names. See open() for more information.
+
Parameters
+ + + + +
[in]dirFileThe directory where the file will be created.
[in]pathA path with a valid DOS 8.3 file name.
[in]sizeThe desired file size.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curCluster () const
+
+inlineinherited
+
+
Returns
The current cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curPosition () const
+
+inlineinherited
+
+
Returns
The current position for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static SdBaseFile* SdBaseFile::cwd ()
+
+inlinestaticinherited
+
+
Returns
Current working directory
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime)
+
+inlinestaticinherited
+
+

Set the date/time callback function

+
Parameters
+ + +
[in]dateTimeThe user's call back function. The callback function is of the form:
+
+
+
void dateTime(uint16_t* date, uint16_t* time) {
+
uint16_t year;
+
uint8_t month, day, hour, minute, second;
+
+
// User gets date and time from GPS or real-time clock here
+
+
// return date using FAT_DATE macro to format fields
+
*date = FAT_DATE(year, month, day);
+
+
// return time using FAT_TIME macro to format fields
+
*time = FAT_TIME(hour, minute, second);
+
}
+

Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

+

See the timestamp() function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static void SdBaseFile::dateTimeCallbackCancel ()
+
+inlinestaticinherited
+
+

Cancel the date/time callback function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::dirEntry (dir_t * dir)
+
+inherited
+
+

Return a file's directory entry.

+
Parameters
+ + +
[out]dirLocation for return of the file's directory entry.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::dirName (const dir_t & dir,
char * name 
)
+
+staticinherited
+
+

Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

+
Parameters
+ + + +
[in]dirThe directory structure containing the name.
[out]nameA 13 byte char array for the formatted name.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::exists (const char * name)
+
+inherited
+
+

Test for the existence of a file in a directory

+
Parameters
+ + +
[in]nameName of the file to be tested for.
+
+
+

The calling instance must be an open directory file.

+

dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

+
Returns
true if the file exists else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int16_t SdBaseFile::fgets (char * str,
int16_t num,
char * delim = 0 
)
+
+inherited
+
+

Get a string from a file.

+

fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

+

fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

+
Parameters
+ + + + +
[out]strPointer to the array where the string is stored.
[in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
[in]delimOptional set of delimiters. The default is "\n".
+
+
+
Returns
For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::fileSize () const
+
+inlineinherited
+
+
Returns
The total number of bytes in a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::firstCluster () const
+
+inlineinherited
+
+
Returns
The first cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void File::flush ()
+
+inline
+
+

Ensure that any bytes written to the file are saved to the SD card.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::getFilename (char * name)
+
+inherited
+
+

Get a file's name

+
Parameters
+ + +
[out]nameAn array of 13 characters for the file's name.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::getpos (FatPos_tpos)
+
+inherited
+
+

get position for streams

Parameters
+ + +
[out]posstruct to receive position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool File::getWriteError ()
+
+inline
+
+
Returns
value of writeError
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isDir () const
+
+inlineinherited
+
+
Returns
True if this is a directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool File::isDirectory ()
+
+inline
+
+

This function reports if the current file is a directory or not.

Returns
true if the file is a directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isFile () const
+
+inlineinherited
+
+
Returns
True if this is a normal file else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isOpen () const
+
+inlineinherited
+
+
Returns
True if this is an open file/directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isRoot () const
+
+inlineinherited
+
+
Returns
True if this is the root directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isSubDir () const
+
+inlineinherited
+
+
Returns
True if this is a subdirectory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SdBaseFile::ls (Print * pr,
uint8_t flags = 0,
uint8_t indent = 0 
)
+
+inherited
+
+

List directory contents.

+
Parameters
+ + + +
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+
Parameters
+ + +
[in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::ls (uint8_t flags = 0)
+
+inherited
+
+

List directory contents to stdOut.

+
Parameters
+ + +
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::mkdir (SdBaseFileparent,
const char * path,
bool pFlag = true 
)
+
+inherited
+
+

Make a new directory.

+
Parameters
+ + + + +
[in]parentAn open SdFat instance for the directory that will contain the new directory.
[in]pathA path with a valid 8.3 DOS name for the new directory.
[in]pFlagCreate missing parent directories if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char* File::name ()
+
+inline
+
+
Returns
a pointer to the file's name.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
uint16_t index,
uint8_t oflag 
)
+
+inherited
+
+

Open a file by index.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory.
[in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
const char * path,
uint8_t oflag 
)
+
+inherited
+
+

Open a file or directory by name.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

O_READ - Open for reading.

+

O_RDONLY - Same as O_READ.

+

O_WRITE - Open for writing.

+

O_WRONLY - Same as O_WRITE.

+

O_RDWR - Open for reading and writing.

+

O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

+

O_AT_END - Set the initial position at the end of the file.

+

O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

+

O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

+

O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

+

O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

+

WARNING: A given file must not be opened by more than one SdBaseFile object or file corruption may occur.

+
Note
Directory files must be opened read only. Write and truncation is not allowed for directory files.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (const char * path,
uint8_t oflag = O_READ 
)
+
+inherited
+
+

Open a file in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::openNext (SdBaseFiledirFile,
uint8_t oflag 
)
+
+inherited
+
+

Open the next file or subdirectory in a directory.

+
Parameters
+ + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
File File::openNextFile (uint8_t mode = O_READ)
+
+inline
+
+

Opens the next file or folder in a directory.

+
Parameters
+ + +
[in]modeopen mode flags.
+
+
+
Returns
a File object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::openRoot (SdVolumevol)
+
+inherited
+
+

Open a volume's root directory.

+
Parameters
+ + +
[in]volThe FAT volume containing the root directory to be opened.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
File::operator bool ()
+
+inline
+
+

The parenthesis operator.

+
Returns
true if a file is open.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int File::peek ()
+
+inline
+
+

Return the next available byte without consuming it.

+
Returns
The byte if no error and not at eof else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t File::position ()
+
+inline
+
+
Returns
the current file position.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printCreateDateTime (Print * pr)
+
+inherited
+
+

Print a file's creation date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatDate (uint16_t fatDate)
+
+staticinherited
+
+

Print a directory date field to stdOut.

+

Format is yyyy-mm-dd.

+
Parameters
+ + +
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatDate (Print * pr,
uint16_t fatDate 
)
+
+staticinherited
+
+

Print a directory date field.

+

Format is yyyy-mm-dd.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatTime (uint16_t fatTime)
+
+staticinherited
+
+

Print a directory time field to stdOut.

+

Format is hh:mm:ss.

+
Parameters
+ + +
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatTime (Print * pr,
uint16_t fatTime 
)
+
+staticinherited
+
+

Print a directory time field.

+

Format is hh:mm:ss.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (float value,
char term,
uint8_t prec = 2 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printFileSize (Print * pr)
+
+inherited
+
+

Print a file's size.

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printModifyDateTime (Print * pr)
+
+inherited
+
+

Print a file's modify date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t SdBaseFile::printName ()
+
+inherited
+
+

Print a file's name to stdOut

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printName (Print * pr)
+
+inherited
+
+

Print a file's name

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int File::read ()
+
+inline
+
+

Read the next byte from a file.

+
Returns
For success return the next byte in the file as an int. If an error occurs or end of file is reached return -1.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int File::read (void * buf,
size_t nbyte 
)
+
+inline
+
+

Read data from a file starting at the current position.

+
Parameters
+ + + +
[out]bufPointer to the location that will receive the data.
[in]nbyteMaximum number of bytes to read.
+
+
+
Returns
For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int8_t SdBaseFile::readDir (dir_t * dir)
+
+inherited
+
+

Read the next directory entry from a directory file.

+
Parameters
+ + +
[out]dirThe dir_t struct that will receive the data.
+
+
+
Returns
For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::remove (SdBaseFiledirFile,
const char * path 
)
+
+staticinherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Parameters
+ + + +
[in]dirFileThe directory that contains the file.
[in]pathPath for the file to be removed.
+
+
+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::remove ()
+
+inherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::rename (SdBaseFiledirFile,
const char * newPath 
)
+
+inherited
+
+

Rename a file or subdirectory.

+
Parameters
+ + + +
[in]dirFileDirectory for the new path.
[in]newPathNew path name for the file/directory.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::rewind ()
+
+inlineinherited
+
+

Set the file's current position to zero.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void File::rewindDirectory ()
+
+inline
+
+

Rewind a file if it is a directory

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmdir ()
+
+inherited
+
+

Remove a directory file.

+

The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmRfStar ()
+
+inherited
+
+

Recursively delete a directory and all contained files.

+

This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

+

Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool File::seek (uint32_t pos)
+
+inline
+
+

Seek to a new position in the file, which must be between 0 and the size of the file (inclusive).

+
Parameters
+ + +
[in]posthe new file position.
+
+
+
Returns
true for success else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekCur (int32_t offset)
+
+inlineinherited
+
+

Set the files position to current position + pos. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from the current position.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekEnd (int32_t offset = 0)
+
+inlineinherited
+
+

Set the files position to end-of-file + offset. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from end-of-file.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekSet (uint32_t pos)
+
+inherited
+
+

Sets a file's position.

+
Parameters
+ + +
[in]posThe new position in bytes from the beginning of the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::setpos (FatPos_tpos)
+
+inherited
+
+

set position for streams

Parameters
+ + +
[out]posstruct with value for new position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t File::size ()
+
+inline
+
+
Returns
the file's size.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::sync ()
+
+inherited
+
+

The sync() call causes all modified data and directory fields to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::timestamp (SdBaseFilefile)
+
+inherited
+
+

Copy a file's timestamps

+
Parameters
+ + +
[in]fileFile to copy timestamps from.
+
+
+
Note
Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::timestamp (uint8_t flags,
uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour,
uint8_t minute,
uint8_t second 
)
+
+inherited
+
+

Set a file's timestamps in its directory entry.

+
Parameters
+ + +
[in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

T_ACCESS - Set the file's last access date.

+

T_CREATE - Set the file's creation date and time.

+

T_WRITE - Set the file's last write/modification date and time.

+
Parameters
+ + + + + + + +
[in]yearValid range 1980 - 2107 inclusive.
[in]monthValid range 1 - 12 inclusive.
[in]dayValid range 1 - 31 inclusive.
[in]hourValid range 0 - 23 inclusive.
[in]minuteValid range 0 - 59 inclusive.
[in]secondValid range 0 - 59 inclusive
+
+
+
Note
It is possible to set an invalid date since there is no check for the number of days in a month.
+
+Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::truncate (uint32_t length)
+
+inherited
+
+

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

+
Parameters
+ + +
[in]lengthThe desired length for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdBaseFile::type () const
+
+inlineinherited
+
+

Type of file. You should use isFile() or isDir() instead of type() if possible.

+
Returns
The file or directory type.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdVolume* SdBaseFile::volume () const
+
+inlineinherited
+
+
Returns
SdVolume that contains this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t File::write (uint8_t b)
+
+inline
+
+

Write a byte to a file. Required by the Arduino Print class.

Parameters
+ + +
[in]bthe byte to be written. Use getWriteError to check for errors.
+
+
+
Returns
1 for success and 0 for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int File::write (const void * buf,
size_t nbyte 
)
+
+

Write data to an open file.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]nbyteNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t File::write (const uint8_t * buf,
size_t size 
)
+
+inline
+
+

Write data to an open file. Form required by Print.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]sizeNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool SdBaseFile::writeError
+
+inherited
+
+

writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/class_file__coll__graph.png b/libs/SdFat-master/html/class_file__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..5fb4ad03b789deb6fe871fc5d66504b319dc29e3 GIT binary patch literal 2981 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 + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
MinimumSerial Member List
+
+
+ +

This is the complete list of members for MinimumSerial, including all inherited members.

+ + + + +
begin(uint32_t baud)MinimumSerial
read()MinimumSerial
write(uint8_t b)MinimumSerial
+ + + + diff --git a/libs/SdFat-master/html/class_minimum_serial.html b/libs/SdFat-master/html/class_minimum_serial.html new file mode 100755 index 0000000..0e6721c --- /dev/null +++ b/libs/SdFat-master/html/class_minimum_serial.html @@ -0,0 +1,158 @@ + + + + + + +SdFat: MinimumSerial Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
MinimumSerial Class Reference
+
+
+ +

mini serial class for the SdFat library. + More...

+ +

#include <MinimumSerial.h>

+
+Inheritance diagram for MinimumSerial:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for MinimumSerial:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + +

+Public Member Functions

void begin (uint32_t baud)
 
int read ()
 
size_t write (uint8_t b)
 
+

Detailed Description

+

mini serial class for the SdFat library.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
void MinimumSerial::begin (uint32_t baud)
+
+

Set baud rate for serial port zero and enable in non interrupt mode. Do not call this function if you use another serial library.

Parameters
+ + +
[in]baudrate
+
+
+ +
+
+ +
+
+ + + + + + + +
int MinimumSerial::read ()
+
+

Unbuffered read

Returns
-1 if no character is available or an available character.
+ +
+
+ +
+
+ + + + + + + + +
size_t MinimumSerial::write (uint8_t b)
+
+

Unbuffered write

+
Parameters
+ + +
[in]bbyte to write.
+
+
+
Returns
1
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/MinimumSerial.h
  • +
  • Arduino/libraries/SdFat/MinimumSerial.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_minimum_serial__coll__graph.png b/libs/SdFat-master/html/class_minimum_serial__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..1121af804a7c744235bcd0852e76184e6f321dee GIT binary patch literal 1191 zcmeAS@N?(olHy`uVBq!ia0vp^r9fQ3!3HE1PTKPWDYhhUcNd2LAh=-f^2rPgEHR!g zjv*Cu-p=*SmkyO^J#X#V5z=(UBg89)HB?RL#O=HYM>VE{Od(qjxn^;k))Tnk6uRx8 z^|uw=bxeOatas;i{9sJw))rf{N^8^KO&N=<9)J9iY`5bN~K-!;-$M7Z@21+~sH7!~G!hg^uM7 z!_CJTR7zWx7s}k{l}!rVb@yGY@o(J{K86k_c7dbHD_cCY6eoF|Fyfu^?5O&b^w?!T zr#uz85~(#oPs97p8mDaC_`CXwZ-QzM*+iPH+%s*1H|wU|mp-Sqg$wB#u9q#fU%pJ% z*HbdGC`((fdzbgpDU+t3zVJ8BN@c2m=Uks$_x+`I%g+_ros}{I8+s1Yb~wvtDz849+qj*k9cD`FLV^MZHnKbv1S&X_YC;Hfp1X*m~S_9dv@*_y$CfuVd2P{yrSu3o*KH&=G{=d(W3*&1Gkry4Up*{#^Uw?paw@1&KvJAQK;e>op_SoVL|d_R$6r}H!St$(Xr z`>b)(@4aupG25|3NC_IrRANqVoH})Cdc{}gjV70W{fd@z4R3m`QDw9_n8Dm#w$Ju+ zqJhMlZMSo`M6G?Iw6UecYOX0mKC^|TzIW{e_tjSq-Mbg(y3s|>YVNs+ndcBLn-rZT zbKF>eepvavs#KxlA8$-qzEVE{Od(qjxn^;k))Tnk6uRx8 z^|uw=bxeOatas;i{9sJw))rf{N^8^KO&N=<9)J9iY`5bN~K-!;-$M7Z@21+~sH7!~G!hg^uM7 z!_CJTR7zWx7s}k{l}!rVb@yGY@o(J{K86k_c7dbHD_cCY6eoF|Fyfu^?5O&b^w?!T zr#uz85~(#oPs97p8mDaC_`CXwZ-QzM*+iPH+%s*1H|wU|mp-Sqg$wB#u9q#fU%pJ% z*HbdGC`((fdzbgpDU+t3zVJ8BN@c2m=Uks$_x+`I%g+_ros}{I8+s1Yb~wvtDz849+qj*k9cD`FLV^MZHnKbv1S&X_YC;Hfp1X*m~S_9dv@*_y$CfuVd2P{yrSu3o*KH&=G{=d(W3*&1Gkry4Up*{#^Uw?paw@1&KvJAQK;e>op_SoVL|d_R$6r}H!St$(Xr z`>b)(@4aupG25|3NC_IrRANqVoH})Cdc{}gjV70W{fd@z4R3m`QDw9_n8Dm#w$Ju+ zqJhMlZMSo`M6G?Iw6UecYOX0mKC^|TzIW{e_tjSq-Mbg(y3s|>YVNs+ndcBLn-rZT zbKF>eepvavs#KxlA8$-qzE + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Sd2Card Member List
+
+
+ +

This is the complete list of members for Sd2Card, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
begin(uint8_t chipSelectPin=SD_CHIP_SELECT_PIN, uint8_t sckDivisor=SPI_FULL_SPEED)Sd2Card
cardSize()Sd2Card
erase(uint32_t firstBlock, uint32_t lastBlock)Sd2Card
eraseSingleBlockEnable()Sd2Card
error(uint8_t code)Sd2Cardinline
errorCode() const Sd2Cardinline
errorData() const Sd2Cardinline
init(uint8_t sckDivisor=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)Sd2Cardinline
isBusy()Sd2Card
readBlock(uint32_t block, uint8_t *dst)Sd2Card
readCID(cid_t *cid)Sd2Cardinline
readCSD(csd_t *csd)Sd2Cardinline
readData(uint8_t *dst)Sd2Card
readOCR(uint32_t *ocr)Sd2Card
readStart(uint32_t blockNumber)Sd2Card
readStop()Sd2Card
sckDivisor()Sd2Cardinline
Sd2Card()Sd2Cardinline
type() const Sd2Cardinline
writeBlock(uint32_t blockNumber, const uint8_t *src)Sd2Card
writeData(const uint8_t *src)Sd2Card
writeStart(uint32_t blockNumber, uint32_t eraseCount)Sd2Card
writeStop()Sd2Card
+ + + + diff --git a/libs/SdFat-master/html/class_sd2_card.html b/libs/SdFat-master/html/class_sd2_card.html new file mode 100755 index 0000000..f610066 --- /dev/null +++ b/libs/SdFat-master/html/class_sd2_card.html @@ -0,0 +1,739 @@ + + + + + + +SdFat: Sd2Card Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
Sd2Card Class Reference
+
+
+ +

Raw access to SD and SDHC flash memory cards. + More...

+ +

#include <Sd2Card.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool begin (uint8_t chipSelectPin=SD_CHIP_SELECT_PIN, uint8_t sckDivisor=SPI_FULL_SPEED)
 
uint32_t cardSize ()
 
bool erase (uint32_t firstBlock, uint32_t lastBlock)
 
bool eraseSingleBlockEnable ()
 
void error (uint8_t code)
 
int errorCode () const
 
int errorData () const
 
bool init (uint8_t sckDivisor=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)
 
bool isBusy ()
 
bool readBlock (uint32_t block, uint8_t *dst)
 
bool readCID (cid_t *cid)
 
bool readCSD (csd_t *csd)
 
bool readData (uint8_t *dst)
 
bool readOCR (uint32_t *ocr)
 
bool readStart (uint32_t blockNumber)
 
bool readStop ()
 
uint8_t sckDivisor ()
 
 Sd2Card ()
 
int type () const
 
bool writeBlock (uint32_t blockNumber, const uint8_t *src)
 
bool writeData (const uint8_t *src)
 
bool writeStart (uint32_t blockNumber, uint32_t eraseCount)
 
bool writeStop ()
 
+

Detailed Description

+

Raw access to SD and SDHC flash memory cards.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Sd2Card::Sd2Card ()
+
+inline
+
+

Construct an instance of Sd2Card.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::begin (uint8_t chipSelectPin = SD_CHIP_SELECT_PIN,
uint8_t sckDivisor = SPI_FULL_SPEED 
)
+
+

Initialize an SD flash memory card.

+
Parameters
+ + + +
[in]chipSelectPinSD chip select pin number.
[in]sckDivisorSPI SCK clock rate divisor.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. The reason for failure can be determined by calling errorCode() and errorData().
+ +
+
+ +
+
+ + + + + + + +
uint32_t Sd2Card::cardSize ()
+
+

Determine the size of an SD flash memory card.

+
Returns
The number of 512 byte data blocks in the card or zero if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::erase (uint32_t firstBlock,
uint32_t lastBlock 
)
+
+

Erase a range of blocks.

+
Parameters
+ + + +
[in]firstBlockThe address of the first block in the range.
[in]lastBlockThe address of the last block in the range.
+
+
+
Note
This function requests the SD card to do a flash erase for a range of blocks. The data on the card after an erase operation is either 0 or 1, depends on the card vendor. The card must support single block erase.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
bool Sd2Card::eraseSingleBlockEnable ()
+
+

Determine if card supports single block erase.

+
Returns
The value one, true, is returned if single block erase is supported. The value zero, false, is returned if single block erase is not supported.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void Sd2Card::error (uint8_t code)
+
+inline
+
+

Set SD error code.

Parameters
+ + +
[in]codevalue for error code.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int Sd2Card::errorCode () const
+
+inline
+
+
Returns
error code for last error. See Sd2Card.h for a list of error codes.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int Sd2Card::errorData () const
+
+inline
+
+
Returns
error data for last error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::init (uint8_t sckDivisor = SPI_FULL_SPEED,
uint8_t chipSelectPin = SD_CHIP_SELECT_PIN 
)
+
+inline
+
+

Initialize an SD flash memory card.

+
Parameters
+ + + +
[in]chipSelectPinSD chip select pin number.
[in]sckDivisorSPI SCK clock rate divisor.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. The reason for failure can be determined by calling errorCode() and errorData().
+ +
+
+ +
+
+ + + + + + + +
bool Sd2Card::isBusy ()
+
+

Check for busy. MISO low indicates the card is busy.

+
Returns
true if busy else false.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::readBlock (uint32_t blockNumber,
uint8_t * dst 
)
+
+

Read a 512 byte block from an SD card.

+
Parameters
+ + + +
[in]blockNumberLogical block to be read.
[out]dstPointer to the location that will receive the data.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool Sd2Card::readCID (cid_t * cid)
+
+inline
+
+

Read a card's CID register. The CID contains card identification information such as Manufacturer ID, Product name, Product serial number and Manufacturing date.

+
Parameters
+ + +
[out]cidpointer to area for returned data.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool Sd2Card::readCSD (csd_t * csd)
+
+inline
+
+

Read a card's CSD register. The CSD contains Card-Specific Data that provides information regarding access to the card's contents.

+
Parameters
+ + +
[out]csdpointer to area for returned data.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool Sd2Card::readData (uint8_t * dst)
+
+

Read one data block in a multiple block read sequence

+
Parameters
+ + +
[in]dstPointer to the location for the data to be read.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool Sd2Card::readOCR (uint32_t * ocr)
+
+

Read OCR register.

+
Parameters
+ + +
[out]ocrValue of OCR register.
+
+
+
Returns
true for success else false.
+ +
+
+ +
+
+ + + + + + + + +
bool Sd2Card::readStart (uint32_t blockNumber)
+
+

Start a read multiple blocks sequence.

+
Parameters
+ + +
[in]blockNumberAddress of first block in sequence.
+
+
+
Note
This function is used with readData() and readStop() for optimized multiple block reads. SPI chipSelect must be low for the entire sequence.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
bool Sd2Card::readStop ()
+
+

End a read multiple blocks sequence.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t Sd2Card::sckDivisor ()
+
+inline
+
+

Return SCK divisor.

+
Returns
Requested SCK divisor.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int Sd2Card::type () const
+
+inline
+
+

Return the card type: SD V1, SD V2 or SDHC

Returns
0 - SD V1, 1 - SD V2, or 3 - SDHC.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::writeBlock (uint32_t blockNumber,
const uint8_t * src 
)
+
+

Writes a 512 byte block to an SD card.

+
Parameters
+ + + +
[in]blockNumberLogical block to be written.
[in]srcPointer to the location of the data to be written.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool Sd2Card::writeData (const uint8_t * src)
+
+

Write one data block in a multiple block write sequence

Parameters
+ + +
[in]srcPointer to the location of the data to be written.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Sd2Card::writeStart (uint32_t blockNumber,
uint32_t eraseCount 
)
+
+

Start a write multiple blocks sequence.

+
Parameters
+ + + +
[in]blockNumberAddress of first block in sequence.
[in]eraseCountThe number of blocks to be pre-erased.
+
+
+
Note
This function is used with writeData() and writeStop() for optimized multiple block writes.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
bool Sd2Card::writeStop ()
+
+

End a write multiple blocks sequence.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/Sd2Card.h
  • +
  • Arduino/libraries/SdFat/Sd2Card.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_sd_base_file-members.html b/libs/SdFat-master/html/class_sd_base_file-members.html new file mode 100755 index 0000000..1b81aa3 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_base_file-members.html @@ -0,0 +1,131 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdBaseFile Member List
+
+
+ +

This is the complete list of members for SdBaseFile, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available()SdBaseFileinline
clearWriteError()SdBaseFileinline
close()SdBaseFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile
curCluster() const SdBaseFileinline
curPosition() const SdBaseFileinline
cwd()SdBaseFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlinestatic
dateTimeCallbackCancel()SdBaseFileinlinestatic
dirEntry(dir_t *dir)SdBaseFile
dirName(const dir_t &dir, char *name)SdBaseFilestatic
exists(const char *name)SdBaseFile
fgets(char *str, int16_t num, char *delim=0)SdBaseFile
fileSize() const SdBaseFileinline
firstCluster() const SdBaseFileinline
getFilename(char *name)SdBaseFile
getpos(FatPos_t *pos)SdBaseFile
getWriteError()SdBaseFileinline
isDir() const SdBaseFileinline
isFile() const SdBaseFileinline
isOpen() const SdBaseFileinline
isRoot() const SdBaseFileinline
isSubDir() const SdBaseFileinline
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile
ls(uint8_t flags=0)SdBaseFile
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile
open(const char *path, uint8_t oflag=O_READ)SdBaseFile
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile
openRoot(SdVolume *vol)SdBaseFile
peek()SdBaseFile
printCreateDateTime(Print *pr)SdBaseFile
printFatDate(uint16_t fatDate)SdBaseFilestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFilestatic
printFatTime(uint16_t fatTime)SdBaseFilestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFilestatic
printField(float value, char term, uint8_t prec=2)SdBaseFile
printField(int16_t value, char term)SdBaseFile
printField(uint16_t value, char term)SdBaseFile
printField(int32_t value, char term)SdBaseFile
printField(uint32_t value, char term)SdBaseFile
printFileSize(Print *pr)SdBaseFile
printModifyDateTime(Print *pr)SdBaseFile
printName()SdBaseFile
printName(Print *pr)SdBaseFile
read()SdBaseFile
read(void *buf, size_t nbyte)SdBaseFile
readDir(dir_t *dir)SdBaseFile
remove(SdBaseFile *dirFile, const char *path)SdBaseFilestatic
remove()SdBaseFile
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile
rewind()SdBaseFileinline
rmdir()SdBaseFile
rmRfStar()SdBaseFile
SdBaseFile()SdBaseFileinline
SdBaseFile(const char *path, uint8_t oflag)SdBaseFile
SdFat (defined in SdBaseFile)SdBaseFilefriend
seekCur(int32_t offset)SdBaseFileinline
seekEnd(int32_t offset=0)SdBaseFileinline
seekSet(uint32_t pos)SdBaseFile
setpos(FatPos_t *pos)SdBaseFile
sync()SdBaseFile
timestamp(SdBaseFile *file)SdBaseFile
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile
truncate(uint32_t size)SdBaseFile
type() const SdBaseFileinline
volume() const SdBaseFileinline
write(const void *buf, size_t nbyte)SdBaseFile
writeErrorSdBaseFile
+ + + + diff --git a/libs/SdFat-master/html/class_sd_base_file.html b/libs/SdFat-master/html/class_sd_base_file.html new file mode 100755 index 0000000..127d492 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_base_file.html @@ -0,0 +1,2313 @@ + + + + + + +SdFat: SdBaseFile Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Base class for SdFile with Print and C++ streams. + More...

+ +

#include <SdBaseFile.h>

+
+Inheritance diagram for SdBaseFile:
+
+
Inheritance graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
 SdBaseFile ()
 
 SdBaseFile (const char *path, uint8_t oflag)
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
int write (const void *buf, size_t nbyte)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Public Attributes

bool writeError
 
+ + + +

+Friends

+class SdFat
 
+

Detailed Description

+

Base class for SdFile with Print and C++ streams.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
SdBaseFile::SdBaseFile ()
+
+inline
+
+

Create an instance.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
SdBaseFile::SdBaseFile (const char * path,
uint8_t oflag 
)
+
+

Create a file object and open it in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::available ()
+
+inline
+
+
Returns
number of bytes available from yhe current position to EOF
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::clearWriteError ()
+
+inline
+
+

Set writeError to zero

+ +
+
+ +
+
+ + + + + + + +
bool SdBaseFile::close ()
+
+

Close a file and force cached data and directory information to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
uint32_t * endBlock 
)
+
+

Check for contiguous file and return its raw block range.

+
Parameters
+ + + +
[out]bgnBlockthe first block address for the file.
[out]endBlockthe last block address for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::createContiguous (SdBaseFiledirFile,
const char * path,
uint32_t size 
)
+
+

Create and open a new contiguous file of a specified size.

+
Note
This function only supports short DOS 8.3 names. See open() for more information.
+
Parameters
+ + + + +
[in]dirFileThe directory where the file will be created.
[in]pathA path with a valid DOS 8.3 file name.
[in]sizeThe desired file size.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curCluster () const
+
+inline
+
+
Returns
The current cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curPosition () const
+
+inline
+
+
Returns
The current position for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static SdBaseFile* SdBaseFile::cwd ()
+
+inlinestatic
+
+
Returns
Current working directory
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime)
+
+inlinestatic
+
+

Set the date/time callback function

+
Parameters
+ + +
[in]dateTimeThe user's call back function. The callback function is of the form:
+
+
+
void dateTime(uint16_t* date, uint16_t* time) {
+
uint16_t year;
+
uint8_t month, day, hour, minute, second;
+
+
// User gets date and time from GPS or real-time clock here
+
+
// return date using FAT_DATE macro to format fields
+
*date = FAT_DATE(year, month, day);
+
+
// return time using FAT_TIME macro to format fields
+
*time = FAT_TIME(hour, minute, second);
+
}
+

Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

+

See the timestamp() function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static void SdBaseFile::dateTimeCallbackCancel ()
+
+inlinestatic
+
+

Cancel the date/time callback function.

+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::dirEntry (dir_t * dir)
+
+

Return a file's directory entry.

+
Parameters
+ + +
[out]dirLocation for return of the file's directory entry.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::dirName (const dir_t & dir,
char * name 
)
+
+static
+
+

Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

+
Parameters
+ + + +
[in]dirThe directory structure containing the name.
[out]nameA 13 byte char array for the formatted name.
+
+
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::exists (const char * name)
+
+

Test for the existence of a file in a directory

+
Parameters
+ + +
[in]nameName of the file to be tested for.
+
+
+

The calling instance must be an open directory file.

+

dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

+
Returns
true if the file exists else false.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int16_t SdBaseFile::fgets (char * str,
int16_t num,
char * delim = 0 
)
+
+

Get a string from a file.

+

fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

+

fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

+
Parameters
+ + + + +
[out]strPointer to the array where the string is stored.
[in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
[in]delimOptional set of delimiters. The default is "\n".
+
+
+
Returns
For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::fileSize () const
+
+inline
+
+
Returns
The total number of bytes in a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::firstCluster () const
+
+inline
+
+
Returns
The first cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::getFilename (char * name)
+
+

Get a file's name

+
Parameters
+ + +
[out]nameAn array of 13 characters for the file's name.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
void SdBaseFile::getpos (FatPos_tpos)
+
+

get position for streams

Parameters
+ + +
[out]posstruct to receive position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::getWriteError ()
+
+inline
+
+
Returns
value of writeError
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isDir () const
+
+inline
+
+
Returns
True if this is a directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isFile () const
+
+inline
+
+
Returns
True if this is a normal file else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isOpen () const
+
+inline
+
+
Returns
True if this is an open file/directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isRoot () const
+
+inline
+
+
Returns
True if this is the root directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isSubDir () const
+
+inline
+
+
Returns
True if this is a subdirectory else false.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SdBaseFile::ls (Print * pr,
uint8_t flags = 0,
uint8_t indent = 0 
)
+
+

List directory contents.

+
Parameters
+ + + +
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+
Parameters
+ + +
[in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdBaseFile::ls (uint8_t flags = 0)
+
+

List directory contents to stdOut.

+
Parameters
+ + +
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::mkdir (SdBaseFileparent,
const char * path,
bool pFlag = true 
)
+
+

Make a new directory.

+
Parameters
+ + + + +
[in]parentAn open SdFat instance for the directory that will contain the new directory.
[in]pathA path with a valid 8.3 DOS name for the new directory.
[in]pFlagCreate missing parent directories if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
uint16_t index,
uint8_t oflag 
)
+
+

Open a file by index.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory.
[in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
const char * path,
uint8_t oflag 
)
+
+

Open a file or directory by name.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

O_READ - Open for reading.

+

O_RDONLY - Same as O_READ.

+

O_WRITE - Open for writing.

+

O_WRONLY - Same as O_WRITE.

+

O_RDWR - Open for reading and writing.

+

O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

+

O_AT_END - Set the initial position at the end of the file.

+

O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

+

O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

+

O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

+

O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

+

WARNING: A given file must not be opened by more than one SdBaseFile object or file corruption may occur.

+
Note
Directory files must be opened read only. Write and truncation is not allowed for directory files.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (const char * path,
uint8_t oflag = O_READ 
)
+
+

Open a file in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::openNext (SdBaseFiledirFile,
uint8_t oflag 
)
+
+

Open the next file or subdirectory in a directory.

+
Parameters
+ + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::openRoot (SdVolumevol)
+
+

Open a volume's root directory.

+
Parameters
+ + +
[in]volThe FAT volume containing the root directory to be opened.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
+ +
+
+ +
+
+ + + + + + + +
int SdBaseFile::peek ()
+
+

Return the next available byte without consuming it.

+
Returns
The byte if no error and not at eof else -1;
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::printCreateDateTime (Print * pr)
+
+

Print a file's creation date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatDate (uint16_t fatDate)
+
+static
+
+

Print a directory date field to stdOut.

+

Format is yyyy-mm-dd.

+
Parameters
+ + +
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatDate (Print * pr,
uint16_t fatDate 
)
+
+static
+
+

Print a directory date field.

+

Format is yyyy-mm-dd.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatTime (uint16_t fatTime)
+
+static
+
+

Print a directory time field to stdOut.

+

Format is hh:mm:ss.

+
Parameters
+ + +
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatTime (Print * pr,
uint16_t fatTime 
)
+
+static
+
+

Print a directory time field.

+

Format is hh:mm:ss.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (float value,
char term,
uint8_t prec = 2 
)
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int16_t value,
char term 
)
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint16_t value,
char term 
)
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int32_t value,
char term 
)
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint32_t value,
char term 
)
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
size_t SdBaseFile::printFileSize (Print * pr)
+
+

Print a file's size.

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::printModifyDateTime (Print * pr)
+
+

Print a file's modify date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
size_t SdBaseFile::printName ()
+
+

Print a file's name to stdOut

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
size_t SdBaseFile::printName (Print * pr)
+
+

Print a file's name

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
int16_t SdBaseFile::read ()
+
+

Read the next byte from a file.

+
Returns
For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::read (void * buf,
size_t nbyte 
)
+
+

Read data from a file starting at the current position.

+
Parameters
+ + + +
[out]bufPointer to the location that will receive the data.
[in]nbyteMaximum number of bytes to read.
+
+
+
Returns
For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
+ +
+
+ +
+
+ + + + + + + + +
int8_t SdBaseFile::readDir (dir_t * dir)
+
+

Read the next directory entry from a directory file.

+
Parameters
+ + +
[out]dirThe dir_t struct that will receive the data.
+
+
+
Returns
For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::remove (SdBaseFiledirFile,
const char * path 
)
+
+static
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Parameters
+ + + +
[in]dirFileThe directory that contains the file.
[in]pathPath for the file to be removed.
+
+
+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
+ +
+
+ +
+
+ + + + + + + +
bool SdBaseFile::remove ()
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::rename (SdBaseFiledirFile,
const char * newPath 
)
+
+

Rename a file or subdirectory.

+
Parameters
+ + + +
[in]dirFileDirectory for the new path.
[in]newPathNew path name for the file/directory.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::rewind ()
+
+inline
+
+

Set the file's current position to zero.

+ +
+
+ +
+
+ + + + + + + +
bool SdBaseFile::rmdir ()
+
+

Remove a directory file.

+

The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + + + +
bool SdBaseFile::rmRfStar ()
+
+

Recursively delete a directory and all contained files.

+

This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

+

Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekCur (int32_t offset)
+
+inline
+
+

Set the files position to current position + pos. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from the current position.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekEnd (int32_t offset = 0)
+
+inline
+
+

Set the files position to end-of-file + offset. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from end-of-file.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::seekSet (uint32_t pos)
+
+

Sets a file's position.

+
Parameters
+ + +
[in]posThe new position in bytes from the beginning of the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
void SdBaseFile::setpos (FatPos_tpos)
+
+

set position for streams

Parameters
+ + +
[out]posstruct with value for new position
+
+
+ +
+
+ +
+
+ + + + + + + +
bool SdBaseFile::sync ()
+
+

The sync() call causes all modified data and directory fields to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::timestamp (SdBaseFilefile)
+
+

Copy a file's timestamps

+
Parameters
+ + +
[in]fileFile to copy timestamps from.
+
+
+
Note
Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::timestamp (uint8_t flags,
uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour,
uint8_t minute,
uint8_t second 
)
+
+

Set a file's timestamps in its directory entry.

+
Parameters
+ + +
[in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

T_ACCESS - Set the file's last access date.

+

T_CREATE - Set the file's creation date and time.

+

T_WRITE - Set the file's last write/modification date and time.

+
Parameters
+ + + + + + + +
[in]yearValid range 1980 - 2107 inclusive.
[in]monthValid range 1 - 12 inclusive.
[in]dayValid range 1 - 31 inclusive.
[in]hourValid range 0 - 23 inclusive.
[in]minuteValid range 0 - 59 inclusive.
[in]secondValid range 0 - 59 inclusive
+
+
+
Note
It is possible to set an invalid date since there is no check for the number of days in a month.
+
+Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool SdBaseFile::truncate (uint32_t length)
+
+

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

+
Parameters
+ + +
[in]lengthThe desired length for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdBaseFile::type () const
+
+inline
+
+

Type of file. You should use isFile() or isDir() instead of type() if possible.

+
Returns
The file or directory type.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdVolume* SdBaseFile::volume () const
+
+inline
+
+
Returns
SdVolume that contains this file.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::write (const void * buf,
size_t nbyte 
)
+
+

Write data to an open file.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]nbyteNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
bool SdBaseFile::writeError
+
+

writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/SdBaseFile.h
  • +
  • Arduino/libraries/SdFat/SdBaseFile.cpp
  • +
  • Arduino/libraries/SdFat/SdBaseFilePrint.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_sd_base_file__inherit__graph.png b/libs/SdFat-master/html/class_sd_base_file__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..c0fca6869671d7a3667bb3289f5e80c021ca821c GIT binary patch literal 9364 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 + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdFat Member List
+
+
+ +

This is the complete list of members for SdFat, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
begin(uint8_t chipSelectPin=SD_CHIP_SELECT_PIN, uint8_t sckDivisor=SPI_FULL_SPEED)SdFat
card()SdFatinline
chdir(bool set_cwd=false)SdFat
chdir(const char *path, bool set_cwd=false)SdFat
chvol()SdFat
errorHalt()SdFat
errorHalt(char const *msg)SdFat
errorHalt_P(PGM_P msg)SdFat
errorPrint()SdFat
errorPrint(char const *msg)SdFat
errorPrint_P(PGM_P msg)SdFat
exists(const char *name)SdFat
initErrorHalt()SdFat
initErrorHalt(char const *msg)SdFat
initErrorHalt_P(PGM_P msg)SdFat
initErrorPrint()SdFat
initErrorPrint(char const *msg)SdFat
initErrorPrint_P(PGM_P msg)SdFat
ls(uint8_t flags=0)SdFat
ls(const char *path, uint8_t flags=0)SdFat
ls(Print *pr, uint8_t flags=0)SdFat
ls(Print *pr, const char *path, uint8_t flags=0)SdFat
mkdir(const char *path, bool pFlag=true)SdFat
open(const char *path, uint8_t mode=FILE_READ)SdFatinline
remove(const char *path)SdFat
rename(const char *oldPath, const char *newPath)SdFat
rmdir(const char *path)SdFat
SdFat() (defined in SdFat)SdFatinline
setStdOut(Print *stream)SdFatinlinestatic
stdOut()SdFatinlinestatic
truncate(const char *path, uint32_t length)SdFat
vol()SdFatinline
vwd()SdFatinline
+ + + + diff --git a/libs/SdFat-master/html/class_sd_fat.html b/libs/SdFat-master/html/class_sd_fat.html new file mode 100755 index 0000000..a9bb96e --- /dev/null +++ b/libs/SdFat-master/html/class_sd_fat.html @@ -0,0 +1,1005 @@ + + + + + + +SdFat: SdFat Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Integration class for the SdFat library. + More...

+ +

#include <SdFat.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool begin (uint8_t chipSelectPin=SD_CHIP_SELECT_PIN, uint8_t sckDivisor=SPI_FULL_SPEED)
 
Sd2Cardcard ()
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
void errorHalt ()
 
void errorHalt (char const *msg)
 
void errorHalt_P (PGM_P msg)
 
void errorPrint ()
 
void errorPrint (char const *msg)
 
void errorPrint_P (PGM_P msg)
 
bool exists (const char *name)
 
void initErrorHalt ()
 
void initErrorHalt (char const *msg)
 
void initErrorHalt_P (PGM_P msg)
 
void initErrorPrint ()
 
void initErrorPrint (char const *msg)
 
void initErrorPrint_P (PGM_P msg)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (Print *pr, uint8_t flags=0)
 
void ls (Print *pr, const char *path, uint8_t flags=0)
 
bool mkdir (const char *path, bool pFlag=true)
 
File open (const char *path, uint8_t mode=FILE_READ)
 
bool remove (const char *path)
 
bool rename (const char *oldPath, const char *newPath)
 
bool rmdir (const char *path)
 
bool truncate (const char *path, uint32_t length)
 
SdVolumevol ()
 
SdBaseFilevwd ()
 
+ + + + + +

+Static Public Member Functions

static void setStdOut (Print *stream)
 
static Print * stdOut ()
 
+

Detailed Description

+

Integration class for the SdFat library.

+

error if old IDE

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdFat::begin (uint8_t chipSelectPin = SD_CHIP_SELECT_PIN,
uint8_t sckDivisor = SPI_FULL_SPEED 
)
+
+

Initialize an SdFat object.

+

Initializes the SD card, SD volume, and root directory.

+
Parameters
+ + + +
[in]chipSelectPinSD chip select pin. See Sd2Card::init().
[in]sckDivisorvalue for SPI SCK divisor. See Sd2Card::init().
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Sd2Card* SdFat::card ()
+
+inline
+
+
Returns
a pointer to the Sd2Card object.
+ +
+
+ +
+
+ + + + + + + + +
bool SdFat::chdir (bool set_cwd = false)
+
+

Change a volume's working directory to root

+

Changes the volume's working directory to the SD's root directory. Optionally set the current working directory to the volume's working directory.

+
Parameters
+ + +
[in]set_cwdSet the current working directory to this volume's working directory if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdFat::chdir (const char * path,
bool set_cwd = false 
)
+
+

Change a volume's working directory

+

Changes the volume working directory to the path subdirectory. Optionally set the current working directory to the volume's working directory.

+

Example: If the volume's working directory is "/DIR", chdir("SUB") will change the volume's working directory from "/DIR" to "/DIR/SUB".

+

If path is "/", the volume's working directory will be changed to the root directory

+
Parameters
+ + + +
[in]pathThe name of the subdirectory.
[in]set_cwdSet the current working directory to this volume's working directory if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + +
void SdFat::chvol ()
+
+

Set the current working directory to a volume's working directory.

+

This is useful with multiple SD cards.

+

The current working directory is changed to this volume's working directory.

+

This is like the Windows/DOS <drive letter>: command.

+ +
+
+ +
+
+ + + + + + + +
void SdFat::errorHalt ()
+
+

Print any SD error code and halt.

+ +
+
+ +
+
+ + + + + + + + +
void SdFat::errorHalt (char const * msg)
+
+

Print msg, any SD error code, and halt.

+
Parameters
+ + +
[in]msgMessage to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFat::errorHalt_P (PGM_P msg)
+
+

Print msg, any SD error code, and halt.

+
Parameters
+ + +
[in]msgMessage in program space (flash memory) to print.
+
+
+ +
+
+ +
+
+ + + + + + + +
void SdFat::errorPrint ()
+
+

Print any SD error code.

+ +
+
+ +
+
+ + + + + + + + +
void SdFat::errorPrint (char const * msg)
+
+

Print msg, any SD error code.

+
Parameters
+ + +
[in]msgMessage to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFat::errorPrint_P (PGM_P msg)
+
+

Print msg, any SD error code.

+
Parameters
+ + +
[in]msgMessage in program space (flash memory) to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
bool SdFat::exists (const char * name)
+
+

Test for the existence of a file.

+
Parameters
+ + +
[in]nameName of the file to be tested for.
+
+
+
Returns
true if the file exists else false.
+ +
+
+ +
+
+ + + + + + + +
void SdFat::initErrorHalt ()
+
+

Print error details and halt after SdFat::init() fails.

+ +
+
+ +
+
+ + + + + + + + +
void SdFat::initErrorHalt (char const * msg)
+
+

Print message, error details, and halt after SdFat::init() fails.

+
Parameters
+ + +
[in]msgMessage to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFat::initErrorHalt_P (PGM_P msg)
+
+

Print message, error details, and halt after SdFat::init() fails.

+
Parameters
+ + +
[in]msgMessage in program space (flash memory) to print.
+
+
+ +
+
+ +
+
+ + + + + + + +
void SdFat::initErrorPrint ()
+
+

Print error details after SdFat::init() fails.

+ +
+
+ +
+
+ + + + + + + + +
void SdFat::initErrorPrint (char const * msg)
+
+

Print message and error details and halt after SdFat::init() fails.

+
Parameters
+ + +
[in]msgMessage to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFat::initErrorPrint_P (PGM_P msg)
+
+

Print message and error details after SdFat::init() fails.

+
Parameters
+ + +
[in]msgMessage in program space (flash memory) to print.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFat::ls (uint8_t flags = 0)
+
+

List the directory contents of the volume working directory to stdOut.

+
Parameters
+ + +
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void SdFat::ls (const char * path,
uint8_t flags = 0 
)
+
+

List the directory contents of the volume working directory to stdOut.

+
Parameters
+ + + +
[in]pathdirectory to list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void SdFat::ls (Print * pr,
uint8_t flags = 0 
)
+
+

List the directory contents of the volume working directory.

+
Parameters
+ + + +
[in]prPrint stream for the list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SdFat::ls (Print * pr,
const char * path,
uint8_t flags = 0 
)
+
+

List the directory contents of the volume working directory to stdOut.

+
Parameters
+ + + + +
[in]prPrint stream for the list.
[in]pathdirectory to list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdFat::mkdir (const char * path,
bool pFlag = true 
)
+
+

Make a subdirectory in the volume working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for the subdirectory.
[in]pFlagCreate missing parent directories if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
File SdFat::open (const char * path,
uint8_t mode = FILE_READ 
)
+
+inline
+
+

open a file

+
Parameters
+ + + +
[in]pathlocation of file to be opened.
[in]modeopen mode flags.
+
+
+
Returns
a File object.
+ +
+
+ +
+
+ + + + + + + + +
bool SdFat::remove (const char * path)
+
+

Remove a file from the volume working directory.

+
Parameters
+ + +
[in]pathA path with a valid 8.3 DOS name for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdFat::rename (const char * oldPath,
const char * newPath 
)
+
+

Rename a file or subdirectory.

+
Parameters
+ + + +
[in]oldPathPath name to the file or subdirectory to be renamed.
[in]newPathNew path name of the file or subdirectory.
+
+
+

The newPath object must not exist before the rename call.

+

The file to be renamed must not be open. The directory entry may be moved and file system corruption could occur if the file is accessed by a file object that was opened before the rename() call.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + + + + +
bool SdFat::rmdir (const char * path)
+
+

Remove a subdirectory from the volume's working directory.

+
Parameters
+ + +
[in]pathA path with a valid 8.3 DOS name for the subdirectory.
+
+
+

The subdirectory file will be removed only if it is empty.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SdFat::setStdOut (Print * stream)
+
+inlinestatic
+
+

Set stdOut Print stream for messages.

Parameters
+ + +
[in]streamThe new Print stream.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static Print* SdFat::stdOut ()
+
+inlinestatic
+
+
Returns
Print stream for messages.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdFat::truncate (const char * path,
uint32_t length 
)
+
+

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for the file.
[in]lengthThe desired length for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdVolume* SdFat::vol ()
+
+inline
+
+
Returns
a pointer to the SdVolume object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdBaseFile* SdFat::vwd ()
+
+inline
+
+
Returns
a pointer to the volume working directory.
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/SdFat.h
  • +
  • Arduino/libraries/SdFat/SdFat.cpp
  • +
  • Arduino/libraries/SdFat/SdFatErrorPrint.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_sd_file-members.html b/libs/SdFat-master/html/class_sd_file-members.html new file mode 100755 index 0000000..ed9e968 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_file-members.html @@ -0,0 +1,138 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdFile Member List
+
+
+ +

This is the complete list of members for SdFile, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available()SdFileinline
clearWriteError()SdFileinline
close()SdBaseFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile
curCluster() const SdBaseFileinline
curPosition() const SdBaseFileinline
cwd()SdBaseFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlinestatic
dateTimeCallbackCancel()SdBaseFileinlinestatic
dirEntry(dir_t *dir)SdBaseFile
dirName(const dir_t &dir, char *name)SdBaseFilestatic
exists(const char *name)SdBaseFile
fgets(char *str, int16_t num, char *delim=0)SdBaseFile
fileSize() const SdBaseFileinline
firstCluster() const SdBaseFileinline
flush()SdFileinline
getFilename(char *name)SdBaseFile
getpos(FatPos_t *pos)SdBaseFile
getWriteError()SdFileinline
isDir() const SdBaseFileinline
isFile() const SdBaseFileinline
isOpen() const SdBaseFileinline
isRoot() const SdBaseFileinline
isSubDir() const SdBaseFileinline
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile
ls(uint8_t flags=0)SdBaseFile
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile
open(const char *path, uint8_t oflag=O_READ)SdBaseFile
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile
openRoot(SdVolume *vol)SdBaseFile
peek()SdFileinline
printCreateDateTime(Print *pr)SdBaseFile
printFatDate(uint16_t fatDate)SdBaseFilestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFilestatic
printFatTime(uint16_t fatTime)SdBaseFilestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFilestatic
printField(float value, char term, uint8_t prec=2)SdBaseFile
printField(int16_t value, char term)SdBaseFile
printField(uint16_t value, char term)SdBaseFile
printField(int32_t value, char term)SdBaseFile
printField(uint32_t value, char term)SdBaseFile
printFileSize(Print *pr)SdBaseFile
printModifyDateTime(Print *pr)SdBaseFile
printName()SdBaseFile
printName(Print *pr)SdBaseFile
read()SdFileinline
read(void *buf, size_t nbyte)SdFileinline
readDir(dir_t *dir)SdBaseFile
remove(SdBaseFile *dirFile, const char *path)SdBaseFilestatic
remove()SdBaseFile
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile
rewind()SdBaseFileinline
rmdir()SdBaseFile
rmRfStar()SdBaseFile
SdBaseFile()SdBaseFileinline
SdBaseFile(const char *path, uint8_t oflag)SdBaseFile
SdFile() (defined in SdFile)SdFileinline
SdFile(const char *name, uint8_t oflag)SdFile
seekCur(int32_t offset)SdBaseFileinline
seekEnd(int32_t offset=0)SdBaseFileinline
seekSet(uint32_t pos)SdBaseFile
setpos(FatPos_t *pos)SdBaseFile
sync()SdBaseFile
timestamp(SdBaseFile *file)SdBaseFile
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile
truncate(uint32_t size)SdBaseFile
type() const SdBaseFileinline
volume() const SdBaseFileinline
write(uint8_t b)SdFile
write(const char *str)SdFile
write(const void *buf, size_t nbyte)SdFile
write(const uint8_t *buf, size_t size)SdFileinline
write_P(PGM_P str)SdFile
writeErrorSdBaseFile
writeln_P(PGM_P str)SdFile
+ + + + diff --git a/libs/SdFat-master/html/class_sd_file.html b/libs/SdFat-master/html/class_sd_file.html new file mode 100755 index 0000000..32ba1ed --- /dev/null +++ b/libs/SdFat-master/html/class_sd_file.html @@ -0,0 +1,2784 @@ + + + + + + +SdFat: SdFile Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

SdBaseFile with Arduino Stream. + More...

+ +

#include <SdFile.h>

+
+Inheritance diagram for SdFile:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for SdFile:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

int available ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
void flush ()
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
 SdFile (const char *name, uint8_t oflag)
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
size_t write (uint8_t b)
 
int write (const char *str)
 
int write (const void *buf, size_t nbyte)
 
size_t write (const uint8_t *buf, size_t size)
 
void write_P (PGM_P str)
 
void writeln_P (PGM_P str)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Public Attributes

bool writeError
 
+

Detailed Description

+

SdBaseFile with Arduino Stream.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
SdFile::SdFile (const char * path,
uint8_t oflag 
)
+
+

Create a file object and open it in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int SdFile::available ()
+
+inline
+
+
Returns
number of bytes available from the current position to EOF or INT_MAX if more than INT_MAX bytes are available.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdFile::clearWriteError ()
+
+inline
+
+

Set writeError to zero

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::close ()
+
+inherited
+
+

Close a file and force cached data and directory information to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
uint32_t * endBlock 
)
+
+inherited
+
+

Check for contiguous file and return its raw block range.

+
Parameters
+ + + +
[out]bgnBlockthe first block address for the file.
[out]endBlockthe last block address for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::createContiguous (SdBaseFiledirFile,
const char * path,
uint32_t size 
)
+
+inherited
+
+

Create and open a new contiguous file of a specified size.

+
Note
This function only supports short DOS 8.3 names. See open() for more information.
+
Parameters
+ + + + +
[in]dirFileThe directory where the file will be created.
[in]pathA path with a valid DOS 8.3 file name.
[in]sizeThe desired file size.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curCluster () const
+
+inlineinherited
+
+
Returns
The current cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curPosition () const
+
+inlineinherited
+
+
Returns
The current position for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static SdBaseFile* SdBaseFile::cwd ()
+
+inlinestaticinherited
+
+
Returns
Current working directory
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime)
+
+inlinestaticinherited
+
+

Set the date/time callback function

+
Parameters
+ + +
[in]dateTimeThe user's call back function. The callback function is of the form:
+
+
+
void dateTime(uint16_t* date, uint16_t* time) {
+
uint16_t year;
+
uint8_t month, day, hour, minute, second;
+
+
// User gets date and time from GPS or real-time clock here
+
+
// return date using FAT_DATE macro to format fields
+
*date = FAT_DATE(year, month, day);
+
+
// return time using FAT_TIME macro to format fields
+
*time = FAT_TIME(hour, minute, second);
+
}
+

Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

+

See the timestamp() function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static void SdBaseFile::dateTimeCallbackCancel ()
+
+inlinestaticinherited
+
+

Cancel the date/time callback function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::dirEntry (dir_t * dir)
+
+inherited
+
+

Return a file's directory entry.

+
Parameters
+ + +
[out]dirLocation for return of the file's directory entry.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::dirName (const dir_t & dir,
char * name 
)
+
+staticinherited
+
+

Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

+
Parameters
+ + + +
[in]dirThe directory structure containing the name.
[out]nameA 13 byte char array for the formatted name.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::exists (const char * name)
+
+inherited
+
+

Test for the existence of a file in a directory

+
Parameters
+ + +
[in]nameName of the file to be tested for.
+
+
+

The calling instance must be an open directory file.

+

dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

+
Returns
true if the file exists else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int16_t SdBaseFile::fgets (char * str,
int16_t num,
char * delim = 0 
)
+
+inherited
+
+

Get a string from a file.

+

fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

+

fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

+
Parameters
+ + + + +
[out]strPointer to the array where the string is stored.
[in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
[in]delimOptional set of delimiters. The default is "\n".
+
+
+
Returns
For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::fileSize () const
+
+inlineinherited
+
+
Returns
The total number of bytes in a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::firstCluster () const
+
+inlineinherited
+
+
Returns
The first cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdFile::flush ()
+
+inline
+
+

Ensure that any bytes written to the file are saved to the SD card.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::getFilename (char * name)
+
+inherited
+
+

Get a file's name

+
Parameters
+ + +
[out]nameAn array of 13 characters for the file's name.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::getpos (FatPos_tpos)
+
+inherited
+
+

get position for streams

Parameters
+ + +
[out]posstruct to receive position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdFile::getWriteError ()
+
+inline
+
+
Returns
value of writeError
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isDir () const
+
+inlineinherited
+
+
Returns
True if this is a directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isFile () const
+
+inlineinherited
+
+
Returns
True if this is a normal file else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isOpen () const
+
+inlineinherited
+
+
Returns
True if this is an open file/directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isRoot () const
+
+inlineinherited
+
+
Returns
True if this is the root directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isSubDir () const
+
+inlineinherited
+
+
Returns
True if this is a subdirectory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SdBaseFile::ls (Print * pr,
uint8_t flags = 0,
uint8_t indent = 0 
)
+
+inherited
+
+

List directory contents.

+
Parameters
+ + + +
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+
Parameters
+ + +
[in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::ls (uint8_t flags = 0)
+
+inherited
+
+

List directory contents to stdOut.

+
Parameters
+ + +
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::mkdir (SdBaseFileparent,
const char * path,
bool pFlag = true 
)
+
+inherited
+
+

Make a new directory.

+
Parameters
+ + + + +
[in]parentAn open SdFat instance for the directory that will contain the new directory.
[in]pathA path with a valid 8.3 DOS name for the new directory.
[in]pFlagCreate missing parent directories if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
uint16_t index,
uint8_t oflag 
)
+
+inherited
+
+

Open a file by index.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory.
[in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
const char * path,
uint8_t oflag 
)
+
+inherited
+
+

Open a file or directory by name.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

O_READ - Open for reading.

+

O_RDONLY - Same as O_READ.

+

O_WRITE - Open for writing.

+

O_WRONLY - Same as O_WRITE.

+

O_RDWR - Open for reading and writing.

+

O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

+

O_AT_END - Set the initial position at the end of the file.

+

O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

+

O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

+

O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

+

O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

+

WARNING: A given file must not be opened by more than one SdBaseFile object or file corruption may occur.

+
Note
Directory files must be opened read only. Write and truncation is not allowed for directory files.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (const char * path,
uint8_t oflag = O_READ 
)
+
+inherited
+
+

Open a file in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::openNext (SdBaseFiledirFile,
uint8_t oflag 
)
+
+inherited
+
+

Open the next file or subdirectory in a directory.

+
Parameters
+ + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::openRoot (SdVolumevol)
+
+inherited
+
+

Open a volume's root directory.

+
Parameters
+ + +
[in]volThe FAT volume containing the root directory to be opened.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int SdFile::peek ()
+
+inline
+
+

Return the next available byte without consuming it.

+
Returns
The byte if no error and not at eof else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printCreateDateTime (Print * pr)
+
+inherited
+
+

Print a file's creation date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatDate (uint16_t fatDate)
+
+staticinherited
+
+

Print a directory date field to stdOut.

+

Format is yyyy-mm-dd.

+
Parameters
+ + +
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatDate (Print * pr,
uint16_t fatDate 
)
+
+staticinherited
+
+

Print a directory date field.

+

Format is yyyy-mm-dd.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatTime (uint16_t fatTime)
+
+staticinherited
+
+

Print a directory time field to stdOut.

+

Format is hh:mm:ss.

+
Parameters
+ + +
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatTime (Print * pr,
uint16_t fatTime 
)
+
+staticinherited
+
+

Print a directory time field.

+

Format is hh:mm:ss.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (float value,
char term,
uint8_t prec = 2 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printFileSize (Print * pr)
+
+inherited
+
+

Print a file's size.

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printModifyDateTime (Print * pr)
+
+inherited
+
+

Print a file's modify date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t SdBaseFile::printName ()
+
+inherited
+
+

Print a file's name to stdOut

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printName (Print * pr)
+
+inherited
+
+

Print a file's name

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int SdFile::read ()
+
+inline
+
+

Read the next byte from a file.

+
Returns
For success return the next byte in the file as an int. If an error occurs or end of file is reached return -1.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdFile::read (void * buf,
size_t nbyte 
)
+
+inline
+
+

Read data from a file starting at the current position.

+
Parameters
+ + + +
[out]bufPointer to the location that will receive the data.
[in]nbyteMaximum number of bytes to read.
+
+
+
Returns
For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int8_t SdBaseFile::readDir (dir_t * dir)
+
+inherited
+
+

Read the next directory entry from a directory file.

+
Parameters
+ + +
[out]dirThe dir_t struct that will receive the data.
+
+
+
Returns
For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::remove (SdBaseFiledirFile,
const char * path 
)
+
+staticinherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Parameters
+ + + +
[in]dirFileThe directory that contains the file.
[in]pathPath for the file to be removed.
+
+
+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::remove ()
+
+inherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::rename (SdBaseFiledirFile,
const char * newPath 
)
+
+inherited
+
+

Rename a file or subdirectory.

+
Parameters
+ + + +
[in]dirFileDirectory for the new path.
[in]newPathNew path name for the file/directory.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::rewind ()
+
+inlineinherited
+
+

Set the file's current position to zero.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmdir ()
+
+inherited
+
+

Remove a directory file.

+

The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmRfStar ()
+
+inherited
+
+

Recursively delete a directory and all contained files.

+

This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

+

Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekCur (int32_t offset)
+
+inlineinherited
+
+

Set the files position to current position + pos. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from the current position.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekEnd (int32_t offset = 0)
+
+inlineinherited
+
+

Set the files position to end-of-file + offset. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from end-of-file.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekSet (uint32_t pos)
+
+inherited
+
+

Sets a file's position.

+
Parameters
+ + +
[in]posThe new position in bytes from the beginning of the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::setpos (FatPos_tpos)
+
+inherited
+
+

set position for streams

Parameters
+ + +
[out]posstruct with value for new position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::sync ()
+
+inherited
+
+

The sync() call causes all modified data and directory fields to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::timestamp (SdBaseFilefile)
+
+inherited
+
+

Copy a file's timestamps

+
Parameters
+ + +
[in]fileFile to copy timestamps from.
+
+
+
Note
Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::timestamp (uint8_t flags,
uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour,
uint8_t minute,
uint8_t second 
)
+
+inherited
+
+

Set a file's timestamps in its directory entry.

+
Parameters
+ + +
[in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

T_ACCESS - Set the file's last access date.

+

T_CREATE - Set the file's creation date and time.

+

T_WRITE - Set the file's last write/modification date and time.

+
Parameters
+ + + + + + + +
[in]yearValid range 1980 - 2107 inclusive.
[in]monthValid range 1 - 12 inclusive.
[in]dayValid range 1 - 31 inclusive.
[in]hourValid range 0 - 23 inclusive.
[in]minuteValid range 0 - 59 inclusive.
[in]secondValid range 0 - 59 inclusive
+
+
+
Note
It is possible to set an invalid date since there is no check for the number of days in a month.
+
+Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::truncate (uint32_t length)
+
+inherited
+
+

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

+
Parameters
+ + +
[in]lengthThe desired length for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdBaseFile::type () const
+
+inlineinherited
+
+

Type of file. You should use isFile() or isDir() instead of type() if possible.

+
Returns
The file or directory type.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdVolume* SdBaseFile::volume () const
+
+inlineinherited
+
+
Returns
SdVolume that contains this file.
+ +
+
+ +
+
+ + + + + + + + +
size_t SdFile::write (uint8_t b)
+
+

Write a byte to a file. Required by the Arduino Print class.

Parameters
+ + +
[in]bthe byte to be written. Use getWriteError to check for errors.
+
+
+
Returns
1 for success and 0 for failure.
+ +
+
+ +
+
+ + + + + + + + +
int SdFile::write (const char * str)
+
+

Write a string to a file. Used by the Arduino Print class.

Parameters
+ + +
[in]strPointer to the string. Use getWriteError to check for errors.
+
+
+
Returns
count of characters written for success or -1 for failure.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int SdFile::write (const void * buf,
size_t nbyte 
)
+
+

Write data to an open file.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]nbyteNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t SdFile::write (const uint8_t * buf,
size_t size 
)
+
+inline
+
+

Write data to an open file. Form required by Print.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]sizeNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+ +
+
+ + + + + + + + +
void SdFile::write_P (PGM_P str)
+
+

Write a PROGMEM string to a file.

Parameters
+ + +
[in]strPointer to the PROGMEM string. Use getWriteError to check for errors.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void SdFile::writeln_P (PGM_P str)
+
+

Write a PROGMEM string followed by CR/LF to a file.

Parameters
+ + +
[in]strPointer to the PROGMEM string. Use getWriteError to check for errors.
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool SdBaseFile::writeError
+
+inherited
+
+

writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/SdFile.h
  • +
  • Arduino/libraries/SdFat/SdFile.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_sd_file__coll__graph.png b/libs/SdFat-master/html/class_sd_file__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..ecb6352b4f3a6cc9485ba17eb24f078aa7185755 GIT binary patch literal 2963 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 GKl%@$v#o6a literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_sd_file__inherit__graph.png b/libs/SdFat-master/html/class_sd_file__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..ecb6352b4f3a6cc9485ba17eb24f078aa7185755 GIT binary patch literal 2963 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 GKl%@$v#o6a literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_sd_spi-members.html b/libs/SdFat-master/html/class_sd_spi-members.html new file mode 100755 index 0000000..3e33878 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_spi-members.html @@ -0,0 +1,66 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdSpi Member List
+
+
+ +

This is the complete list of members for SdSpi, including all inherited members.

+ + + + + + + +
begin()SdSpi
init(uint8_t spiDivisor)SdSpi
receive()SdSpi
receive(uint8_t *buf, size_t n)SdSpi
send(uint8_t data)SdSpi
send(const uint8_t *buf, size_t n)SdSpi
+ + + + diff --git a/libs/SdFat-master/html/class_sd_spi.html b/libs/SdFat-master/html/class_sd_spi.html new file mode 100755 index 0000000..02c9998 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_spi.html @@ -0,0 +1,235 @@ + + + + + + +SdFat: SdSpi Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
SdSpi Class Reference
+
+
+ +

SPI class for access to SD and SDHC flash memory cards. + More...

+ +

#include <SdSpi.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

void begin ()
 
void init (uint8_t spiDivisor)
 
uint8_t receive ()
 
uint8_t receive (uint8_t *buf, size_t n)
 
void send (uint8_t data)
 
void send (const uint8_t *buf, size_t n)
 
+

Detailed Description

+

SPI class for access to SD and SDHC flash memory cards.

+

Member Function Documentation

+ +
+
+ + + + + + + +
void SdSpi::begin ()
+
+

Initialize the SPI bus

+ +
+
+ +
+
+ + + + + + + + +
void SdSpi::init (uint8_t spiDivisor)
+
+

Set SPI options for access to SD/SDHC cards.

+
Parameters
+ + +
[in]spiDivisorSCK clock divider relative to the system clock.
+
+
+ +
+
+ +
+
+ + + + + + + +
uint8_t SdSpi::receive ()
+
+

Receive a byte.

+
Returns
The byte.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint8_t SdSpi::receive (uint8_t * buf,
size_t n 
)
+
+

Receive multiple bytes.

+
Parameters
+ + + +
[out]bufBuffer to receive the data.
[in]nNumber of bytes to receive.
+
+
+
Returns
Zero for no error or nonzero error code.
+ +
+
+ +
+
+ + + + + + + + +
void SdSpi::send (uint8_t data)
+
+

Send a byte.

+
Parameters
+ + +
[in]dataByte to send
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void SdSpi::send (const uint8_t * buf,
size_t n 
)
+
+

Send multiple bytes.

+
Parameters
+ + + +
[in]bufBuffer for data to be sent.
[in]nNumber of bytes to send.
+
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • Arduino/libraries/SdFat/SdSpi.h
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_sd_stream_base-members.html b/libs/SdFat-master/html/class_sd_stream_base-members.html new file mode 100755 index 0000000..95184c9 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_stream_base-members.html @@ -0,0 +1,187 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdStreamBase Member List
+
+
+ +

This is the complete list of members for SdStreamBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
available()SdBaseFileinlineprotected
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
clearWriteError()SdBaseFileinlineprotected
close()SdBaseFileprotected
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFileprotected
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFileprotected
cur enum valueios_base
curCluster() const SdBaseFileinlineprotected
curPosition() const SdBaseFileinlineprotected
cwd()SdBaseFileinlineprotectedstatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlineprotectedstatic
dateTimeCallbackCancel()SdBaseFileinlineprotectedstatic
decios_basestatic
dirEntry(dir_t *dir)SdBaseFileprotected
dirName(const dir_t &dir, char *name)SdBaseFileprotectedstatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
exists(const char *name)SdBaseFileprotected
fail() const iosinline
failbitios_basestatic
fgets(char *str, int16_t num, char *delim=0)SdBaseFileprotected
fileSize() const SdBaseFileinlineprotected
fill()ios_baseinline
fill(char c)ios_baseinline
firstCluster() const SdBaseFileinlineprotected
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
getFilename(char *name)SdBaseFileprotected
getpos(FatPos_t *pos)SdBaseFileprotected
getWriteError()SdBaseFileinlineprotected
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
isDir() const SdBaseFileinlineprotected
isFile() const SdBaseFileinlineprotected
isOpen() const SdBaseFileinlineprotected
isRoot() const SdBaseFileinlineprotected
isSubDir() const SdBaseFileinlineprotected
leftios_basestatic
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFileprotected
ls(uint8_t flags=0)SdBaseFileprotected
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFileprotected
octios_basestatic
off_type typedefios_base
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFileprotected
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFileprotected
open(const char *path, uint8_t oflag=O_READ)SdBaseFileprotected
openmode typedefios_base
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFileprotected
openRoot(SdVolume *vol)SdBaseFileprotected
operator const void *() const iosinline
operator!() const iosinline
outios_basestatic
peek()SdBaseFileprotected
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
printCreateDateTime(Print *pr)SdBaseFileprotected
printFatDate(uint16_t fatDate)SdBaseFileprotectedstatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFileprotectedstatic
printFatTime(uint16_t fatTime)SdBaseFileprotectedstatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFileprotectedstatic
printField(float value, char term, uint8_t prec=2)SdBaseFileprotected
printField(int16_t value, char term)SdBaseFileprotected
printField(uint16_t value, char term)SdBaseFileprotected
printField(int32_t value, char term)SdBaseFileprotected
printField(uint32_t value, char term)SdBaseFileprotected
printFileSize(Print *pr)SdBaseFileprotected
printModifyDateTime(Print *pr)SdBaseFileprotected
printName()SdBaseFileprotected
printName(Print *pr)SdBaseFileprotected
rdstate() const iosinline
read()SdBaseFileprotected
read(void *buf, size_t nbyte)SdBaseFileprotected
readDir(dir_t *dir)SdBaseFileprotected
remove(SdBaseFile *dirFile, const char *path)SdBaseFileprotectedstatic
remove()SdBaseFileprotected
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFileprotected
rewind()SdBaseFileinlineprotected
rightios_basestatic
rmdir()SdBaseFileprotected
rmRfStar()SdBaseFileprotected
SdBaseFile()SdBaseFileinlineprotected
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileprotected
seekCur(int32_t offset)SdBaseFileinlineprotected
seekdir enum nameios_base
seekEnd(int32_t offset=0)SdBaseFileinlineprotected
seekSet(uint32_t pos)SdBaseFileprotected
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setpos(FatPos_t *pos)SdBaseFileprotected
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
sync()SdBaseFileprotected
timestamp(SdBaseFile *file)SdBaseFileprotected
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFileprotected
truncios_basestatic
truncate(uint32_t size)SdBaseFileprotected
type() const SdBaseFileinlineprotected
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
volume() const SdBaseFileinlineprotected
width()ios_baseinline
width(unsigned n)ios_baseinline
write(const void *buf, size_t nbyte)SdBaseFileprotected
writeErrorSdBaseFileprotected
+ + + + diff --git a/libs/SdFat-master/html/class_sd_stream_base.html b/libs/SdFat-master/html/class_sd_stream_base.html new file mode 100755 index 0000000..ccf9b23 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_stream_base.html @@ -0,0 +1,3947 @@ + + + + + + +SdFat: SdStreamBase Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Base class for SD streams. + More...

+ +

#include <SdStream.h>

+
+Inheritance diagram for SdStreamBase:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for SdStreamBase:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
bool good () const
 
 operator const void * () const
 
bool operator! () const
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
uint8_t flagsToBase ()
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
int write (const void *buf, size_t nbyte)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Protected Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Protected Attributes

bool writeError
 
+

Detailed Description

+

Base class for SD streams.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::available ()
+
+inlineinherited
+
+
Returns
number of bytes available from yhe current position to EOF
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::clearWriteError ()
+
+inlineinherited
+
+

Set writeError to zero

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::close ()
+
+inherited
+
+

Close a file and force cached data and directory information to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
uint32_t * endBlock 
)
+
+inherited
+
+

Check for contiguous file and return its raw block range.

+
Parameters
+ + + +
[out]bgnBlockthe first block address for the file.
[out]endBlockthe last block address for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::createContiguous (SdBaseFiledirFile,
const char * path,
uint32_t size 
)
+
+inherited
+
+

Create and open a new contiguous file of a specified size.

+
Note
This function only supports short DOS 8.3 names. See open() for more information.
+
Parameters
+ + + + +
[in]dirFileThe directory where the file will be created.
[in]pathA path with a valid DOS 8.3 file name.
[in]sizeThe desired file size.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curCluster () const
+
+inlineinherited
+
+
Returns
The current cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::curPosition () const
+
+inlineinherited
+
+
Returns
The current position for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static SdBaseFile* SdBaseFile::cwd ()
+
+inlinestaticinherited
+
+
Returns
Current working directory
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime)
+
+inlinestaticinherited
+
+

Set the date/time callback function

+
Parameters
+ + +
[in]dateTimeThe user's call back function. The callback function is of the form:
+
+
+
void dateTime(uint16_t* date, uint16_t* time) {
+
uint16_t year;
+
uint8_t month, day, hour, minute, second;
+
+
// User gets date and time from GPS or real-time clock here
+
+
// return date using FAT_DATE macro to format fields
+
*date = FAT_DATE(year, month, day);
+
+
// return time using FAT_TIME macro to format fields
+
*time = FAT_TIME(hour, minute, second);
+
}
+

Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

+

See the timestamp() function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static void SdBaseFile::dateTimeCallbackCancel ()
+
+inlinestaticinherited
+
+

Cancel the date/time callback function.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::dirEntry (dir_t * dir)
+
+inherited
+
+

Return a file's directory entry.

+
Parameters
+ + +
[out]dirLocation for return of the file's directory entry.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::dirName (const dir_t & dir,
char * name 
)
+
+staticinherited
+
+

Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

+
Parameters
+ + + +
[in]dirThe directory structure containing the name.
[out]nameA 13 byte char array for the formatted name.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::exists (const char * name)
+
+inherited
+
+

Test for the existence of a file in a directory

+
Parameters
+ + +
[in]nameName of the file to be tested for.
+
+
+

The calling instance must be an open directory file.

+

dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

+
Returns
true if the file exists else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int16_t SdBaseFile::fgets (char * str,
int16_t num,
char * delim = 0 
)
+
+inherited
+
+

Get a string from a file.

+

fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

+

fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

+
Parameters
+ + + + +
[out]strPointer to the array where the string is stored.
[in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
[in]delimOptional set of delimiters. The default is "\n".
+
+
+
Returns
For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::fileSize () const
+
+inlineinherited
+
+
Returns
The total number of bytes in a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdBaseFile::firstCluster () const
+
+inlineinherited
+
+
Returns
The first cluster number for a file or directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::getFilename (char * name)
+
+inherited
+
+

Get a file's name

+
Parameters
+ + +
[out]nameAn array of 13 characters for the file's name.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::getpos (FatPos_tpos)
+
+inherited
+
+

get position for streams

Parameters
+ + +
[out]posstruct to receive position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::getWriteError ()
+
+inlineinherited
+
+
Returns
value of writeError
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isDir () const
+
+inlineinherited
+
+
Returns
True if this is a directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isFile () const
+
+inlineinherited
+
+
Returns
True if this is a normal file else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isOpen () const
+
+inlineinherited
+
+
Returns
True if this is an open file/directory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isRoot () const
+
+inlineinherited
+
+
Returns
True if this is the root directory.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::isSubDir () const
+
+inlineinherited
+
+
Returns
True if this is a subdirectory else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SdBaseFile::ls (Print * pr,
uint8_t flags = 0,
uint8_t indent = 0 
)
+
+inherited
+
+

List directory contents.

+
Parameters
+ + + +
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+
Parameters
+ + +
[in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::ls (uint8_t flags = 0)
+
+inherited
+
+

List directory contents to stdOut.

+
Parameters
+ + +
[in]flagsThe inclusive OR of
+
+
+

LS_DATE - Print file modification date

+

LS_SIZE - Print file size.

+

LS_R - Recursive list of subdirectories.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::mkdir (SdBaseFileparent,
const char * path,
bool pFlag = true 
)
+
+inherited
+
+

Make a new directory.

+
Parameters
+ + + + +
[in]parentAn open SdFat instance for the directory that will contain the new directory.
[in]pathA path with a valid 8.3 DOS name for the new directory.
[in]pFlagCreate missing parent directories if true.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
uint16_t index,
uint8_t oflag 
)
+
+inherited
+
+

Open a file by index.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory.
[in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (SdBaseFiledirFile,
const char * path,
uint8_t oflag 
)
+
+inherited
+
+

Open a file or directory by name.

+
Parameters
+ + + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

O_READ - Open for reading.

+

O_RDONLY - Same as O_READ.

+

O_WRITE - Open for writing.

+

O_WRONLY - Same as O_WRITE.

+

O_RDWR - Open for reading and writing.

+

O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

+

O_AT_END - Set the initial position at the end of the file.

+

O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

+

O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

+

O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

+

O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

+

WARNING: A given file must not be opened by more than one SdBaseFile object or file corruption may occur.

+
Note
Directory files must be opened read only. Write and truncation is not allowed for directory files.
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::open (const char * path,
uint8_t oflag = O_READ 
)
+
+inherited
+
+

Open a file in the current working directory.

+
Parameters
+ + + +
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::openNext (SdBaseFiledirFile,
uint8_t oflag 
)
+
+inherited
+
+

Open the next file or subdirectory in a directory.

+
Parameters
+ + + +
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
+
+
+

See open() by path for definition of flags.

Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::openRoot (SdVolumevol)
+
+inherited
+
+

Open a volume's root directory.

+
Parameters
+ + +
[in]volThe FAT volume containing the root directory to be opened.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int SdBaseFile::peek ()
+
+inherited
+
+

Return the next available byte without consuming it.

+
Returns
The byte if no error and not at eof else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printCreateDateTime (Print * pr)
+
+inherited
+
+

Print a file's creation date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatDate (uint16_t fatDate)
+
+staticinherited
+
+

Print a directory date field to stdOut.

+

Format is yyyy-mm-dd.

+
Parameters
+ + +
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatDate (Print * pr,
uint16_t fatDate 
)
+
+staticinherited
+
+

Print a directory date field.

+

Format is yyyy-mm-dd.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatDateThe date field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::printFatTime (uint16_t fatTime)
+
+staticinherited
+
+

Print a directory time field to stdOut.

+

Format is hh:mm:ss.

+
Parameters
+ + +
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SdBaseFile::printFatTime (Print * pr,
uint16_t fatTime 
)
+
+staticinherited
+
+

Print a directory time field.

+

Format is hh:mm:ss.

+
Parameters
+ + + +
[in]prPrint stream for output.
[in]fatTimeThe time field from a directory entry.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (float value,
char term,
uint8_t prec = 2 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint16_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (int32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::printField (uint32_t value,
char term 
)
+
+inherited
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator. Use '\n' for CR LF.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printFileSize (Print * pr)
+
+inherited
+
+

Print a file's size.

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::printModifyDateTime (Print * pr)
+
+inherited
+
+

Print a file's modify date and time

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t SdBaseFile::printName ()
+
+inherited
+
+

Print a file's name to stdOut

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t SdBaseFile::printName (Print * pr)
+
+inherited
+
+

Print a file's name

+
Parameters
+ + +
[in]prPrint stream for output.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int16_t SdBaseFile::read ()
+
+inherited
+
+

Read the next byte from a file.

+
Returns
For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::read (void * buf,
size_t nbyte 
)
+
+inherited
+
+

Read data from a file starting at the current position.

+
Parameters
+ + + +
[out]bufPointer to the location that will receive the data.
[in]nbyteMaximum number of bytes to read.
+
+
+
Returns
For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int8_t SdBaseFile::readDir (dir_t * dir)
+
+inherited
+
+

Read the next directory entry from a directory file.

+
Parameters
+ + +
[out]dirThe dir_t struct that will receive the data.
+
+
+
Returns
For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::remove (SdBaseFiledirFile,
const char * path 
)
+
+staticinherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Parameters
+ + + +
[in]dirFileThe directory that contains the file.
[in]pathPath for the file to be removed.
+
+
+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::remove ()
+
+inherited
+
+

Remove a file.

+

The directory entry and all data for the file are deleted.

+
Note
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdBaseFile::rename (SdBaseFiledirFile,
const char * newPath 
)
+
+inherited
+
+

Rename a file or subdirectory.

+
Parameters
+ + + +
[in]dirFileDirectory for the new path.
[in]newPathNew path name for the file/directory.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void SdBaseFile::rewind ()
+
+inlineinherited
+
+

Set the file's current position to zero.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmdir ()
+
+inherited
+
+

Remove a directory file.

+

The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::rmRfStar ()
+
+inherited
+
+

Recursively delete a directory and all contained files.

+

This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

+

Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

+
Note
This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekCur (int32_t offset)
+
+inlineinherited
+
+

Set the files position to current position + pos. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from the current position.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekEnd (int32_t offset = 0)
+
+inlineinherited
+
+

Set the files position to end-of-file + offset. See seekSet().

Parameters
+ + +
[in]offsetThe new position in bytes from end-of-file.
+
+
+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::seekSet (uint32_t pos)
+
+inherited
+
+

Sets a file's position.

+
Parameters
+ + +
[in]posThe new position in bytes from the beginning of the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SdBaseFile::setpos (FatPos_tpos)
+
+inherited
+
+

set position for streams

Parameters
+ + +
[out]posstruct with value for new position
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool SdBaseFile::sync ()
+
+inherited
+
+

The sync() call causes all modified data and directory fields to be written to the storage device.

+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::timestamp (SdBaseFilefile)
+
+inherited
+
+

Copy a file's timestamps

+
Parameters
+ + +
[in]fileFile to copy timestamps from.
+
+
+
Note
Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool SdBaseFile::timestamp (uint8_t flags,
uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour,
uint8_t minute,
uint8_t second 
)
+
+inherited
+
+

Set a file's timestamps in its directory entry.

+
Parameters
+ + +
[in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
+
+
+

T_ACCESS - Set the file's last access date.

+

T_CREATE - Set the file's creation date and time.

+

T_WRITE - Set the file's last write/modification date and time.

+
Parameters
+ + + + + + + +
[in]yearValid range 1980 - 2107 inclusive.
[in]monthValid range 1 - 12 inclusive.
[in]dayValid range 1 - 31 inclusive.
[in]hourValid range 0 - 23 inclusive.
[in]minuteValid range 0 - 59 inclusive.
[in]secondValid range 0 - 59 inclusive
+
+
+
Note
It is possible to set an invalid date since there is no check for the number of days in a month.
+
+Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdBaseFile::truncate (uint32_t length)
+
+inherited
+
+

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

+
Parameters
+ + +
[in]lengthThe desired length for the file.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdBaseFile::type () const
+
+inlineinherited
+
+

Type of file. You should use isFile() or isDir() instead of type() if possible.

+
Returns
The file or directory type.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SdVolume* SdBaseFile::volume () const
+
+inlineinherited
+
+
Returns
SdVolume that contains this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int SdBaseFile::write (const void * buf,
size_t nbyte 
)
+
+inherited
+
+

Write data to an open file.

+
Note
Data is moved to the cache but may not be written to the storage device until sync() is called.
+
Parameters
+ + + +
[in]bufPointer to the location of the data to be written.
[in]nbyteNumber of bytes to write.
+
+
+
Returns
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool SdBaseFile::writeError
+
+inherited
+
+

writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/class_sd_stream_base__coll__graph.png b/libs/SdFat-master/html/class_sd_stream_base__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..916d5abd4450b4c71b1382f09360fe338c9c8f9d GIT binary patch literal 3570 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 Pi34b<>q5&_t^WEC7Te*M literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_sd_stream_base__inherit__graph.png b/libs/SdFat-master/html/class_sd_stream_base__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..b4c89481410f9657012c03f126b1df27328d4f96 GIT binary patch literal 7100 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 + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdVolume Member List
+
+
+ +

This is the complete list of members for SdVolume, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
blocksPerCluster() const SdVolumeinline
blocksPerFat() const SdVolumeinline
cacheClear()SdVolumeinline
clusterCount() const SdVolumeinline
clusterSizeShift() const SdVolumeinline
dataStartBlock() const SdVolumeinline
dbgFat(uint32_t n, uint32_t *v)SdVolumeinline
fatCount() const SdVolumeinline
fatStartBlock() const SdVolumeinline
fatType() const SdVolumeinline
freeClusterCount()SdVolume
init(Sd2Card *dev)SdVolumeinline
init(Sd2Card *dev, uint8_t part)SdVolume
rootDirEntryCount() const SdVolumeinline
rootDirStart() const SdVolumeinline
SdBaseFile (defined in SdVolume)SdVolumefriend
sdCard()SdVolumeinline
SdVolume()SdVolumeinline
+ + + + diff --git a/libs/SdFat-master/html/class_sd_volume.html b/libs/SdFat-master/html/class_sd_volume.html new file mode 100755 index 0000000..3dbc690 --- /dev/null +++ b/libs/SdFat-master/html/class_sd_volume.html @@ -0,0 +1,557 @@ + + + + + + +SdFat: SdVolume Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
SdVolume Class Reference
+
+
+ +

Access FAT16 and FAT32 volumes on SD and SDHC cards. + More...

+ +

#include <SdVolume.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
bool dbgFat (uint32_t n, uint32_t *v)
 
uint8_t fatCount () const
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool init (Sd2Card *dev)
 
bool init (Sd2Card *dev, uint8_t part)
 
uint32_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
Sd2CardsdCard ()
 
 SdVolume ()
 
+ + + +

+Friends

+class SdBaseFile
 
+

Detailed Description

+

Access FAT16 and FAT32 volumes on SD and SDHC cards.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
SdVolume::SdVolume ()
+
+inline
+
+

Create an instance of SdVolume

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdVolume::blocksPerCluster () const
+
+inline
+
+
Returns
The volume's cluster size in blocks.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::blocksPerFat () const
+
+inline
+
+
Returns
The number of blocks in one FAT.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
cache_t* SdVolume::cacheClear ()
+
+inline
+
+

Clear the cache and returns a pointer to the cache. Used by the WaveRP recorder to do raw write to the SD card. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::clusterCount () const
+
+inline
+
+
Returns
The total number of clusters in the volume.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdVolume::clusterSizeShift () const
+
+inline
+
+
Returns
The shift count required to multiply by blocksPerCluster.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::dataStartBlock () const
+
+inline
+
+
Returns
The logical block number for the start of file data.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SdVolume::dbgFat (uint32_t n,
uint32_t * v 
)
+
+inline
+
+

Debug access to FAT table

+
Parameters
+ + + +
[in]ncluster number.
[out]vvalue of entry
+
+
+
Returns
true for success or false for failure
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdVolume::fatCount () const
+
+inline
+
+
Returns
The number of FAT structures on the volume.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::fatStartBlock () const
+
+inline
+
+
Returns
The logical block number for the start of the first FAT.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t SdVolume::fatType () const
+
+inline
+
+
Returns
The FAT type of the volume. Values are 12, 16 or 32.
+ +
+
+ +
+
+ + + + + + + +
int32_t SdVolume::freeClusterCount ()
+
+

Volume free space in clusters.

+
Returns
Count of free clusters for success or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool SdVolume::init (Sd2Carddev)
+
+inline
+
+

Initialize a FAT volume. Try partition one first then try super floppy format.

+
Parameters
+ + +
[in]devThe Sd2Card where the volume is located.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include not finding a valid partition, not finding a valid FAT file system or an I/O error.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool SdVolume::init (Sd2Carddev,
uint8_t part 
)
+
+

Initialize a FAT volume.

+
Parameters
+ + + +
[in]devThe SD card where the volume is located.
[in]partThe partition to be used. Legal values for part are 1-4 to use the corresponding partition on a device formatted with a MBR, Master Boot Record, or zero if the device is formatted as a super floppy with the FAT boot sector in block zero.
+
+
+
Returns
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include not finding a valid partition, not finding a valid FAT file system in the specified partition or an I/O error.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::rootDirEntryCount () const
+
+inline
+
+
Returns
The number of entries in the root directory for FAT16 volumes.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t SdVolume::rootDirStart () const
+
+inline
+
+
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Sd2Card* SdVolume::sdCard ()
+
+inline
+
+

Sd2Card object for this volume

Returns
pointer to Sd2Card object.
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/SdVolume.h
  • +
  • Arduino/libraries/SdFat/SdVolume.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_stdio_stream-members.html b/libs/SdFat-master/html/class_stdio_stream-members.html new file mode 100755 index 0000000..0b61c70 --- /dev/null +++ b/libs/SdFat-master/html/class_stdio_stream-members.html @@ -0,0 +1,172 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
StdioStream Member List
+
+
+ +

This is the complete list of members for StdioStream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available()SdBaseFileinlineprivate
clearerr()StdioStreaminline
clearWriteError()SdBaseFileinlineprivate
close()SdBaseFileprivate
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFileprivate
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFileprivate
curCluster() const SdBaseFileinlineprivate
curPosition() const SdBaseFileinlineprivate
cwd()SdBaseFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlineprivatestatic
dateTimeCallbackCancel()SdBaseFileinlineprivatestatic
dirEntry(dir_t *dir)SdBaseFileprivate
dirName(const dir_t &dir, char *name)SdBaseFileprivatestatic
exists(const char *name)SdBaseFileprivate
fclose()StdioStream
feof()StdioStreaminline
ferror()StdioStreaminline
fflush()StdioStream
fgetc()StdioStreaminline
fgets(char *str, int num, size_t *len=0)StdioStream
SdBaseFile::fgets(char *str, int16_t num, char *delim=0)SdBaseFileprivate
fileSize() const SdBaseFileinlineprivate
firstCluster() const SdBaseFileinlineprivate
fopen(const char *filename, const char *mode)StdioStream
fputc(int c)StdioStreaminline
fputs(const char *str)StdioStream
fputs_P(PGM_P str)StdioStream
fread(void *ptr, size_t size, size_t count)StdioStream
fseek(int32_t offset, int origin)StdioStream
ftell()StdioStream
fwrite(const void *ptr, size_t size, size_t count)StdioStream
getc()StdioStreaminline
getFilename(char *name)SdBaseFileprivate
getpos(FatPos_t *pos)SdBaseFileprivate
getWriteError()SdBaseFileinlineprivate
isDir() const SdBaseFileinlineprivate
isFile() const SdBaseFileinlineprivate
isOpen() const SdBaseFileinlineprivate
isRoot() const SdBaseFileinlineprivate
isSubDir() const SdBaseFileinlineprivate
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFileprivate
ls(uint8_t flags=0)SdBaseFileprivate
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFileprivate
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFileprivate
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFileprivate
open(const char *path, uint8_t oflag=O_READ)SdBaseFileprivate
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFileprivate
openRoot(SdVolume *vol)SdBaseFileprivate
peek()SdBaseFileprivate
print(char c)StdioStreaminline
print(const char *str)StdioStreaminline
print(const __FlashStringHelper *str)StdioStream
print(double val, uint8_t prec=2)StdioStreaminline
print(float val, uint8_t prec=2)StdioStreaminline
print(T val)StdioStreaminline
printCreateDateTime(Print *pr)SdBaseFileprivate
printDec(char n)StdioStreaminline
printDec(signed char n)StdioStream
printDec(unsigned char n)StdioStreaminline
printDec(int16_t n)StdioStream
printDec(uint16_t n)StdioStream
printDec(int32_t n)StdioStream
printDec(uint32_t n)StdioStream
printDec(double value, uint8_t prec)StdioStreaminline
printDec(float value, uint8_t prec)StdioStream
printFatDate(uint16_t fatDate)SdBaseFileprivatestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFileprivatestatic
printFatTime(uint16_t fatTime)SdBaseFileprivatestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFileprivatestatic
printField(double value, char term, uint8_t prec=2)StdioStreaminline
printField(float value, char term, uint8_t prec=2)StdioStreaminline
printField(T value, char term)StdioStreaminline
SdBaseFile::printField(int16_t value, char term)SdBaseFileprivate
SdBaseFile::printField(uint16_t value, char term)SdBaseFileprivate
SdBaseFile::printField(int32_t value, char term)SdBaseFileprivate
SdBaseFile::printField(uint32_t value, char term)SdBaseFileprivate
printFileSize(Print *pr)SdBaseFileprivate
printHex(uint32_t n)StdioStream
printHexln(uint32_t n)StdioStreaminline
println()StdioStreaminline
println(double val, uint8_t prec=2)StdioStreaminline
println(float val, uint8_t prec=2)StdioStreaminline
println(T val)StdioStreaminline
printModifyDateTime(Print *pr)SdBaseFileprivate
printName()SdBaseFileprivate
printName(Print *pr)SdBaseFileprivate
putc(int c)StdioStreaminline
putCRLF()StdioStreaminline
read()SdBaseFileprivate
read(void *buf, size_t nbyte)SdBaseFileprivate
readDir(dir_t *dir)SdBaseFileprivate
remove(SdBaseFile *dirFile, const char *path)SdBaseFileprivatestatic
remove()SdBaseFileprivate
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFileprivate
rewind()StdioStream
rmdir()SdBaseFileprivate
rmRfStar()SdBaseFileprivate
SdBaseFile()SdBaseFileinlineprivate
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileprivate
seekCur(int32_t offset)SdBaseFileinlineprivate
seekEnd(int32_t offset=0)SdBaseFileinlineprivate
seekSet(uint32_t pos)SdBaseFileprivate
setpos(FatPos_t *pos)SdBaseFileprivate
StdioStream()StdioStreaminline
sync()SdBaseFileprivate
timestamp(SdBaseFile *file)SdBaseFileprivate
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFileprivate
truncate(uint32_t size)SdBaseFileprivate
type() const SdBaseFileinlineprivate
ungetc(int c)StdioStream
volume() const SdBaseFileinlineprivate
writeErrorSdBaseFileprivate
+ + + + diff --git a/libs/SdFat-master/html/class_stdio_stream.html b/libs/SdFat-master/html/class_stdio_stream.html new file mode 100755 index 0000000..8858389 --- /dev/null +++ b/libs/SdFat-master/html/class_stdio_stream.html @@ -0,0 +1,1732 @@ + + + + + + +SdFat: StdioStream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

StdioStream implements a minimal stdio stream. + More...

+ +

#include <StdioStream.h>

+
+Inheritance diagram for StdioStream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for StdioStream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void clearerr ()
 
int fclose ()
 
int feof ()
 
int ferror ()
 
int fflush ()
 
int fgetc ()
 
char * fgets (char *str, int num, size_t *len=0)
 
bool fopen (const char *filename, const char *mode)
 
int fputc (int c)
 
int fputs (const char *str)
 
int fputs_P (PGM_P str)
 
size_t fread (void *ptr, size_t size, size_t count)
 
int fseek (int32_t offset, int origin)
 
int32_t ftell ()
 
size_t fwrite (const void *ptr, size_t size, size_t count)
 
int getc ()
 
size_t print (char c)
 
size_t print (const char *str)
 
size_t print (const __FlashStringHelper *str)
 
size_t print (double val, uint8_t prec=2)
 
size_t print (float val, uint8_t prec=2)
 
template<typename T >
size_t print (T val)
 
int printDec (char n)
 
int printDec (signed char n)
 
int printDec (unsigned char n)
 
int printDec (int16_t n)
 
int printDec (uint16_t n)
 
int printDec (int32_t n)
 
int printDec (uint32_t n)
 
int printDec (double value, uint8_t prec)
 
int printDec (float value, uint8_t prec)
 
int printField (double value, char term, uint8_t prec=2)
 
int printField (float value, char term, uint8_t prec=2)
 
template<typename T >
int printField (T value, char term)
 
int printHex (uint32_t n)
 
int printHexln (uint32_t n)
 
size_t println ()
 
size_t println (double val, uint8_t prec=2)
 
size_t println (float val, uint8_t prec=2)
 
template<typename T >
size_t println (T val)
 
int putc (int c)
 
int putCRLF ()
 
bool rewind ()
 
 StdioStream ()
 
int ungetc (int c)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
+ + + + + + + + + + + + + + + + + + + +

+Static Private Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Private Attributes

bool writeError
 
+

Detailed Description

+

StdioStream implements a minimal stdio stream.

+

StdioStream does not support subdirectories or long file names.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
StdioStream::StdioStream ()
+
+inline
+
+

Constructor

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void StdioStream::clearerr ()
+
+inline
+
+

Clear the stream's end-of-file and error indicators.

+ +
+
+ +
+
+ + + + + + + +
int StdioStream::fclose ()
+
+

Close a stream.

+

A successful call to the fclose function causes the stream to be flushed and the associated file to be closed. Any unwritten buffered data is written to the file; any unread buffered data is discarded. Whether or not the call succeeds, the stream is disassociated from the file.

+
Returns
zero if the stream was successfully closed, or EOF if any any errors are detected.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int StdioStream::feof ()
+
+inline
+
+

Test the stream's end-of-file indicator.

Returns
non-zero if and only if the end-of-file indicator is set.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int StdioStream::ferror ()
+
+inline
+
+

Test the stream's error indicator.

Returns
return non-zero if and only if the error indicator is set.
+ +
+
+ +
+
+ + + + + + + +
int StdioStream::fflush ()
+
+

Flush the stream.

+

If stream is an output stream or an update stream in which the most recent operation was not input, any unwritten data is written to the file; otherwise the call is an error since any buffered input data would be lost.

+
Returns
sets the error indicator for the stream and returns EOF if an error occurs, otherwise it returns zero.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int StdioStream::fgetc ()
+
+inline
+
+

Get a byte from the stream.

+
Returns
If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the fgetc function returns the next character from the input stream.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char * StdioStream::fgets (char * str,
int num,
size_t * len = 0 
)
+
+

Get a string from a stream.

+

The fgets function reads at most one less than the number of characters specified by num from the stream into the array pointed to by str. No additional characters are read after a new-line character (which is retained) or after end-of-file. A null character is written immediately after the last character read into the array.

+
Parameters
+ + + + +
[out]strPointer to an array of where the string is copied.
[in]numMaximum number of characters including the null character.
[out]lenIf len is not null and fgets is successful, the length of the string is returned.
+
+
+
Returns
str if successful. If end-of-file is encountered and no characters have been read into the array, the contents of the array remain unchanged and a null pointer is returned. If a read error occurs during the operation, the array contents are indeterminate and a null pointer is returned.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool StdioStream::fopen (const char * filename,
const char * mode 
)
+
+

Open a stream.

+

Open a file and associates the stream with it.

+
Parameters
+ + + +
[in]filenamename of the file to be opened.
[in]modea string that indicates the open mode.
+
+
+ + + + + + + + + + + + + + + + + +
"r" or "rb" Open a file for reading. The file must exist.
"w" or "wb" Truncate an existing to zero length or create an empty file for writing.
"wx" or "wbx" Create a file for writing. Fails if the file already exists.
"a" or "ab" Append; open or create file for writing at end-of-file.
"r+" or "rb+" or "r+b" Open a file for update (reading and writing).
"w+" or "w+b" or "wb+" Truncate an existing to zero length or create a file for update.
"w+x" or "w+bx" or "wb+x" Create a file for update. Fails if the file already exists.
"a+" or "a+b" or "ab+" Append; open or create a file for update, writing at end-of-file.
+

The character 'b' shall have no effect, but is allowed for ISO C standard conformance.

+

Opening a file with append mode causes all subsequent writes to the file to be forced to the then current end-of-file, regardless of intervening calls to the fseek function.

+

When a file is opened with update mode, both input and output may be performed on the associated stream. However, output shall not be directly followed by input without an intervening call to the fflush function or to a file positioning function (fseek, or rewind), and input shall not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters endof-file.

+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int StdioStream::fputc (int c)
+
+inline
+
+

Write a byte to a stream.

+
Parameters
+ + +
[in]cthe byte to be written (converted to an unsigned char).
+
+
+
Returns
Upon successful completion, fputc() returns the value it has written. Otherwise, it returns EOF and sets the error indicator for the stream.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::fputs (const char * str)
+
+

Write a string to a stream.

+
Parameters
+ + +
[in]stra pointer to the string to be written.
+
+
+
Returns
for success, fputs() returns a non-negative number. Otherwise, it returns EOF and sets the error indicator for the stream.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::fputs_P (PGM_P str)
+
+

Write a string stored in flash.

+
Parameters
+ + +
[in]strstring to be written.
+
+
+
Returns
for success, fputs() returns a non-negative number. Otherwise, it returns EOF and sets the error indicator for the stream.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
size_t StdioStream::fread (void * ptr,
size_t size,
size_t count 
)
+
+

Binary input.

+

Reads an array of up to count elements, each one with a size of size bytes.

Parameters
+ + + + +
[out]ptrpointer to area of at least (size*count) bytes where the data will be stored.
[in]sizethe size, in bytes, of each element to be read.
[in]countthe number of elements to be read.
+
+
+
Returns
number of elements successfully read, which may be less than count if a read error or end-of-file is encountered. If size or count is zero, fread returns zero and the contents of the array and the state of the stream remain unchanged.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int StdioStream::fseek (int32_t offset,
int origin 
)
+
+

Set the file position for the stream.

+
Parameters
+ + + +
[in]offsetnumber of offset from the origin.
[in]originposition used as reference for the offset. It is specified by one of the following constants.
+
+
+

SEEK_SET - Beginning of file.

+

SEEK_CUR - Current position of the file pointer.

+

SEEK_END - End of file.

+
Returns
zero for success. Otherwise, it returns non-zero and sets the error indicator for the stream.
+ +
+
+ +
+
+ + + + + + + +
int32_t StdioStream::ftell ()
+
+

Get the current position in a stream.

+
Returns
If successful, ftell return the current value of the position indicator. On failure, ftell returns −1L.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
size_t StdioStream::fwrite (const void * ptr,
size_t size,
size_t count 
)
+
+

Binary output.

+

Writes an array of up to count elements, each one with a size of size bytes.

Parameters
+ + + + +
[in]ptrpointer to (size*count) bytes of data to be written.
[in]sizethe size, in bytes, of each element to be written.
[in]countthe number of elements to be written.
+
+
+
Returns
number of elements successfully written. if this number is less than count, an error has occured. If size or count is zero, fwrite returns zero.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int StdioStream::getc ()
+
+inline
+
+

Get a byte from the stream.

+

getc and fgetc are equivalent but getc is inline so it is faster but require more flash memory.

+
Returns
If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the fgetc function returns the next character from the input stream.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t StdioStream::print (char c)
+
+inline
+
+

Write a character.

Parameters
+ + +
[in]cthe character to write.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t StdioStream::print (const char * str)
+
+inline
+
+

Write a string.

+
Parameters
+ + +
[in]strthe string to be written.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + + + + +
size_t StdioStream::print (const __FlashStringHelper * str)
+
+

Print a string stored in flash memory.

+
Parameters
+ + +
[in]strthe string to print.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t StdioStream::print (double val,
uint8_t prec = 2 
)
+
+inline
+
+

Print a floating point number.

+
Parameters
+ + + +
[in]precNumber of digits after decimal point.
[in]valthe number to be printed.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t StdioStream::print (float val,
uint8_t prec = 2 
)
+
+inline
+
+

Print a floating point number.

+
Parameters
+ + + +
[in]precNumber of digits after decimal point.
[in]valthe number to be printed.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
size_t StdioStream::print (val)
+
+inline
+
+

Print a number.

+
Parameters
+ + +
[in]valthe number to be printed.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int StdioStream::printDec (char n)
+
+inline
+
+

Print a char as a number.

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printDec (signed char n)
+
+

print a signed 8-bit integer

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int StdioStream::printDec (unsigned char n)
+
+inline
+
+

Print an unsigned 8-bit number.

Parameters
+ + +
[in]nnumber to be print.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printDec (int16_t n)
+
+

Print a int16_t

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printDec (uint16_t n)
+
+

print a uint16_t.

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printDec (int32_t n)
+
+

Print a signed 32-bit integer.

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printDec (uint32_t n)
+
+

Write an unsigned 32-bit number.

Parameters
+ + +
[in]nnumber to be printed.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int StdioStream::printDec (double value,
uint8_t prec 
)
+
+inline
+
+

Print a double.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int StdioStream::printDec (float value,
uint8_t prec 
)
+
+

Print a float.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int StdioStream::printField (double value,
char term,
uint8_t prec = 2 
)
+
+inline
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int StdioStream::printField (float value,
char term,
uint8_t prec = 2 
)
+
+inline
+
+

Print a number followed by a field terminator.

Parameters
+ + + + +
[in]valueThe number to be printed.
[in]termThe field terminator.
[in]precNumber of digits after decimal point.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int StdioStream::printField (value,
char term 
)
+
+inline
+
+

Print a number followed by a field terminator.

Parameters
+ + + +
[in]valueThe number to be printed.
[in]termThe field terminator.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::printHex (uint32_t n)
+
+

Print HEX

Parameters
+ + +
[in]nnumber to be printed as HEX.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int StdioStream::printHexln (uint32_t n)
+
+inline
+
+

Print HEX with CRLF

Parameters
+ + +
[in]nnumber to be printed as HEX.
+
+
+
Returns
The number of bytes written or -1 if an error occurs.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t StdioStream::println ()
+
+inline
+
+

Write a CR/LF.

+
Returns
two, the number of bytes written, for success or zero for failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t StdioStream::println (double val,
uint8_t prec = 2 
)
+
+inline
+
+

Print a floating point number followed by CR/LF.

+
Parameters
+ + + +
[in]valthe number to be printed.
[in]precNumber of digits after decimal point.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t StdioStream::println (float val,
uint8_t prec = 2 
)
+
+inline
+
+

Print a floating point number followed by CR/LF.

+
Parameters
+ + + +
[in]valthe number to be printed.
[in]precNumber of digits after decimal point.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
size_t StdioStream::println (val)
+
+inline
+
+

Print an item followed by CR/LF

+
Parameters
+ + +
[in]valthe item to be printed.
+
+
+
Returns
the number of bytes written.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int StdioStream::putc (int c)
+
+inline
+
+

Write a byte to a stream.

+

putc and fputc are equivalent but putc is inline so it is faster but require more flash memory.

+
Parameters
+ + +
[in]cthe byte to be written (converted to an unsigned char).
+
+
+
Returns
Upon successful completion, fputc() returns the value it has written. Otherwise, it returns EOF and sets the error indicator for the stream.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int StdioStream::putCRLF ()
+
+inline
+
+

Write a CR/LF.

+
Returns
two, the number of bytes written, for success or -1 for failure.
+ +
+
+ +
+
+ + + + + + + +
bool StdioStream::rewind ()
+
+

Set position of a stream to the beginning.

+

The rewind function sets the file position to the beginning of the file. It is equivalent to fseek(0L, SEEK_SET) except that the error indicator for the stream is also cleared.

+
Returns
true for success or false for failure.
+ +
+
+ +
+
+ + + + + + + + +
int StdioStream::ungetc (int c)
+
+

Push a byte back into an input stream.

+
Parameters
+ + +
[in]cthe byte (converted to an unsigned char) to be pushed back.
+
+
+

One character of pushback is guaranteed. If the ungetc function is called too many times without an intervening read or file positioning operation on that stream, the operation may fail.

+

A successful intervening call to a file positioning function (fseek, fsetpos, or rewind) discards any pushed-back characters for the stream.

+
Returns
Upon successful completion, ungetc() returns the byte pushed back after conversion. Otherwise it returns EOF.
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/StdioStream.h
  • +
  • Arduino/libraries/SdFat/StdioStream.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/class_stdio_stream__coll__graph.png b/libs/SdFat-master/html/class_stdio_stream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..f993a00bec30a267c1113dabaf51247d35e39ed4 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0vp^89-dX!3HEh%`^=MQfx`y?k)`fL2$v|<&zm0SXO$v zIEGZrc{|rW|A~u4dwtyRC9NVFK|4C`3VUd0e3K5?7(K6rh1L7$Ql~2%QoAO+o8Z?W z*6BZ?ro;ERxd(H^f;nOq6O_6f4yDr{&>Ifx7TOiXX?$8Jiq7L+e-V&HM81Bp?VGLx2=6>ee~z8pHJTI zIbIMJ@VnZ=tl3uln{Ot+vMCVjjV|AF?2GNuTw4(p8JORk9S<#3csQk!@7IZH zkt1I77DzNOeJJ(bX!7jrTv>(#+ow;Lbr0fXeZU^Q^hEr|>klP3>ZN+?7#mJs&H7)g z@X|s>J?E@ciJjbelMU<%`RO+EN@e@Cx48vOQekIK;7#CN%fGAdxM=jmNBj1azi*wb z^3#?fj)j5uk0dW!^?aMUKjGImnx<-}1uVMqSK;d{9|j)brSHlmCu?tWn!sk~kQKb3 z@yY#7_b&ey`CedDskvv@FWv)leXd6Fw(Hl69j`ADoUUDE-@NGc>+(dq{(}#G{hGV& zaiQ;fR@DQ|bNW5yw@CG{SIvF2Z&!7By{xNtMBWyLfQx6({&=kJ-}AoyTVve$1*Iao z3$}hWXN$`ITQ0KqdYaF=ms=GwY6VyvGuHAq6Ed3<4|%Ls$8zdVT$7v%SlG@x_meFP`{O%Urwk ze)a|3hNc!sU#oNhuLRp3 ze)n2wekt|X{;QiKbPVSDMRRpC9JqN?($CMYp-1@f>8+Pvifq2QrgejdU`#W@jdN<4 zkJs4MuglpP6J}L++3xS=_l3V5k{!2kM}1!uKJjr;%u0i!oX2M`_!2wkU-{u0JM(24 z(bmDYS3SOU>Qj>8)uq1;zdoIGOfzq1jGb_Z+0vX>m!IA=Nl|{k!|L&@W9Pb0hoxJy z%dfn8QcY31V%wS*H+GfB&Mk~x+qz8p5c|3P?rT@G?s~Vw)p$qtp0|%`9%scw%P*U9 zjrGpar5ik76scL>S6OoU@)O+;slWZcN2cG|_18R7eRk3xn-?EGOprIaBt Y|L#rDXv?r}0v2Nop00i_>zopr01bal@&Et; literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/class_stdio_stream__inherit__graph.png b/libs/SdFat-master/html/class_stdio_stream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..f993a00bec30a267c1113dabaf51247d35e39ed4 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0vp^89-dX!3HEh%`^=MQfx`y?k)`fL2$v|<&zm0SXO$v zIEGZrc{|rW|A~u4dwtyRC9NVFK|4C`3VUd0e3K5?7(K6rh1L7$Ql~2%QoAO+o8Z?W z*6BZ?ro;ERxd(H^f;nOq6O_6f4yDr{&>Ifx7TOiXX?$8Jiq7L+e-V&HM81Bp?VGLx2=6>ee~z8pHJTI zIbIMJ@VnZ=tl3uln{Ot+vMCVjjV|AF?2GNuTw4(p8JORk9S<#3csQk!@7IZH zkt1I77DzNOeJJ(bX!7jrTv>(#+ow;Lbr0fXeZU^Q^hEr|>klP3>ZN+?7#mJs&H7)g z@X|s>J?E@ciJjbelMU<%`RO+EN@e@Cx48vOQekIK;7#CN%fGAdxM=jmNBj1azi*wb z^3#?fj)j5uk0dW!^?aMUKjGImnx<-}1uVMqSK;d{9|j)brSHlmCu?tWn!sk~kQKb3 z@yY#7_b&ey`CedDskvv@FWv)leXd6Fw(Hl69j`ADoUUDE-@NGc>+(dq{(}#G{hGV& zaiQ;fR@DQ|bNW5yw@CG{SIvF2Z&!7By{xNtMBWyLfQx6({&=kJ-}AoyTVve$1*Iao z3$}hWXN$`ITQ0KqdYaF=ms=GwY6VyvGuHAq6Ed3<4|%Ls$8zdVT$7v%SlG@x_meFP`{O%Urwk ze)a|3hNc!sU#oNhuLRp3 ze)n2wekt|X{;QiKbPVSDMRRpC9JqN?($CMYp-1@f>8+Pvifq2QrgejdU`#W@jdN<4 zkJs4MuglpP6J}L++3xS=_l3V5k{!2kM}1!uKJjr;%u0i!oX2M`_!2wkU-{u0JM(24 z(bmDYS3SOU>Qj>8)uq1;zdoIGOfzq1jGb_Z+0vX>m!IA=Nl|{k!|L&@W9Pb0hoxJy z%dfn8QcY31V%wS*H+GfB&Mk~x+qz8p5c|3P?rT@G?s~Vw)p$qtp0|%`9%scw%P*U9 zjrGpar5ik76scL>S6OoU@)O+;slWZcN2cG|_18R7eRk3xn-?EGOprIaBt Y|L#rDXv?r}0v2Nop00i_>zopr01bal@&Et; literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classes.html b/libs/SdFat-master/html/classes.html new file mode 100755 index 0000000..262d804 --- /dev/null +++ b/libs/SdFat-master/html/classes.html @@ -0,0 +1,83 @@ + + + + + + +SdFat: Class Index + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Class Index
+
+
+
A | C | F | I | M | O | P | S
+ + + + + + + + + + + + + +
  A  
+
  S  
+
StdioStream   ifstream   ostream   
  c  
+
ios   
  p  
+
ArduinoInStream   Sd2Card   ios_base   
ArduinoOutStream   SdBaseFile   cache_t   iostream   pgm   
  F  
+
SdFat   
  f  
+
istream   
  s  
+
SdFile   
  o  
+
FatPos_t   SdSpi   fstream   setfill   
File   SdStreamBase   
  i  
+
obufstream   setprecision   
  M  
+
SdVolume   ofstream   setw   
ibufstream   
MinimumSerial   
+
A | C | F | I | M | O | P | S
+
+ + + + diff --git a/libs/SdFat-master/html/classfstream-members.html b/libs/SdFat-master/html/classfstream-members.html new file mode 100755 index 0000000..f43269e --- /dev/null +++ b/libs/SdFat-master/html/classfstream-members.html @@ -0,0 +1,247 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
fstream Member List
+
+
+ +

This is the complete list of members for fstream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
available()SdBaseFileinlineprivate
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)fstreaminline
clearWriteError()SdBaseFileinlineprivate
close()fstreaminline
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFileprivate
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFileprivate
cur enum valueios_base
curCluster() const SdBaseFileinlineprivate
curPosition() const SdBaseFileinlineprivate
cwd()SdBaseFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlineprivatestatic
dateTimeCallbackCancel()SdBaseFileinlineprivatestatic
decios_basestatic
dirEntry(dir_t *dir)SdBaseFileprivate
dirName(const dir_t &dir, char *name)SdBaseFileprivatestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
exists(const char *name)SdBaseFileprivate
fail() const iosinline
failbitios_basestatic
fgets(char *str, int16_t num, char *delim=0)SdBaseFileprivate
fileSize() const SdBaseFileinlineprivate
fill()ios_baseinline
fill(char c)ios_baseinline
firstCluster() const SdBaseFileinlineprivate
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
fstream() (defined in fstream)fstreaminline
fstream(const char *path, openmode mode=in|out)fstreaminlineexplicit
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getFilename(char *name)SdBaseFileprivate
getline(char *str, streamsize count, char delim= '\n')istream
getpos(FatPos_t *pos)SdBaseFileprivate
getWriteError()SdBaseFileinlineprivate
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
is_open()fstreaminline
isDir() const SdBaseFileinlineprivate
isFile() const SdBaseFileinlineprivate
isOpen() const SdBaseFileinlineprivate
isRoot() const SdBaseFileinlineprivate
isSubDir() const SdBaseFileinlineprivate
istream() (defined in istream)istreaminline
leftios_basestatic
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFileprivate
ls(uint8_t flags=0)SdBaseFileprivate
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFileprivate
octios_basestatic
off_type typedefios_base
open(const char *path, openmode mode=in|out)fstreaminline
SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFileprivate
SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFileprivate
openmode typedefios_base
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFileprivate
openRoot(SdVolume *vol)SdBaseFileprivate
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
iostream::peek()istream
SdStreamBase::peek()SdBaseFileprivate
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
printCreateDateTime(Print *pr)SdBaseFileprivate
printFatDate(uint16_t fatDate)SdBaseFileprivatestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFileprivatestatic
printFatTime(uint16_t fatTime)SdBaseFileprivatestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFileprivatestatic
printField(float value, char term, uint8_t prec=2)SdBaseFileprivate
printField(int16_t value, char term)SdBaseFileprivate
printField(uint16_t value, char term)SdBaseFileprivate
printField(int32_t value, char term)SdBaseFileprivate
printField(uint32_t value, char term)SdBaseFileprivate
printFileSize(Print *pr)SdBaseFileprivate
printModifyDateTime(Print *pr)SdBaseFileprivate
printName()SdBaseFileprivate
printName(Print *pr)SdBaseFileprivate
put(char ch)ostreaminline
rdstate() const iosinline
read()SdBaseFileprivate
read(void *buf, size_t nbyte)SdBaseFileprivate
readDir(dir_t *dir)SdBaseFileprivate
remove(SdBaseFile *dirFile, const char *path)SdBaseFileprivatestatic
remove()SdBaseFileprivate
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFileprivate
rewind()SdBaseFileinlineprivate
rightios_basestatic
rmdir()SdBaseFileprivate
rmRfStar()SdBaseFileprivate
SdBaseFile()SdBaseFileinlineprivate
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileprivate
seekCur(int32_t offset)SdBaseFileinlineprivate
seekdir enum nameios_base
seekEnd(int32_t offset=0)SdBaseFileinlineprivate
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
seekSet(uint32_t pos)SdBaseFileprivate
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setpos(FatPos_t *pos)SdBaseFileprivate
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
sync()SdBaseFileprivate
tellg()istreaminline
tellp()ostreaminline
timestamp(SdBaseFile *file)SdBaseFileprivate
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFileprivate
truncios_basestatic
truncate(uint32_t size)SdBaseFileprivate
type() const SdBaseFileinlineprivate
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
volume() const SdBaseFileinlineprivate
width()ios_baseinline
width(unsigned n)ios_baseinline
write(const void *buf, size_t nbyte)SdBaseFileprivate
writeErrorSdBaseFileprivate
+ + + + diff --git a/libs/SdFat-master/html/classfstream.html b/libs/SdFat-master/html/classfstream.html new file mode 100755 index 0000000..e6b1de9 --- /dev/null +++ b/libs/SdFat-master/html/classfstream.html @@ -0,0 +1,3593 @@ + + + + + + +SdFat: fstream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

SD file input/output stream. + More...

+ +

#include <SdStream.h>

+
+Inheritance diagram for fstream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for fstream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
void close ()
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
 fstream (const char *path, openmode mode=in|out)
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
istreamignore (streamsize n=1, int delim=-1)
 
bool is_open ()
 
void open (const char *path, openmode mode=in|out)
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
int write (const void *buf, size_t nbyte)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Private Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Private Attributes

bool writeError
 
+

Detailed Description

+

SD file input/output stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fstream::fstream (const char * path,
openmode mode = in | out 
)
+
+inlineexplicit
+
+

Constructor with open

+
Parameters
+ + + +
[in]pathpath to open
[in]modeopen mode
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void fstream::clear (iostate state = goodbit)
+
+inline
+
+

Clear state and writeError

Parameters
+ + +
[in]statenew state for stream
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void fstream::close ()
+
+inline
+
+

Close a file and force cached data and directory information to be written to the storage device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inlineinherited
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inlineinherited
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::get ()
+
+inherited
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream & istream::get (char & c)
+
+inherited
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+inherited
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool fstream::is_open ()
+
+inline
+
+
Returns
True if stream is open else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void fstream::open (const char * path,
openmode mode = in | out 
)
+
+inline
+
+

Open a fstream

Parameters
+ + + +
[in]pathfile to open
[in]modeopen mode
+
+
+

Valid open modes are (at end, ios::ate, and/or ios::binary may be added):

+

ios::in - Open file for reading.

+

ios::out or ios::out | ios::trunc - Truncate to 0 length, if existent, or create a file for writing only.

+

ios::app or ios::out | ios::app - Append; open or create file for writing at end-of-file.

+

ios::in | ios::out - Open file for update (reading and writing).

+

ios::in | ios::out | ios::trunc - Truncate to zero length, if existent, or create file for update.

+

ios::in | ios::app or ios::in | ios::out | ios::app - Append; open or create text file for update, writing at end of file.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inlineinherited
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inlineinherited
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inlineinherited
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inlineinherited
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inlineinherited
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inlineinherited
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inlineinherited
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inlineinherited
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inlineinherited
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inlineinherited
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inlineinherited
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inlineinherited
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inlineinherited
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inlineinherited
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inlineinherited
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inlineinherited
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inlineinherited
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inlineinherited
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inlineinherited
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::peek ()
+
+inherited
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inlineinherited
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void istream::skipWhite ()
+
+inherited
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classfstream__coll__graph.png b/libs/SdFat-master/html/classfstream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..4ae8422b67243d58b4ee4da2e113959e4f035720 GIT binary patch literal 10401 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 + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ibufstream Member List
+
+
+ +

This is the complete list of members for ibufstream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getline(char *str, streamsize count, char delim= '\n')istream
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ibufstream()ibufstreaminline
ibufstream(const char *str)ibufstreaminlineexplicit
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
init(const char *str)ibufstreaminline
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
outios_basestatic
peek()istream
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
tellg()istreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classibufstream.html b/libs/SdFat-master/html/classibufstream.html new file mode 100755 index 0000000..8a58ebe --- /dev/null +++ b/libs/SdFat-master/html/classibufstream.html @@ -0,0 +1,2569 @@ + + + + + + +SdFat: ibufstream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

parse a char string + More...

+ +

#include <bufstream.h>

+
+Inheritance diagram for ibufstream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ibufstream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
 ibufstream ()
 
 ibufstream (const char *str)
 
istreamignore (streamsize n=1, int delim=-1)
 
void init (const char *str)
 
 operator const void * () const
 
bool operator! () const
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

parse a char string

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ibufstream::ibufstream ()
+
+inline
+
+

Constructor

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ibufstream::ibufstream (const char * str)
+
+inlineexplicit
+
+

Constructor

Parameters
+ + +
[in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inlineinherited
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::get ()
+
+inherited
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream & istream::get (char & c)
+
+inherited
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+inherited
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ibufstream::init (const char * str)
+
+inline
+
+

Initialize an ibufstream

Parameters
+ + +
[in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inlineinherited
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inlineinherited
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inlineinherited
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inlineinherited
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inlineinherited
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inlineinherited
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inlineinherited
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::peek ()
+
+inherited
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void istream::skipWhite ()
+
+inherited
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classibufstream__coll__graph.png b/libs/SdFat-master/html/classibufstream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..8678cc9bb4e16044c13bfc727e89b4dbf3689f0e GIT binary patch literal 2488 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classibufstream__inherit__graph.png b/libs/SdFat-master/html/classibufstream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..5b2c2ed78266596e00e098c981d734277d803fa4 GIT binary patch literal 3430 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classifstream-members.html b/libs/SdFat-master/html/classifstream-members.html new file mode 100755 index 0000000..72c7405 --- /dev/null +++ b/libs/SdFat-master/html/classifstream-members.html @@ -0,0 +1,221 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ifstream Member List
+
+
+ +

This is the complete list of members for ifstream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
available()SdBaseFileinlineprivate
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
clearWriteError()SdBaseFileinlineprivate
close()ifstreaminline
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFileprivate
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFileprivate
cur enum valueios_base
curCluster() const SdBaseFileinlineprivate
curPosition() const SdBaseFileinlineprivate
cwd()SdBaseFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlineprivatestatic
dateTimeCallbackCancel()SdBaseFileinlineprivatestatic
decios_basestatic
dirEntry(dir_t *dir)SdBaseFileprivate
dirName(const dir_t &dir, char *name)SdBaseFileprivatestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
exists(const char *name)SdBaseFileprivate
fail() const iosinline
failbitios_basestatic
fgets(char *str, int16_t num, char *delim=0)SdBaseFileprivate
fileSize() const SdBaseFileinlineprivate
fill()ios_baseinline
fill(char c)ios_baseinline
firstCluster() const SdBaseFileinlineprivate
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getFilename(char *name)SdBaseFileprivate
getline(char *str, streamsize count, char delim= '\n')istream
getpos(FatPos_t *pos)SdBaseFileprivate
getWriteError()SdBaseFileinlineprivate
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ifstream() (defined in ifstream)ifstreaminline
ifstream(const char *path, openmode mode=in)ifstreaminlineexplicit
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
is_open()ifstreaminline
isDir() const SdBaseFileinlineprivate
isFile() const SdBaseFileinlineprivate
isOpen() const SdBaseFileinlineprivate
isRoot() const SdBaseFileinlineprivate
isSubDir() const SdBaseFileinlineprivate
istream() (defined in istream)istreaminline
leftios_basestatic
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFileprivate
ls(uint8_t flags=0)SdBaseFileprivate
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFileprivate
octios_basestatic
off_type typedefios_base
open(const char *path, openmode mode=in)ifstreaminline
SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFileprivate
SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFileprivate
openmode typedefios_base
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFileprivate
openRoot(SdVolume *vol)SdBaseFileprivate
operator const void *() const iosinline
operator!() const iosinline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
outios_basestatic
istream::peek()istream
SdStreamBase::peek()SdBaseFileprivate
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
printCreateDateTime(Print *pr)SdBaseFileprivate
printFatDate(uint16_t fatDate)SdBaseFileprivatestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFileprivatestatic
printFatTime(uint16_t fatTime)SdBaseFileprivatestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFileprivatestatic
printField(float value, char term, uint8_t prec=2)SdBaseFileprivate
printField(int16_t value, char term)SdBaseFileprivate
printField(uint16_t value, char term)SdBaseFileprivate
printField(int32_t value, char term)SdBaseFileprivate
printField(uint32_t value, char term)SdBaseFileprivate
printFileSize(Print *pr)SdBaseFileprivate
printModifyDateTime(Print *pr)SdBaseFileprivate
printName()SdBaseFileprivate
printName(Print *pr)SdBaseFileprivate
rdstate() const iosinline
read()SdBaseFileprivate
read(void *buf, size_t nbyte)SdBaseFileprivate
readDir(dir_t *dir)SdBaseFileprivate
remove(SdBaseFile *dirFile, const char *path)SdBaseFileprivatestatic
remove()SdBaseFileprivate
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFileprivate
rewind()SdBaseFileinlineprivate
rightios_basestatic
rmdir()SdBaseFileprivate
rmRfStar()SdBaseFileprivate
SdBaseFile()SdBaseFileinlineprivate
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileprivate
seekCur(int32_t offset)SdBaseFileinlineprivate
seekdir enum nameios_base
seekEnd(int32_t offset=0)SdBaseFileinlineprivate
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
seekSet(uint32_t pos)SdBaseFileprivate
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setpos(FatPos_t *pos)SdBaseFileprivate
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
sync()SdBaseFileprivate
tellg()istreaminline
timestamp(SdBaseFile *file)SdBaseFileprivate
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFileprivate
truncios_basestatic
truncate(uint32_t size)SdBaseFileprivate
type() const SdBaseFileinlineprivate
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
volume() const SdBaseFileinlineprivate
width()ios_baseinline
width(unsigned n)ios_baseinline
write(const void *buf, size_t nbyte)SdBaseFileprivate
writeErrorSdBaseFileprivate
+ + + + diff --git a/libs/SdFat-master/html/classifstream.html b/libs/SdFat-master/html/classifstream.html new file mode 100755 index 0000000..537698f --- /dev/null +++ b/libs/SdFat-master/html/classifstream.html @@ -0,0 +1,2762 @@ + + + + + + +SdFat: ifstream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

SD file input stream. + More...

+ +

#include <SdStream.h>

+
+Inheritance diagram for ifstream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ifstream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
void close ()
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
 ifstream (const char *path, openmode mode=in)
 
istreamignore (streamsize n=1, int delim=-1)
 
bool is_open ()
 
void open (const char *path, openmode mode=in)
 
 operator const void * () const
 
bool operator! () const
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
int write (const void *buf, size_t nbyte)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Private Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Private Attributes

bool writeError
 
+

Detailed Description

+

SD file input stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ifstream::ifstream (const char * path,
openmode mode = in 
)
+
+inlineexplicit
+
+

Constructor with open

Parameters
+ + + +
[in]pathfile to open
[in]modeopen mode
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ifstream::close ()
+
+inline
+
+

Close a file and force cached data and directory information to be written to the storage device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inlineinherited
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::get ()
+
+inherited
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream & istream::get (char & c)
+
+inherited
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+inherited
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ifstream::is_open ()
+
+inline
+
+
Returns
True if stream is open else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ifstream::open (const char * path,
openmode mode = in 
)
+
+inline
+
+

Open an ifstream

Parameters
+ + + +
[in]pathfile to open
[in]modeopen mode
+
+
+

mode See fstream::open() for valid modes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inlineinherited
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inlineinherited
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inlineinherited
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inlineinherited
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inlineinherited
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inlineinherited
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inlineinherited
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::peek ()
+
+inherited
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void istream::skipWhite ()
+
+inherited
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classifstream__coll__graph.png b/libs/SdFat-master/html/classifstream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..686ee5d4eb7ac279af4cda025596b647440d93f2 GIT binary patch literal 6088 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classifstream__inherit__graph.png b/libs/SdFat-master/html/classifstream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..686ee5d4eb7ac279af4cda025596b647440d93f2 GIT binary patch literal 6088 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classios-members.html b/libs/SdFat-master/html/classios-members.html new file mode 100755 index 0000000..67a9612 --- /dev/null +++ b/libs/SdFat-master/html/classios-members.html @@ -0,0 +1,117 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ios Member List
+
+
+ +

This is the complete list of members for ios, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
outios_basestatic
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classios.html b/libs/SdFat-master/html/classios.html new file mode 100755 index 0000000..89517dc --- /dev/null +++ b/libs/SdFat-master/html/classios.html @@ -0,0 +1,1480 @@ + + + + + + +SdFat: ios Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Error and state information for all streams. + More...

+ +

#include <ios.h>

+
+Inheritance diagram for ios:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ios:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
bool good () const
 
 ios ()
 
 operator const void * () const
 
bool operator! () const
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Error and state information for all streams.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ios::ios ()
+
+inline
+
+

Create ios with no error flags set

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inline
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inline
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inline
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inline
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inline
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inline
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inline
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inline
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inline
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • Arduino/libraries/SdFat/ios.h
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/classios__base-members.html b/libs/SdFat-master/html/classios__base-members.html new file mode 100755 index 0000000..66e7b71 --- /dev/null +++ b/libs/SdFat-master/html/classios__base-members.html @@ -0,0 +1,107 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ios_base Member List
+
+
+ +

This is the complete list of members for ios_base, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
cur enum valueios_base
decios_basestatic
end enum valueios_base
eofbitios_basestatic
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
outios_basestatic
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
rightios_basestatic
seekdir enum nameios_base
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classios__base.html b/libs/SdFat-master/html/classios__base.html new file mode 100755 index 0000000..87e913a --- /dev/null +++ b/libs/SdFat-master/html/classios__base.html @@ -0,0 +1,1140 @@ + + + + + + +SdFat: ios_base Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Base class for all streams. + More...

+ +

#include <ios.h>

+
+Inheritance diagram for ios_base:
+
+
Inheritance graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
int precision () const
 
int precision (unsigned int n)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Base class for all streams.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+

type for format flags

+ +
+
+ +
+
+ + + + +
typedef unsigned char ios_base::iostate
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + +
typedef int32_t ios_base::off_type
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + +
typedef uint8_t ios_base::openmode
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + +
typedef uint32_t ios_base::pos_type
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + +
typedef uint32_t ios_base::streamsize
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + +
enum ios_base::seekdir
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inline
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inline
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inline
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inline
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotected
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inline
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inline
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inline
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inline
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inline
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inline
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inline
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+static
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+static
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+static
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+static
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+static
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+static
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+static
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+static
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+static
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+static
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+static
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+static
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+static
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+static
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+static
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+static
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+static
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+static
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+static
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+static
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+static
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+static
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+static
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+static
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • Arduino/libraries/SdFat/ios.h
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/classios__base__inherit__graph.png b/libs/SdFat-master/html/classios__base__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..0bc3859d563b84ec69984801d7e26a538ccab63a GIT binary patch literal 19273 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classios__coll__graph.png b/libs/SdFat-master/html/classios__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..003fc52a27b4d32eb587e877b2cbce365bb079ae GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^p+H=~!3HGrr`X&FQfx`y?k)`fL2$v|<&zm0n2&k7 zIEGZrc{_K1w{W0H>v`GD>t2X;YrJC%bJ6+3th41JuSOI{(~8#B)5I42$o?&Q@RCzb zZtfkg4gA0Tm)tpb?vPhX=T0%Ll;lrFo6pVMDSVz?(2Z_haw@b4II$c% zmSfHKK(>KdG(A%*pP@$T-UX@6msuIY8FRuWu6Q_yxq#nt$-jqUrsr}#B;Gl;=9S2Q z=1E=-L7X01jhmKKdH%g}wSMIk)zUjv-}k#d^;g*Hr`weLJx5mW`o+jOS*MNtF4{## zss&BEl6Z`Bn@q0jud}z+wY?|pI=%ly_lzz1lC@K~l9w$rDDcX=^eW+2#gtIjt3i#Q zy!A?L=9|f-J`0Qe7rH*ZyC*!#?3j=5)I0m9)X%d!{`LHcNlSEAE^Z8B{4P{?>;4k2 zU2k-PSN?uuKlw`GA}RM*71wrbKM=UY%rAy(sy(Bps=`VZm8lM|TuS$E5;^-+rQxlO z^*qK4$JeL&O=$o5=#gmtRzCI9gD_R^H#2I{j=7Bg2^s=7*#1&RixK z_bMSFo1u=O!TK3PO#b%w@@vdPXI%*Dm#f{7(3X8;@0Z!~JbbZhwS(oHymPmHi~ntF z-7d*cw|ts|C8w_FhusbRbvieg3Z5S6RPQcTIprL&^6j_J$_=q5n`;;6rkyA&E7;o? zQ^}!ywYGqHLub70?#Fpc8@U7`R^4Z=3EIc=fm>Uf|Mt|jQ=T3`jhjV{?Ymv<%3pu~ zU2Lx1Gj;Zapu6nmjNWxelb#hbIIUxH+SgyU{e9%K`Q`arSy_=H46Ee{FvsC~hIHSh%Fj zYVI!ODNY(I@8)fP$FWqv>(v^8S55c*mT%79#wX9`mR`7OZJv{-Y}%X$_UD6h1!r`A z>Q@orun7(>*&RF8o_T8hNtgKZZF5(y6bk<-o)F^a6=pK=u*s%Bi@fQ$IOF7uzjqo#`e7%;OB6 Lu6{1-oD!M<1isow literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classios__inherit__graph.png b/libs/SdFat-master/html/classios__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..16af89d16ccd5b685429f1a5601f627f86039c85 GIT binary patch literal 19110 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classiostream-members.html b/libs/SdFat-master/html/classiostream-members.html new file mode 100755 index 0000000..63b4648 --- /dev/null +++ b/libs/SdFat-master/html/classiostream-members.html @@ -0,0 +1,174 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
iostream Member List
+
+
+ +

This is the complete list of members for iostream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getline(char *str, streamsize count, char delim= '\n')istream
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
peek()istream
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
put(char ch)ostreaminline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
tellg()istreaminline
tellp()ostreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classiostream.html b/libs/SdFat-master/html/classiostream.html new file mode 100755 index 0000000..14f4fda --- /dev/null +++ b/libs/SdFat-master/html/classiostream.html @@ -0,0 +1,3303 @@ + + + + + + +SdFat: iostream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Input/Output stream. + More...

+ +

#include <iostream.h>

+
+Inheritance diagram for iostream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for iostream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
istreamignore (streamsize n=1, int delim=-1)
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Input/Output stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inlineinherited
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inlineinherited
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::get ()
+
+inherited
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream & istream::get (char & c)
+
+inherited
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+inherited
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+inherited
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inlineinherited
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inlineinherited
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inlineinherited
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inlineinherited
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inlineinherited
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inlineinherited
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inlineinherited
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inlineinherited
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inlineinherited
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inlineinherited
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inlineinherited
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inlineinherited
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inlineinherited
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inlineinherited
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inlineinherited
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inlineinherited
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inlineinherited
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inlineinherited
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inlineinherited
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inlineinherited
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inlineinherited
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inlineinherited
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int istream::peek ()
+
+inherited
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inlineinherited
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void istream::skipWhite ()
+
+inherited
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classiostream__coll__graph.png b/libs/SdFat-master/html/classiostream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..0b89531404cf5a45d82b7dad1a484085c48af02b GIT binary patch literal 5818 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classiostream__inherit__graph.png b/libs/SdFat-master/html/classiostream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..2986dd9be3f5e6e34a9f58dd9bd5f2359a07abb9 GIT binary patch literal 6573 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classistream-members.html b/libs/SdFat-master/html/classistream-members.html new file mode 100755 index 0000000..a78482c --- /dev/null +++ b/libs/SdFat-master/html/classistream-members.html @@ -0,0 +1,148 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
istream Member List
+
+
+ +

This is the complete list of members for istream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
fmtflags typedefios_base
gcount() const istreaminline
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getline(char *str, streamsize count, char delim= '\n')istream
good() const iosinline
goodbitios_basestatic
hexios_basestatic
ignore(streamsize n=1, int delim=-1)istream
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator>>(istream &(*pf)(istream &str))istreaminline
operator>>(ios_base &(*pf)(ios_base &str))istreaminline
operator>>(ios &(*pf)(ios &str))istreaminline
operator>>(char *str)istreaminline
operator>>(char &ch)istreaminline
operator>>(signed char *str)istreaminline
operator>>(signed char &ch)istreaminline
operator>>(unsigned char *str)istreaminline
operator>>(unsigned char &ch)istreaminline
operator>>(bool &arg)istreaminline
operator>>(short &arg)istreaminline
operator>>(unsigned short &arg)istreaminline
operator>>(int &arg)istreaminline
operator>>(unsigned int &arg)istreaminline
operator>>(long &arg)istreaminline
operator>>(unsigned long &arg)istreaminline
operator>>(double &arg)istreaminline
operator>>(float &arg)istreaminline
operator>>(void *&arg)istreaminline
outios_basestatic
peek()istream
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekg(pos_type pos)istreaminline
seekg(off_type off, seekdir way)istreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipWhite()istream
skipwsios_basestatic
streamsize typedefios_base
tellg()istreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classistream.html b/libs/SdFat-master/html/classistream.html new file mode 100755 index 0000000..6048cc0 --- /dev/null +++ b/libs/SdFat-master/html/classistream.html @@ -0,0 +1,2423 @@ + + + + + + +SdFat: istream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Input Stream. + More...

+ +

#include <istream.h>

+
+Inheritance diagram for istream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for istream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
streamsize gcount () const
 
int get ()
 
istreamget (char &ch)
 
istreamget (char *str, streamsize n, char delim= '\n')
 
istreamgetline (char *str, streamsize count, char delim= '\n')
 
bool good () const
 
istreamignore (streamsize n=1, int delim=-1)
 
 operator const void * () const
 
bool operator! () const
 
istreamoperator>> (istream &(*pf)(istream &str))
 
istreamoperator>> (ios_base &(*pf)(ios_base &str))
 
istreamoperator>> (ios &(*pf)(ios &str))
 
istreamoperator>> (char *str)
 
istreamoperator>> (char &ch)
 
istreamoperator>> (signed char *str)
 
istreamoperator>> (signed char &ch)
 
istreamoperator>> (unsigned char *str)
 
istreamoperator>> (unsigned char &ch)
 
istreamoperator>> (bool &arg)
 
istreamoperator>> (short &arg)
 
istreamoperator>> (unsigned short &arg)
 
istreamoperator>> (int &arg)
 
istreamoperator>> (unsigned int &arg)
 
istreamoperator>> (long &arg)
 
istreamoperator>> (unsigned long &arg)
 
istreamoperator>> (double &arg)
 
istreamoperator>> (float &arg)
 
istreamoperator>> (void *&arg)
 
int peek ()
 
int precision () const
 
int precision (unsigned int n)
 
iostate rdstate () const
 
istreamseekg (pos_type pos)
 
istreamseekg (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
void skipWhite ()
 
pos_type tellg ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Input Stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
streamsize istream::gcount () const
+
+inline
+
+
Returns
The number of characters extracted by the last unformatted input function.
+ +
+
+ +
+
+ + + + + + + +
int istream::get ()
+
+

Extract a character if one is available.

+
Returns
The character or -1 if a failure occurs. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + + + + +
istream & istream::get (char & c)
+
+

Extract a character if one is available.

+
Parameters
+ + +
[out]clocation to receive the extracted character.
+
+
+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
)
+
+

Extract characters.

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
)
+
+

Extract characters

+
Parameters
+ + + + +
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
+
+
+

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

+

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

+
Returns
always returns *this. A failure is indicated by the stream state.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
istream & istream::ignore (streamsize n = 1,
int delim = -1 
)
+
+

Extract characters and discard them.

+
Parameters
+ + + +
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
+
+
+

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

+

Failures are indicated by the state of the stream.

+
Returns
*this
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (istream &(*)(istream &str) pf)
+
+inline
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf)
+
+inline
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (ios &(*)(ios &str) pf)
+
+inline
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char * str)
+
+inline
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (char & ch)
+
+inline
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char * str)
+
+inline
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (signed char & ch)
+
+inline
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char * str)
+
+inline
+
+

Extract a character string

Parameters
+ + +
[out]strlocation to store the string.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned char & ch)
+
+inline
+
+

Extract a character

Parameters
+ + +
[out]chlocation to store the character.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (bool & arg)
+
+inline
+
+

Extract a value of type bool.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (short & arg)
+
+inline
+
+

Extract a value of type short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned short & arg)
+
+inline
+
+

Extract a value of type unsigned short.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (int & arg)
+
+inline
+
+

Extract a value of type int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned int & arg)
+
+inline
+
+

Extract a value of type unsigned int.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (long & arg)
+
+inline
+
+

Extract a value of type long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (unsigned long & arg)
+
+inline
+
+

Extract a value of type unsigned long.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (double & arg)
+
+inline
+
+

Extract a value of type double.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (float & arg)
+
+inline
+
+

Extract a value of type float.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::operator>> (void *& arg)
+
+inline
+
+

Extract a value of type void*.

Parameters
+ + +
[out]arglocation to store the value.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + + + +
int istream::peek ()
+
+

Return the next available character without consuming it.

+
Returns
The character if the stream state is good else -1;
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& istream::seekg (pos_type pos)
+
+inline
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the read pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& istream::seekg (off_type off,
seekdir way 
)
+
+inline
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + + + +
void istream::skipWhite ()
+
+

used to implement ws()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type istream::tellg ()
+
+inline
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/istream.h
  • +
  • Arduino/libraries/SdFat/istream.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/classistream__coll__graph.png b/libs/SdFat-master/html/classistream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..b3326378d263f69f2d8df6aeb0fb109e872e92b8 GIT binary patch literal 1709 zcmbuAc{J2(7{`A`*|H1C5>i=<+)~oQ!5AWq%C9;hf%W%zP>6(l+ z4N+*0F^Et|n>9?B7}t#Dj_&E6&i%LZp67ke^F8N1=Xt*8bDsB}qXSq%Y_Avq01^-z zODI1(^MfWL#J_jb`pfu9$jc6F32bejqUO@fZ2@9wekn4aRnQxx;=705(t9h@hNY2Y zU#+Yhs5A4tQ2#9~SV52DsGnucZF?vJbsRZZi8+`0ai2P@`JVd9!B}CbYsrx^O_6L( z&E+X`Z3%nA{CKfFZJ62f?9oER)EH}3P;eL@QHbKS@t94ghVhEh79tw5FK-UngZ`Fn zH9jzXv@BZkBab6rmv0RQRD>7dN=gzZ5(Sw1&&?iOfWB6eygpIMWb}N#b`C0PqbmS8 zAZ=FxPI7WyFKf>rn7l^?UR;yY-doCv^9~AuA9>RQbE`F&Kygz$8Du>wsXp`2TTuOq zoXKwo^>7vyhqusYEF0>Lyet#?oRSSgZ7HKOMQ?Z)t>t~~c7DdW^({5=E9CXz$*Y{m zdg5wwj&ezET)UYp*LI15{Qj(mrniah! zh9{PvG!P@_63-xFNwVpeKpD10GnV1hT74lL3fL667Af6oswNpG>&m3l)1oRl(V)iQ zD`$2+AgHWxUns9||GZ#t5PdQHu!cCpXhk3JQR)#Ol8)AYwPizB7h24w3JZ1u5z0gY zce=77Y}Semb-7&K&>gJ^*iIk5h z0H@^OG50FuuR$ay()naUdhNg;@a6WB_rngm7FTs4+UX=R2(7l*(-nIRpmV;ut31{$ zk!^Ns7TSx?b4JtPq7f$V0cWfI zd&$=2kewN%0qgM*HRH4KvFq>PC=|+v(q0=2fmYlOlB{}xq2{iMV70&k5Of-%f#*6E zQBSFJ|BC(~K9>e-Q^nwjW712Dx`Tr;Pb73Y+52v3W&iN>2Mp@vJAO?Rd}$6my1QHz zOQkCHRu>rULoe#g#TjG1wMeyUYjy`ypK@JN4D;Ls7j2nXR@ROER!L!1jv?~>M*sDq zeyn_+&ZjF7n)vwvu^gf*2Bm#!m|0?z&-cm14Qw-*d&UYZeuuoCDI-Q2b4o5cU2;|^ zPFLP>4SeX!QZVCmU51XSS2|&UQ95(?c~K6g|2yeF4d=YO7L*RSIhD?ql@+pRug<1y3 zx&ljyW^r5%zcOFfkwh$sOjt|EZ**d+3hzx#!0ADBu|C^xqXx%rb~KI)c=$7Vbh3QN ze)s~Tnz|;q-<}(*t6hBQ5}APSrtt#IGx5j`M$jaAw?hWBv{X^5v4mdLImGNY+o7dX zH^`1q+h`m?EfHu171|vZP@dv3K)q|8mYNC=D|G|b6+AH4DTcf9++A*&zm7JW{J+5& zw!es!`Z8|77`SgFC;I7q^VKxap2vm>9|Ybd$Cc#@BQ7>xqc;j?v-$rI0I_ngq*!>w{sUYSEd&4n literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classistream__inherit__graph.png b/libs/SdFat-master/html/classistream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..56f088c981a7e55e6b5a72e650a03e70d45a4216 GIT binary patch literal 6723 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classobufstream-members.html b/libs/SdFat-master/html/classobufstream-members.html new file mode 100755 index 0000000..6462445 --- /dev/null +++ b/libs/SdFat-master/html/classobufstream-members.html @@ -0,0 +1,148 @@ + + + + + + +SdFat: Member List + + + + + + + +
+
+
obufstream Member List
+
+
+ +

This is the complete list of members for obufstream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
buf()obufstreaminline
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
init(char *buf, size_t size)obufstreaminline
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
leftios_basestatic
length()obufstreaminline
obufstream()obufstreaminline
obufstream(char *buf, size_t size)obufstreaminline
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
put(char ch)ostreaminline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
tellp()ostreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classobufstream.html b/libs/SdFat-master/html/classobufstream.html new file mode 100755 index 0000000..62edbbd --- /dev/null +++ b/libs/SdFat-master/html/classobufstream.html @@ -0,0 +1,2443 @@ + + + + + + +SdFat: obufstream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

format a char string + More...

+ +

#include <bufstream.h>

+
+Inheritance diagram for obufstream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for obufstream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
char * buf ()
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
bool good () const
 
void init (char *buf, size_t size)
 
size_t length ()
 
 obufstream ()
 
 obufstream (char *buf, size_t size)
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

format a char string

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
obufstream::obufstream ()
+
+inline
+
+

constructor

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
obufstream::obufstream (char * buf,
size_t size 
)
+
+inline
+
+

Constructor

Parameters
+ + + +
[in]bufbuffer for formatted string
[in]sizebuffer size
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char* obufstream::buf ()
+
+inline
+
+
Returns
a pointer to the buffer
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inlineinherited
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void obufstream::init (char * buf,
size_t size 
)
+
+inline
+
+

Initialize an obufstream

Parameters
+ + + +
[in]bufbuffer for formatted string
[in]sizebuffer size
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t obufstream::length ()
+
+inline
+
+
Returns
the length of the formatted string
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inlineinherited
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inlineinherited
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inlineinherited
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inlineinherited
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inlineinherited
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inlineinherited
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inlineinherited
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inlineinherited
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inlineinherited
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inlineinherited
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inlineinherited
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inlineinherited
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inlineinherited
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classobufstream__coll__graph.png b/libs/SdFat-master/html/classobufstream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..65fb37253dbfc046b9f696015fc801f08a6e05df GIT binary patch literal 2520 zcmcJRdosfm}&))0Vd+ojU=lQNDk>GGl z7O9K`06^Bx7Vos-y#WA($-p-vmHvD|2Xh^?umWvTey?x0$Hh zK=eh@AR0CkL6Y*clJW>QrKXz@@53EqZ(!yj;p*KJ|Xw+>D_d; zAuZ;?DGJF7xEWKKIu&zmw)_tz#{@J{9In>Bh76YVuVxgU=Inz#FES`x!)_dN3j&W% zHN9&nZA!~3tV#>hDJnXOR1PZcMMx{KV~$M-R7gsPaGEB_lUDz@v<>X0-7q3XwWWY1 z<9GG@MaS)9mXp1YaOLgo1zqFgecy~Br;I-45LtSQ8Kbqe31+~;Q|Z($$YeAffA$d% zb(h2Okm@w_<^}}J>pd3Qv8o|aV|CQmMU_fk8k3 z#kF5yjU|l8$s8LDm$c!89dRVxT$eW7is=||L&z8TKTnr-K`ca@KwD(J+MX~d@wgx- zLS=+FggUNq?FH=yQ&PLQ$Z-!b3Sh5mHlPF|&zD7`ibFx*i(lbX?BF{Ojhx9@a;T?E zAFZrmbF`(XZ*f@!^O?v!`4D~~fZNZw@h67fTO&{=M=(V$S%<5Kf6YOWBg=c#QH+rE z9Pk37g@cf!d^`ZS5WbrDjCRstEy1=Dx%i7O3&sD$bmPY>tSpPtr*0?9LP{fYtd(i< zhk6GW2&_WwqQXA;iCEc9IIXg-9YWcdz({N3P;oUw%bo+(LD|>=x!TMmwh%T#wtT=< z>xBL!MWidYnqwZI{r3ImGuu{9^>~4PS6(#Rc7XtOIO4>|!&~07F!A#+iqr+e)Fe4o z(=R&S3twI~H>Ul3X$ko8*XxmrKBN4Km#wWG0mJ7+YJh=$Y-X0xSe+n6Tee>eHl=RE z$}0$I!9o+d`Pm8=hW-SJx`)A(X=+Q+)OF$JCM2*U1fpQDH+c**a4DtqA*HS>S;xeM z2M7#ay|Arc8p52tysPwHL&0@61iz5Pf44nbCJ-B*u+y1bdfZARvIy^8TAjA?FPpZg z<%vbjcT}B~N`t_h$!5UYDEG{OXguMuus!M0#^(Kuc+grJte6Yr?*~PqF^iPHIevRR zXWH-01_W&^83zlBUrl|=U)=V-Z|H06Mc7+VI;|8!;l{yTA@1AGR7R{DGu#!bfElSq zQ~%yGhj&LMVgj+W?_?y9`)0WDL){|l^!h+~Q-AcjI`FMyc=lY$LF1nyDgfj^WjFApZUo5cR$%BfTj)THNh8tUf0i>{f| zmxfVqVh^0zZMngf!9?cA6a#e&YQ4aankJI#9^vAV>zaYs$t z8bEWTZa*KTySew&F$Z~vitolKfcP+ zbpUgq`RCSh4YFjGXCqvsV&}#H%V$wO(W|p9iP6O=&!ZWl2K_TT<1^-8+0hNpR*)FR zDGeHN(EE2Hl2r-hQgqLm?C2L5l_3vos-Wwkc^gaXhznBwDGU3!e#xBxIg>H8zO&CK?CHRu5^*w)+L1(p zM0uS$8o=LuZBjDv;PJl}NV`{B~FVA;r( z!0+wSrqd^mkfQL*-Y2&JrhP*zP3sF}uV>2$03%#~QqvitGB2L3S!-nm&-4^+Wq1DR z^0%p_+rG7MjX)JWvzvzI;R^-JbEz@8a79iSICGij*rRJdF<3#po0+Mt`MbUkl?ojw zqd?)^5%1MsW!$+_@#KlyQ8!`Rr&o7EKC~tr%Lw{6yO~E}I=Z_4!-rpqd4zVQM^#l< z-@GA}mX*m-1oZvd-r0O>OFhcfRU0@vA$nI7s>FiUXgnf!V7gqhu*|&OJnGD&Q-R}$S3hePHW`m_6YF<)ycIH!f6&${w-om82#c|sZkHHG68$wA36ag8S2^kO zY+P|qqU$Mu!6)AG8@UqaBp2V|wMly3K}9#e^I)43-fieT-F*rr(M=uZHS3($v6lb7 z&Iq0C{>;e_<<1LUOS&UIIrkL)mo~&gD@t6;eM3VlXWVS=O%KEum|XVTGf_8ZVJ?tF teNaeNE1O>H6E)<|7^AHn(bnKXOb=5>3;*t$&qk{T*jYQ^%Z_@-{T++bfH437 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classobufstream__inherit__graph.png b/libs/SdFat-master/html/classobufstream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..65fb37253dbfc046b9f696015fc801f08a6e05df GIT binary patch literal 2520 zcmcJRdosfm}&))0Vd+ojU=lQNDk>GGl z7O9K`06^Bx7Vos-y#WA($-p-vmHvD|2Xh^?umWvTey?x0$Hh zK=eh@AR0CkL6Y*clJW>QrKXz@@53EqZ(!yj;p*KJ|Xw+>D_d; zAuZ;?DGJF7xEWKKIu&zmw)_tz#{@J{9In>Bh76YVuVxgU=Inz#FES`x!)_dN3j&W% zHN9&nZA!~3tV#>hDJnXOR1PZcMMx{KV~$M-R7gsPaGEB_lUDz@v<>X0-7q3XwWWY1 z<9GG@MaS)9mXp1YaOLgo1zqFgecy~Br;I-45LtSQ8Kbqe31+~;Q|Z($$YeAffA$d% zb(h2Okm@w_<^}}J>pd3Qv8o|aV|CQmMU_fk8k3 z#kF5yjU|l8$s8LDm$c!89dRVxT$eW7is=||L&z8TKTnr-K`ca@KwD(J+MX~d@wgx- zLS=+FggUNq?FH=yQ&PLQ$Z-!b3Sh5mHlPF|&zD7`ibFx*i(lbX?BF{Ojhx9@a;T?E zAFZrmbF`(XZ*f@!^O?v!`4D~~fZNZw@h67fTO&{=M=(V$S%<5Kf6YOWBg=c#QH+rE z9Pk37g@cf!d^`ZS5WbrDjCRstEy1=Dx%i7O3&sD$bmPY>tSpPtr*0?9LP{fYtd(i< zhk6GW2&_WwqQXA;iCEc9IIXg-9YWcdz({N3P;oUw%bo+(LD|>=x!TMmwh%T#wtT=< z>xBL!MWidYnqwZI{r3ImGuu{9^>~4PS6(#Rc7XtOIO4>|!&~07F!A#+iqr+e)Fe4o z(=R&S3twI~H>Ul3X$ko8*XxmrKBN4Km#wWG0mJ7+YJh=$Y-X0xSe+n6Tee>eHl=RE z$}0$I!9o+d`Pm8=hW-SJx`)A(X=+Q+)OF$JCM2*U1fpQDH+c**a4DtqA*HS>S;xeM z2M7#ay|Arc8p52tysPwHL&0@61iz5Pf44nbCJ-B*u+y1bdfZARvIy^8TAjA?FPpZg z<%vbjcT}B~N`t_h$!5UYDEG{OXguMuus!M0#^(Kuc+grJte6Yr?*~PqF^iPHIevRR zXWH-01_W&^83zlBUrl|=U)=V-Z|H06Mc7+VI;|8!;l{yTA@1AGR7R{DGu#!bfElSq zQ~%yGhj&LMVgj+W?_?y9`)0WDL){|l^!h+~Q-AcjI`FMyc=lY$LF1nyDgfj^WjFApZUo5cR$%BfTj)THNh8tUf0i>{f| zmxfVqVh^0zZMngf!9?cA6a#e&YQ4aankJI#9^vAV>zaYs$t z8bEWTZa*KTySew&F$Z~vitolKfcP+ zbpUgq`RCSh4YFjGXCqvsV&}#H%V$wO(W|p9iP6O=&!ZWl2K_TT<1^-8+0hNpR*)FR zDGeHN(EE2Hl2r-hQgqLm?C2L5l_3vos-Wwkc^gaXhznBwDGU3!e#xBxIg>H8zO&CK?CHRu5^*w)+L1(p zM0uS$8o=LuZBjDv;PJl}NV`{B~FVA;r( z!0+wSrqd^mkfQL*-Y2&JrhP*zP3sF}uV>2$03%#~QqvitGB2L3S!-nm&-4^+Wq1DR z^0%p_+rG7MjX)JWvzvzI;R^-JbEz@8a79iSICGij*rRJdF<3#po0+Mt`MbUkl?ojw zqd?)^5%1MsW!$+_@#KlyQ8!`Rr&o7EKC~tr%Lw{6yO~E}I=Z_4!-rpqd4zVQM^#l< z-@GA}mX*m-1oZvd-r0O>OFhcfRU0@vA$nI7s>FiUXgnf!V7gqhu*|&OJnGD&Q-R}$S3hePHW`m_6YF<)ycIH!f6&${w-om82#c|sZkHHG68$wA36ag8S2^kO zY+P|qqU$Mu!6)AG8@UqaBp2V|wMly3K}9#e^I)43-fieT-F*rr(M=uZHS3($v6lb7 z&Iq0C{>;e_<<1LUOS&UIIrkL)mo~&gD@t6;eM3VlXWVS=O%KEum|XVTGf_8ZVJ?tF teNaeNE1O>H6E)<|7^AHn(bnKXOb=5>3;*t$&qk{T*jYQ^%Z_@-{T++bfH437 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classofstream-members.html b/libs/SdFat-master/html/classofstream-members.html new file mode 100755 index 0000000..8d46832 --- /dev/null +++ b/libs/SdFat-master/html/classofstream-members.html @@ -0,0 +1,216 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ofstream Member List
+
+
+ +

This is the complete list of members for ofstream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
available()SdBaseFileinlineprivate
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)ofstreaminline
clearWriteError()SdBaseFileinlineprivate
close()ofstreaminline
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFileprivate
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFileprivate
cur enum valueios_base
curCluster() const SdBaseFileinlineprivate
curPosition() const SdBaseFileinlineprivate
cwd()SdBaseFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFileinlineprivatestatic
dateTimeCallbackCancel()SdBaseFileinlineprivatestatic
decios_basestatic
dirEntry(dir_t *dir)SdBaseFileprivate
dirName(const dir_t &dir, char *name)SdBaseFileprivatestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
exists(const char *name)SdBaseFileprivate
fail() const iosinline
failbitios_basestatic
fgets(char *str, int16_t num, char *delim=0)SdBaseFileprivate
fileSize() const SdBaseFileinlineprivate
fill()ios_baseinline
fill(char c)ios_baseinline
firstCluster() const SdBaseFileinlineprivate
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
getFilename(char *name)SdBaseFileprivate
getpos(FatPos_t *pos)SdBaseFileprivate
getWriteError()SdBaseFileinlineprivate
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
is_open()ofstreaminline
isDir() const SdBaseFileinlineprivate
isFile() const SdBaseFileinlineprivate
isOpen() const SdBaseFileinlineprivate
isRoot() const SdBaseFileinlineprivate
isSubDir() const SdBaseFileinlineprivate
leftios_basestatic
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFileprivate
ls(uint8_t flags=0)SdBaseFileprivate
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFileprivate
octios_basestatic
off_type typedefios_base
ofstream() (defined in ofstream)ofstreaminline
ofstream(const char *path, ios::openmode mode=out)ofstreaminlineexplicit
open(const char *path, openmode mode=out)ofstreaminline
SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFileprivate
SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFileprivate
openmode typedefios_base
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFileprivate
openRoot(SdVolume *vol)SdBaseFileprivate
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
peek()SdBaseFileprivate
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
printCreateDateTime(Print *pr)SdBaseFileprivate
printFatDate(uint16_t fatDate)SdBaseFileprivatestatic
printFatDate(Print *pr, uint16_t fatDate)SdBaseFileprivatestatic
printFatTime(uint16_t fatTime)SdBaseFileprivatestatic
printFatTime(Print *pr, uint16_t fatTime)SdBaseFileprivatestatic
printField(float value, char term, uint8_t prec=2)SdBaseFileprivate
printField(int16_t value, char term)SdBaseFileprivate
printField(uint16_t value, char term)SdBaseFileprivate
printField(int32_t value, char term)SdBaseFileprivate
printField(uint32_t value, char term)SdBaseFileprivate
printFileSize(Print *pr)SdBaseFileprivate
printModifyDateTime(Print *pr)SdBaseFileprivate
printName()SdBaseFileprivate
printName(Print *pr)SdBaseFileprivate
put(char ch)ostreaminline
rdstate() const iosinline
read()SdBaseFileprivate
read(void *buf, size_t nbyte)SdBaseFileprivate
readDir(dir_t *dir)SdBaseFileprivate
remove(SdBaseFile *dirFile, const char *path)SdBaseFileprivatestatic
remove()SdBaseFileprivate
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFileprivate
rewind()SdBaseFileinlineprivate
rightios_basestatic
rmdir()SdBaseFileprivate
rmRfStar()SdBaseFileprivate
SdBaseFile()SdBaseFileinlineprivate
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileprivate
seekCur(int32_t offset)SdBaseFileinlineprivate
seekdir enum nameios_base
seekEnd(int32_t offset=0)SdBaseFileinlineprivate
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
seekSet(uint32_t pos)SdBaseFileprivate
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setpos(FatPos_t *pos)SdBaseFileprivate
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
sync()SdBaseFileprivate
tellp()ostreaminline
timestamp(SdBaseFile *file)SdBaseFileprivate
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFileprivate
truncios_basestatic
truncate(uint32_t size)SdBaseFileprivate
type() const SdBaseFileinlineprivate
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
volume() const SdBaseFileinlineprivate
width()ios_baseinline
width(unsigned n)ios_baseinline
write(const void *buf, size_t nbyte)SdBaseFileprivate
writeErrorSdBaseFileprivate
+ + + + diff --git a/libs/SdFat-master/html/classofstream.html b/libs/SdFat-master/html/classofstream.html new file mode 100755 index 0000000..bf53583 --- /dev/null +++ b/libs/SdFat-master/html/classofstream.html @@ -0,0 +1,2561 @@ + + + + + + +SdFat: ofstream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

SD card output stream. + More...

+ +

#include <SdStream.h>

+
+Inheritance diagram for ofstream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ofstream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
void close ()
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
bool good () const
 
bool is_open ()
 
 ofstream (const char *path, ios::openmode mode=out)
 
void open (const char *path, openmode mode=out)
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

uint32_t available ()
 
void clearWriteError ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
bool exists (const char *name)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
bool getFilename (char *name)
 
void getpos (FatPos_t *pos)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isOpen () const
 
bool isRoot () const
 
bool isSubDir () const
 
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
 
void ls (uint8_t flags=0)
 
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
 
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
 
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
 
bool openRoot (SdVolume *vol)
 
int peek ()
 
bool printCreateDateTime (Print *pr)
 
int printField (float value, char term, uint8_t prec=2)
 
int printField (int16_t value, char term)
 
int printField (uint16_t value, char term)
 
int printField (int32_t value, char term)
 
int printField (uint32_t value, char term)
 
size_t printFileSize (Print *pr)
 
bool printModifyDateTime (Print *pr)
 
size_t printName ()
 
size_t printName (Print *pr)
 
int16_t read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (SdBaseFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
bool seekCur (int32_t offset)
 
bool seekEnd (int32_t offset=0)
 
bool seekSet (uint32_t pos)
 
void setpos (FatPos_t *pos)
 
bool sync ()
 
bool timestamp (SdBaseFile *file)
 
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t size)
 
uint8_t type () const
 
SdVolumevolume () const
 
int write (const void *buf, size_t nbyte)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Private Member Functions

static SdBaseFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static void dirName (const dir_t &dir, char *name)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (Print *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (Print *pr, uint16_t fatTime)
 
static bool remove (SdBaseFile *dirFile, const char *path)
 
+ + + +

+Private Attributes

bool writeError
 
+

Detailed Description

+

SD card output stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ofstream::ofstream (const char * path,
ios::openmode mode = out 
)
+
+inlineexplicit
+
+

Constructor with open

Parameters
+ + + +
[in]pathfile to open
[in]modeopen mode
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ofstream::clear (iostate state = goodbit)
+
+inline
+
+

Clear state and writeError

Parameters
+ + +
[in]statenew state for stream
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ofstream::close ()
+
+inline
+
+

Close a file and force cached data and directory information to be written to the storage device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inlineinherited
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ofstream::is_open ()
+
+inline
+
+
Returns
True if stream is open else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ofstream::open (const char * path,
openmode mode = out 
)
+
+inline
+
+

Open an ofstream

Parameters
+ + + +
[in]pathfile to open
[in]modeopen mode
+
+
+

mode See fstream::open() for valid modes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inlineinherited
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inlineinherited
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inlineinherited
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inlineinherited
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inlineinherited
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inlineinherited
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inlineinherited
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inlineinherited
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inlineinherited
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inlineinherited
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inlineinherited
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inlineinherited
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inlineinherited
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inlineinherited
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inlineinherited
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inlineinherited
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inlineinherited
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inlineinherited
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inlineinherited
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/classofstream__coll__graph.png b/libs/SdFat-master/html/classofstream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..eaa6cd89d96c23637fef18534dc31c1cd0bdaaed GIT binary patch literal 6799 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classofstream__inherit__graph.png b/libs/SdFat-master/html/classofstream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..eaa6cd89d96c23637fef18534dc31c1cd0bdaaed GIT binary patch literal 6799 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classostream-members.html b/libs/SdFat-master/html/classostream-members.html new file mode 100755 index 0000000..1a46ae3 --- /dev/null +++ b/libs/SdFat-master/html/classostream-members.html @@ -0,0 +1,143 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
ostream Member List
+
+
+ +

This is the complete list of members for ostream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
cur enum valueios_base
decios_basestatic
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
fail() const iosinline
failbitios_basestatic
fill()ios_baseinline
fill(char c)ios_baseinline
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
flagsToBase()ios_baseinlineprotected
flush()ostreaminline
fmtflags typedefios_base
good() const iosinline
goodbitios_basestatic
hexios_basestatic
inios_basestatic
internalios_basestatic
ios()iosinline
ios_base() (defined in ios_base)ios_baseinline
iostate typedefios_base
leftios_basestatic
octios_basestatic
off_type typedefios_base
openmode typedefios_base
operator const void *() const iosinline
operator!() const iosinline
operator<<(ostream &(*pf)(ostream &str))ostreaminline
operator<<(ios_base &(*pf)(ios_base &str))ostreaminline
operator<<(bool arg)ostreaminline
operator<<(const char *arg)ostreaminline
operator<<(const signed char *arg)ostreaminline
operator<<(const unsigned char *arg)ostreaminline
operator<<(char arg)ostreaminline
operator<<(signed char arg)ostreaminline
operator<<(unsigned char arg)ostreaminline
operator<<(double arg)ostreaminline
operator<<(float arg)ostreaminline
operator<<(short arg)ostreaminline
operator<<(unsigned short arg)ostreaminline
operator<<(int arg)ostreaminline
operator<<(unsigned int arg)ostreaminline
operator<<(long arg)ostreaminline
operator<<(unsigned long arg)ostreaminline
operator<<(const void *arg)ostreaminline
operator<<(pgm arg)ostreaminline
operator<<(const __FlashStringHelper *arg)ostreaminline
ostream() (defined in ostream)ostreaminline
outios_basestatic
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
put(char ch)ostreaminline
rdstate() const iosinline
rightios_basestatic
seekdir enum nameios_base
seekp(pos_type pos)ostreaminline
seekp(off_type off, seekdir way)ostreaminline
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
tellp()ostreaminline
truncios_basestatic
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
width()ios_baseinline
width(unsigned n)ios_baseinline
+ + + + diff --git a/libs/SdFat-master/html/classostream.html b/libs/SdFat-master/html/classostream.html new file mode 100755 index 0000000..132f5f3 --- /dev/null +++ b/libs/SdFat-master/html/classostream.html @@ -0,0 +1,2279 @@ + + + + + + +SdFat: ostream Class Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

Output Stream. + More...

+ +

#include <ostream.h>

+
+Inheritance diagram for ostream:
+
+
Inheritance graph
+ + +
[legend]
+
+Collaboration diagram for ostream:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

typedef unsigned int fmtflags
 
typedef unsigned char iostate
 
typedef int32_t off_type
 
typedef uint8_t openmode
 
typedef uint32_t pos_type
 
enum  seekdir { beg, +cur, +end + }
 
typedef uint32_t streamsize
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool bad () const
 
void clear (iostate state=goodbit)
 
bool eof () const
 
bool fail () const
 
char fill ()
 
char fill (char c)
 
fmtflags flags () const
 
fmtflags flags (fmtflags fl)
 
ostreamflush ()
 
bool good () const
 
 operator const void * () const
 
bool operator! () const
 
ostreamoperator<< (ostream &(*pf)(ostream &str))
 
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
 
ostreamoperator<< (bool arg)
 
ostreamoperator<< (const char *arg)
 
ostreamoperator<< (const signed char *arg)
 
ostreamoperator<< (const unsigned char *arg)
 
ostreamoperator<< (char arg)
 
ostreamoperator<< (signed char arg)
 
ostreamoperator<< (unsigned char arg)
 
ostreamoperator<< (double arg)
 
ostreamoperator<< (float arg)
 
ostreamoperator<< (short arg)
 
ostreamoperator<< (unsigned short arg)
 
ostreamoperator<< (int arg)
 
ostreamoperator<< (unsigned int arg)
 
ostreamoperator<< (long arg)
 
ostreamoperator<< (unsigned long arg)
 
ostreamoperator<< (const void *arg)
 
ostreamoperator<< (pgm arg)
 
ostreamoperator<< (const __FlashStringHelper *arg)
 
int precision () const
 
int precision (unsigned int n)
 
ostreamput (char ch)
 
iostate rdstate () const
 
ostreamseekp (pos_type pos)
 
ostreamseekp (off_type off, seekdir way)
 
fmtflags setf (fmtflags fl)
 
fmtflags setf (fmtflags fl, fmtflags mask)
 
void setstate (iostate state)
 
pos_type tellp ()
 
void unsetf (fmtflags fl)
 
unsigned width ()
 
unsigned width (unsigned n)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const fmtflags adjustfield = left | right | internal
 
static const openmode app = 0X4
 
static const openmode ate = 0X8
 
static const iostate badbit = 0X01
 
static const fmtflags basefield = dec | hex | oct
 
static const openmode binary = 0X10
 
static const fmtflags boolalpha = 0x0100
 
static const fmtflags dec = 0x0008
 
static const iostate eofbit = 0x02
 
static const iostate failbit = 0X04
 
static const iostate goodbit = 0x00
 
static const fmtflags hex = 0x0010
 
static const openmode in = 0X20
 
static const fmtflags internal = 0x0004
 
static const fmtflags left = 0x0001
 
static const fmtflags oct = 0x0020
 
static const openmode out = 0X40
 
static const fmtflags right = 0x0002
 
static const fmtflags showbase = 0x0200
 
static const fmtflags showpoint = 0x0400
 
static const fmtflags showpos = 0x0800
 
static const fmtflags skipws = 0x1000
 
static const openmode trunc = 0X80
 
static const fmtflags uppercase = 0x4000
 
+ + + +

+Protected Member Functions

uint8_t flagsToBase ()
 
+

Detailed Description

+

Output Stream.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef unsigned int ios_base::fmtflags
+
+inherited
+
+

type for format flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef unsigned char ios_base::iostate
+
+inherited
+
+

typedef for iostate bitmask

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef int32_t ios_base::off_type
+
+inherited
+
+

type for relative seek offset

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint8_t ios_base::openmode
+
+inherited
+
+

typedef for iostream open mode

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::pos_type
+
+inherited
+
+

type for absolute seek position

+ +
+
+ +
+
+ + + + + +
+ + + + +
typedef uint32_t ios_base::streamsize
+
+inherited
+
+

unsigned size that can represent maximum file size. (violates spec - should be signed)

+ +
+
+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum ios_base::seekdir
+
+inherited
+
+

enumerated type for the direction of relative seeks

+ + + + +
Enumerator
beg  +

seek relative to the beginning of the stream

+
cur  +

seek relative to the current stream position

+
end  +

seek relative to the end of the stream

+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ios::bad () const
+
+inlineinherited
+
+
Returns
true if bad bit is set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::clear (iostate state = goodbit)
+
+inlineinherited
+
+

Clear iostate bits.

+
Parameters
+ + +
[in]stateThe flags you want to set after clearing all flags.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::eof () const
+
+inlineinherited
+
+
Returns
true if end of file has been reached else false.
+

Warning: An empty file returns false before the first read.

+

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::fail () const
+
+inlineinherited
+
+
Returns
true if any iostate bit other than eof are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char ios_base::fill ()
+
+inlineinherited
+
+
Returns
fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char ios_base::fill (char c)
+
+inlineinherited
+
+

Set fill character

Parameters
+ + +
[in]cnew fill character
+
+
+
Returns
old fill character
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
fmtflags ios_base::flags () const
+
+inlineinherited
+
+
Returns
format flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::flags (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flag
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t ios_base::flagsToBase ()
+
+inlineprotectedinherited
+
+
Returns
current number base
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ostream& ostream::flush ()
+
+inline
+
+

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::good () const
+
+inlineinherited
+
+
Returns
True if no iostate flags are set else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ios::operator const void * () const
+
+inlineinherited
+
+
Returns
null pointer if fail() is true.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ios::operator! () const
+
+inlineinherited
+
+
Returns
true if fail() else false.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf)
+
+inline
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf)
+
+inline
+
+

call manipulator

Parameters
+ + +
[in]pffunction to call
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (bool arg)
+
+inline
+
+

Output bool

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const char * arg)
+
+inline
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const signed char * arg)
+
+inline
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const unsigned char * arg)
+
+inline
+
+

Output string

Parameters
+ + +
[in]argstring to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (char arg)
+
+inline
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (signed char arg)
+
+inline
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned char arg)
+
+inline
+
+

Output character

Parameters
+ + +
[in]argcharacter to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (double arg)
+
+inline
+
+

Output double

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (float arg)
+
+inline
+
+

Output float

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (short arg)
+
+inline
+
+

Output signed short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned short arg)
+
+inline
+
+

Output unsigned short

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (int arg)
+
+inline
+
+

Output signed int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned int arg)
+
+inline
+
+

Output unsigned int

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (long arg)
+
+inline
+
+

Output signed long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (unsigned long arg)
+
+inline
+
+

Output unsigned long

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const void * arg)
+
+inline
+
+

Output pointer

Parameters
+ + +
[in]argvalue to output
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (pgm arg)
+
+inline
+
+

Output a string from flash using the pstr() macro

Parameters
+ + +
[in]argpgm struct pointing to string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::operator<< (const __FlashStringHelper * arg)
+
+inline
+
+

Output a string from flash using the Arduino F() macro.

Parameters
+ + +
[in]argpointing to flash string
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int ios_base::precision () const
+
+inlineinherited
+
+
Returns
precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int ios_base::precision (unsigned int n)
+
+inlineinherited
+
+

set precision

Parameters
+ + +
[in]nnew precision
+
+
+
Returns
old precision
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::put (char ch)
+
+inline
+
+

Puts a character in a stream.

+

The unformatted output function inserts the element ch. It returns *this.

+
Parameters
+ + +
[in]chThe character
+
+
+
Returns
A reference to the ostream object.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
iostate ios::rdstate () const
+
+inlineinherited
+
+
Returns
The iostate flags for this file.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& ostream::seekp (pos_type pos)
+
+inline
+
+

Set the stream position

Parameters
+ + +
[in]posThe absolute position in which to move the write pointer.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& ostream::seekp (off_type off,
seekdir way 
)
+
+inline
+
+

Set the stream position.

+
Parameters
+ + + +
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
+
+
+
Returns
Is always *this. Failure is indicated by the state of *this.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
fmtflags ios_base::setf (fmtflags fl)
+
+inlineinherited
+
+

set format flags

Parameters
+ + +
[in]flnew flags to be or'ed in
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
)
+
+inlineinherited
+
+

modify format flags

Parameters
+ + + +
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios::setstate (iostate state)
+
+inlineinherited
+
+

Set iostate bits.

+
Parameters
+ + +
[in]stateBitts to set.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
pos_type ostream::tellp ()
+
+inline
+
+
Returns
the stream position
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ios_base::unsetf (fmtflags fl)
+
+inlineinherited
+
+

clear format flags

Parameters
+ + +
[in]flflags to be cleared
+
+
+
Returns
old flags
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned ios_base::width ()
+
+inlineinherited
+
+
Returns
width
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
unsigned ios_base::width (unsigned n)
+
+inlineinherited
+
+

set width

Parameters
+ + +
[in]nnew width
+
+
+
Returns
old width
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::adjustfield = left | right | internal
+
+staticinherited
+
+

mask for adjustfield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::app = 0X4
+
+staticinherited
+
+

seek to end before each write

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::ate = 0X8
+
+staticinherited
+
+

open and seek to end immediately after opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::badbit = 0X01
+
+staticinherited
+
+

iostate bad bit for a nonrecoverable error.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::basefield = dec | hex | oct
+
+staticinherited
+
+

mask for basefield

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::binary = 0X10
+
+staticinherited
+
+

perform input and output in binary mode (as opposed to text mode)

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::boolalpha = 0x0100
+
+staticinherited
+
+

use strings true/false for bool

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::dec = 0x0008
+
+staticinherited
+
+

base 10 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::eofbit = 0x02
+
+staticinherited
+
+

iostate bit for end of file reached

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::failbit = 0X04
+
+staticinherited
+
+

iostate fail bit for nonfatal error

+ +
+
+ +
+
+ + + + + +
+ + + + +
const iostate ios_base::goodbit = 0x00
+
+staticinherited
+
+

iostate for no flags

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::hex = 0x0010
+
+staticinherited
+
+

base 16 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::in = 0X20
+
+staticinherited
+
+

open for input

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::internal = 0x0004
+
+staticinherited
+
+

fill between sign/base prefix and number

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::left = 0x0001
+
+staticinherited
+
+

left adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::oct = 0x0020
+
+staticinherited
+
+

base 8 flag

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::out = 0X40
+
+staticinherited
+
+

open for output

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::right = 0x0002
+
+staticinherited
+
+

right adjust fields

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showbase = 0x0200
+
+staticinherited
+
+

use prefix 0X for hex and 0 for oct

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpoint = 0x0400
+
+staticinherited
+
+

always show '.' for floating numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::showpos = 0x0800
+
+staticinherited
+
+

show + sign for nonnegative numbers

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::skipws = 0x1000
+
+staticinherited
+
+

skip initial white space

+ +
+
+ +
+
+ + + + + +
+ + + + +
const openmode ios_base::trunc = 0X80
+
+staticinherited
+
+

truncate an existing stream when opening

+ +
+
+ +
+
+ + + + + +
+ + + + +
const fmtflags ios_base::uppercase = 0x4000
+
+staticinherited
+
+

use uppercase letters in number representations

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • Arduino/libraries/SdFat/ostream.h
  • +
  • Arduino/libraries/SdFat/ostream.cpp
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/classostream__coll__graph.png b/libs/SdFat-master/html/classostream__coll__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..310a306851277581166e0e05e3eb2fa5d8b814e4 GIT binary patch literal 1712 zcmb`IdpOg39LImA2TGdqrN#bmcRB6&N@vx zrDzjat4Frxn8&isdM%TnI__z=rOiB8>3rhp@L-W%?=&{Arh+#$H@I6D<$`b&X*yRb zd-b|-Z3oZbo)!tkGn3A91Exq7n^SWFylWPk){|EwVestyU?NzS2C^JjfT zOW-OZITni~oEJ=O3>HkK9X6?%#r1e!Hr&%DkN_E)kAPU%v%bgLT`0?_+4h{6Fm+%k zD3%}`eR%sh&3+D(ot^cN9}59;Zs3wPdf?l4MRPex!cH z%m{Tp=gk&V$k)~Z5#Gg<&H=lj%6sfw$`_ua2Plol9SbfX^_6GSD3STlJ2D6FC9J)T zQoeLqv0PyHE^8}belCFfxRrJ zJaM#vs#2V+<3Pixq)#n(tbq56YkkXlU`$;j&r^jo;Rst+PjW&p;4o-MyPGv_^yaYW zROVtm9~DI9S{WY+{Ca5UlgrYFOE5$xVrm;;RrotSxe(0;*YJ(ljhu?C418^k8XI-xs5u^qfFZn<>og>XxwdRZ@PJ z6b-`^ZG4f1jNu6!dneMMX7~Zw;%g-eP-U?j#QqnrgkY!a#(TE5Mf)+4Tfguub@H(VImtdfi{X%B^X1o6`Jlcg>b9-)wVCwh@T?0&LA1{^$)w`Z4wlDfsB=pg0O?QmdGwuvR0UNQN@xy;Czip|~` zl+k;vEdY-Xeb<_v$0sQ~3?6Oe=N{nRMGPff{Wsk^U>trxwGiB#Y9}uAjqYj)>8$UAuE~($=NaOInTMq-2ynDTBP$RmFZ=~gqal3& literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/classostream__inherit__graph.png b/libs/SdFat-master/html/classostream__inherit__graph.png new file mode 100755 index 0000000000000000000000000000000000000000..8e5928fd621c0aac9fed8983093afb7e6e0d62b5 GIT binary patch literal 7911 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf.html b/libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf.html new file mode 100755 index 0000000..456eefb --- /dev/null +++ b/libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf.html @@ -0,0 +1,153 @@ + + + + + + +SdFat: Arduino/libraries/SdFat Directory Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
SdFat Directory Reference
+
+
+
+Directory dependency graph for SdFat:
+
+
Arduino/libraries/SdFat
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  ArduinoStream.h
 ArduinoInStream and ArduinoOutStream classes.
 
file  bufstream.h
 ibufstream and obufstream classes
 
file  ios.h
 ios_base and ios classes
 
file  iostream.h
 iostream class
 
file  istream.cpp
 
file  istream.h
 istream class
 
file  MinimumSerial.cpp
 
file  MinimumSerial.h
 
file  ostream.cpp
 
file  ostream.h
 ostream class
 
file  Sd2Card.cpp
 
file  Sd2Card.h
 Sd2Card class for V2 SD/SDHC cards.
 
file  SdBaseFile.cpp
 
file  SdBaseFile.h
 SdBaseFile class.
 
file  SdBaseFilePrint.cpp
 
file  SdFat.cpp
 
file  SdFat.h
 SdFat class.
 
file  SdFatConfig.h
 configuration definitions
 
file  SdFatErrorPrint.cpp
 
file  SdFatmainpage.h
 
file  SdFatUtil.cpp
 
file  SdFatUtil.h
 Useful utility functions.
 
file  SdFile.cpp
 
file  SdFile.h
 SdFile class.
 
file  SdSpi.h
 SdSpi class for V2 SD/SDHC cards.
 
file  SdSpiArduino.cpp
 
file  SdSpiAVR.cpp
 
file  SdSpiSAM3X.cpp
 
file  SdSpiSoft.cpp
 
file  SdSpiTeensy3.cpp
 
file  SdStream.cpp
 
file  SdStream.h
 fstream, ifstream, and ofstream classes
 
file  SdVolume.cpp
 
file  SdVolume.h
 SdVolume class.
 
file  StdioStream.cpp
 
file  StdioStream.h
 StdioStream class.
 
+
+ + + + diff --git a/libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf_dep.png b/libs/SdFat-master/html/dir_1281b15c327061056ab3b326e90c50cf_dep.png new file mode 100755 index 0000000000000000000000000000000000000000..c9c448f8e613685afff290dda69eb49ee443c919 GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^wLo0Y!3HD`d7RY)Qfx`y?k)`fL2$v|<&zm0nC(1W z978JRyuD+XEu1KG{A0b#iqC-yBT7zMbLd)?6zDrGc=6yx(2E5-O0KwOwEJDtZ5A<) zeRE;@f&c*{j=M}wns?u^?l|)DN!8vvw$s%sCq1vb&o445=H0vt`rr3oXq&+Zv=s`n zN^HK@r=_h=|LAn##Dz28mfyW;{_FbIt?cKk_xheceBkQWuTy#3_n)!3b@ywn;NE-7 zWaaC>+49KDom;#8;fJZ$4d0!4u~k9IMck#t(M4Ru^-G@l%DuMhzuwa5dQrJJ@K%?p znC7k*AH-w7Y`S>+t=e|E^Y6s<+4aur-j3TAe|KBz)4#`Oy1p)({Qt2<{qB?7HvQH+ zUu=79Q|CJ${Z+qIpKrf-nzw z?DI11BlkI<>HadlTe|0&dtsqY_)4jVJ>M;7eQ7&W`o_%G?{4k&+|yn~dsZv&Qdq>T zL=3SYL4LZGO-;JE_T;YyeBukcFRTQtlN_EZ!7e7yQTMEw_X17(-~Ru0SAtd?G>sLw$SR0JT)ZJ}Ed5#d+w#jV|CFvWZhRlEV`H@W_`Kr|#o=k+ jiZALj!ICorL)07j^FPY+D(+7E1`_mi^>bP0l+XkKOb4#( literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160.html b/libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160.html new file mode 100755 index 0000000..6ee4dbb --- /dev/null +++ b/libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160.html @@ -0,0 +1,67 @@ + + + + + + +SdFat: Arduino/libraries Directory Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
libraries Directory Reference
+
+
+
+Directory dependency graph for libraries:
+
+
Arduino/libraries
+ + +
+ + + + +

+Directories

directory  SdFat
 
+
+ + + + diff --git a/libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png b/libs/SdFat-master/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png new file mode 100755 index 0000000000000000000000000000000000000000..423a5e8157779457264eb38236ea54ab36581e2f GIT binary patch literal 1322 zcmeAS@N?(olHy`uVBq!ia0vp^pMiJ^2OE%dW0$`Rq}Y|gW!U_%O^81u-x}_ zaSW-L^Y*T7M@YCt!^8YTNnF9cs1wCK0h<(z>W*gKlUH^AhGRts!*|` znyXPoYqkAxzv7KKKTIdT3zoZ`197n;r=hb@Qk%*V9?uS-;}BlKA>oo6FJ1Eb+V_uN zUdosHvb*l6`}^9W{@>)NXRCCd?JlqHxV+rHC;7PDifpfpE02%QE_{FQ{LiGmjvbYs zZ||u2nKd`qDLL=X4k`V(H`mPOe+LB`Hk%gh_|N+3^QboO}%Gt-==Tey<7VA>({>eOFd@Ko?ZC++uLQ+9UHs4cfLP0Rohp8p+|Lf zwXc4oQ{{OgJqLBm+K!!YSB{)u8n@*lRYQI$ z8|L%cN6hk!ZxZ(N+W{pbqr$jf>4->uIr`F+`LdSk8`JP%-tPH^VHA>mSZpRw%4h24S=XX_oe ztogBb*>neBB>p_q>YtqZc6!CvSE-l1HLrCFFP|01#HywDZ0gjhJ4#-DUN)W4`*<}p z + + + + + +SdFat: Arduino Directory Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Arduino Directory Reference
+
+
+
+Directory dependency graph for Arduino:
+
+
Arduino
+ + +
+ + + + +

+Directories

directory  libraries
 
+
+ + + + diff --git a/libs/SdFat-master/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png b/libs/SdFat-master/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png new file mode 100755 index 0000000000000000000000000000000000000000..5422742492834c9aaf2bd3e31d98af5ec9724b1c GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^cY!#SgAGWYjD5xgq}Y|gW!U_%O^81Fq?Y1 zIEGZrd3)EsTewojZDF-LiSt zryYkL>$rXhN!fVY>GW5L)l)6ZJ=JDD@vNJCo?Xmn<{A02&#CiNPUo=zZG?jjY@z4h zzIQva{&3-${I&i``R^6v z?Csv|mex3QdHM0e|NjEl*S^tt8Pm|`!hRAHRn=SEyL$ES{G{h!SFbrd_4%WtKfe4q z|Kt6$wWaepwWo>QJ@-0XkYCP4=Eu~HVc*{!Z7t7t+0J@tQFlkj-@hG)4_|RUwCv+7 zzDb=#BT>QF&`{(2^{*;w@=c=NR9`OL?fN}_lF}mS@ata{`T`eST+wy;a@EqrIrI4b zSI5Vc1nhdWC|mmPs#U-4|9yV?Y~hyE$+xd<&o$4!Yi7CsS8qJ4`{Gq!SKZjNey8tk zJN38emv;G1`)wW+wqVt&{KpS|ysf;pRkyq{=6Ws9!JiqDg7@9dJkzkKi~s!1sL%Rk z+3ini+V8xso4ob3+m{!{bGjpS#lce3m!9|4+k%{Cxql4bRjFgegR7; z^+P-M`p3K)k(|EP%RbVI+f(<%9ND5UT`;>?UbT0ptBd(d-ihmy@9+6NbL*Yby8>sb zjQaO4wmiQr_FhS*UD~xG&22?{T1tgvRfI`Lr@P->TH3LAamT7pSHFo0ew`|RxlU${ z|1Ej7Uw_{8-}qTEsdUGqE7R8>xj8rfTCJ3dNB6ta=eKX>W0gLeZRMecfv){7-u3*wfX|Wt~$(69BRlr+)wd literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/doxygen.css b/libs/SdFat-master/html/doxygen.css new file mode 100755 index 0000000..02e8b01 --- /dev/null +++ b/libs/SdFat-master/html/doxygen.css @@ -0,0 +1,1440 @@ +/* The standard CSS for doxygen 1.8.8 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/libs/SdFat-master/html/doxygen.png b/libs/SdFat-master/html/doxygen.png new file mode 100755 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/dynsections.js b/libs/SdFat-master/html/dynsections.js new file mode 100755 index 0000000..85e1836 --- /dev/null +++ b/libs/SdFat-master/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +SdFat: File List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + +
  Arduino
  libraries
  SdFat
 ArduinoStream.hArduinoInStream and ArduinoOutStream classes
 bufstream.hibufstream and obufstream classes
 ios.hios_base and ios classes
 iostream.hiostream class
 istream.histream class
 ostream.hostream class
 Sd2Card.hSd2Card class for V2 SD/SDHC cards
 SdBaseFile.hSdBaseFile class
 SdFat.hSdFat class
 SdFatConfig.hConfiguration definitions
 SdFatUtil.hUseful utility functions
 SdFile.hSdFile class
 SdSpi.hSdSpi class for V2 SD/SDHC cards
 SdStream.hfstream, ifstream, and ofstream classes
 SdVolume.hSdVolume class
 StdioStream.hStdioStream class
+
+
+ + + + diff --git a/libs/SdFat-master/html/ftv2blank.png b/libs/SdFat-master/html/ftv2blank.png new file mode 100755 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2doc.png b/libs/SdFat-master/html/ftv2doc.png new file mode 100755 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2folderclosed.png b/libs/SdFat-master/html/ftv2folderclosed.png new file mode 100755 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2lastnode.png b/libs/SdFat-master/html/ftv2lastnode.png new file mode 100755 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2link.png b/libs/SdFat-master/html/ftv2link.png new file mode 100755 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2mlastnode.png b/libs/SdFat-master/html/ftv2mlastnode.png new file mode 100755 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2mnode.png b/libs/SdFat-master/html/ftv2mnode.png new file mode 100755 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2node.png b/libs/SdFat-master/html/ftv2node.png new file mode 100755 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2plastnode.png b/libs/SdFat-master/html/ftv2plastnode.png new file mode 100755 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2pnode.png b/libs/SdFat-master/html/ftv2pnode.png new file mode 100755 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2splitbar.png b/libs/SdFat-master/html/ftv2splitbar.png new file mode 100755 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ftv2vertline.png b/libs/SdFat-master/html/ftv2vertline.png new file mode 100755 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/libs/SdFatBeta20120108/html/functions.html b/libs/SdFat-master/html/functions.html similarity index 51% rename from libs/SdFatBeta20120108/html/functions.html rename to libs/SdFat-master/html/functions.html index c821275..7099dbc 100755 --- a/libs/SdFatBeta20120108/html/functions.html +++ b/libs/SdFat-master/html/functions.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -81,7 +86,7 @@

- a -

- +
+ + diff --git a/libs/SdFat-master/html/functions_b.html b/libs/SdFat-master/html/functions_b.html new file mode 100755 index 0000000..d067823 --- /dev/null +++ b/libs/SdFat-master/html/functions_b.html @@ -0,0 +1,124 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x63.html b/libs/SdFat-master/html/functions_c.html similarity index 59% rename from libs/SdFatBeta20120108/html/functions_0x63.html rename to libs/SdFat-master/html/functions_c.html index 3b780cf..0cd21f0 100755 --- a/libs/SdFatBeta20120108/html/functions_0x63.html +++ b/libs/SdFat-master/html/functions_c.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -93,18 +98,26 @@

- c -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_0x64.html b/libs/SdFat-master/html/functions_d.html similarity index 58% rename from libs/SdFatBeta20120108/html/functions_0x64.html rename to libs/SdFat-master/html/functions_d.html index dd57be4..21b3ed5 100755 --- a/libs/SdFatBeta20120108/html/functions_0x64.html +++ b/libs/SdFat-master/html/functions_d.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -101,17 +106,13 @@

- d -

-
- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_0x65.html b/libs/SdFat-master/html/functions_e.html similarity index 59% rename from libs/SdFatBeta20120108/html/functions_0x65.html rename to libs/SdFat-master/html/functions_e.html index 130ed15..9675399 100755 --- a/libs/SdFatBeta20120108/html/functions_0x65.html +++ b/libs/SdFat-master/html/functions_e.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -77,18 +82,6 @@

- e -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_enum.html b/libs/SdFat-master/html/functions_enum.html similarity index 71% rename from libs/SdFatBeta20120108/html/functions_enum.html rename to libs/SdFat-master/html/functions_enum.html index da1ca15..269b4e8 100755 --- a/libs/SdFatBeta20120108/html/functions_enum.html +++ b/libs/SdFat-master/html/functions_enum.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Enumerations - + + + - -
+
-
SdFat
+
SdFat +
+ + -
+
  -
- + + + diff --git a/libs/SdFatBeta20120108/html/functions_eval.html b/libs/SdFat-master/html/functions_eval.html similarity index 74% rename from libs/SdFatBeta20120108/html/functions_eval.html rename to libs/SdFat-master/html/functions_eval.html index 7a2d5c6..76be408 100755 --- a/libs/SdFatBeta20120108/html/functions_eval.html +++ b/libs/SdFat-master/html/functions_eval.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Enumerator - + + + - -
+
-
SdFat
+
SdFat +
+ + -
+
  -
- + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x66.html b/libs/SdFat-master/html/functions_f.html similarity index 50% rename from libs/SdFatBeta20120108/html/functions_0x66.html rename to libs/SdFat-master/html/functions_f.html index 6e2faed..09dac14 100755 --- a/libs/SdFatBeta20120108/html/functions_0x66.html +++ b/libs/SdFat-master/html/functions_f.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -86,28 +91,8 @@

- f -

- +
+ + diff --git a/libs/SdFat-master/html/functions_func.html b/libs/SdFat-master/html/functions_func.html new file mode 100755 index 0000000..c761ead --- /dev/null +++ b/libs/SdFat-master/html/functions_func.html @@ -0,0 +1,101 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- a -

+
+ + + + diff --git a/libs/SdFat-master/html/functions_func_b.html b/libs/SdFat-master/html/functions_func_b.html new file mode 100755 index 0000000..e8afb28 --- /dev/null +++ b/libs/SdFat-master/html/functions_func_b.html @@ -0,0 +1,108 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- b -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x63.html b/libs/SdFat-master/html/functions_func_c.html similarity index 59% rename from libs/SdFatBeta20120108/html/functions_func_0x63.html rename to libs/SdFat-master/html/functions_func_c.html index f86520f..0481b4b 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x63.html +++ b/libs/SdFat-master/html/functions_func_c.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -88,14 +95,22 @@

- c -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x64.html b/libs/SdFat-master/html/functions_func_d.html similarity index 55% rename from libs/SdFatBeta20120108/html/functions_func_0x64.html rename to libs/SdFat-master/html/functions_func_d.html index b998606..920fefa 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x64.html +++ b/libs/SdFat-master/html/functions_func_d.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -90,9 +97,12 @@

- d -

-
- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x65.html b/libs/SdFat-master/html/functions_func_e.html similarity index 60% rename from libs/SdFatBeta20120108/html/functions_func_0x65.html rename to libs/SdFat-master/html/functions_func_e.html index 82268e0..8f4acd4 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x65.html +++ b/libs/SdFat-master/html/functions_func_e.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -106,9 +113,12 @@

- e -

-
- +
+ + diff --git a/libs/SdFat-master/html/functions_func_f.html b/libs/SdFat-master/html/functions_func_f.html new file mode 100755 index 0000000..9cb22c4 --- /dev/null +++ b/libs/SdFat-master/html/functions_func_f.html @@ -0,0 +1,171 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- f -

+
+ + + + diff --git a/libs/SdFat-master/html/functions_func_g.html b/libs/SdFat-master/html/functions_func_g.html new file mode 100755 index 0000000..03260e2 --- /dev/null +++ b/libs/SdFat-master/html/functions_func_g.html @@ -0,0 +1,116 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- g -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x69.html b/libs/SdFat-master/html/functions_func_i.html similarity index 55% rename from libs/SdFatBeta20120108/html/functions_func_0x69.html rename to libs/SdFat-master/html/functions_func_i.html index c47cec3..fa8c2a9 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x69.html +++ b/libs/SdFat-master/html/functions_func_i.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -81,12 +88,11 @@

- i -

- +
+ + diff --git a/libs/SdFat-master/html/functions_func_l.html b/libs/SdFat-master/html/functions_func_l.html new file mode 100755 index 0000000..c6631fd --- /dev/null +++ b/libs/SdFat-master/html/functions_func_l.html @@ -0,0 +1,97 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- l -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x6d.html b/libs/SdFat-master/html/functions_func_m.html similarity index 50% rename from libs/SdFatBeta20120108/html/functions_func_0x6d.html rename to libs/SdFat-master/html/functions_func_m.html index 4b7234d..0927745 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x6d.html +++ b/libs/SdFat-master/html/functions_func_m.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -76,9 +83,12 @@

- m -

-
- +
+ + diff --git a/libs/SdFat-master/html/functions_func_n.html b/libs/SdFat-master/html/functions_func_n.html new file mode 100755 index 0000000..76706f6 --- /dev/null +++ b/libs/SdFat-master/html/functions_func_n.html @@ -0,0 +1,93 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- n -

    +
  • name() +: File +
  • +
+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x6f.html b/libs/SdFat-master/html/functions_func_o.html similarity index 52% rename from libs/SdFatBeta20120108/html/functions_func_0x6f.html rename to libs/SdFat-master/html/functions_func_o.html index 107da6e..1849b73 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x6f.html +++ b/libs/SdFat-master/html/functions_func_o.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -78,18 +85,24 @@

- o -

- +
+ + diff --git a/libs/SdFat-master/html/functions_func_p.html b/libs/SdFat-master/html/functions_func_p.html new file mode 100755 index 0000000..9a26c39 --- /dev/null +++ b/libs/SdFat-master/html/functions_func_p.html @@ -0,0 +1,151 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- p -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x72.html b/libs/SdFat-master/html/functions_func_r.html similarity index 54% rename from libs/SdFatBeta20120108/html/functions_func_0x72.html rename to libs/SdFat-master/html/functions_func_r.html index 72d5477..a273679 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x72.html +++ b/libs/SdFat-master/html/functions_func_r.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -75,7 +82,10 @@

- r -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x73.html b/libs/SdFat-master/html/functions_func_s.html similarity index 59% rename from libs/SdFatBeta20120108/html/functions_func_0x73.html rename to libs/SdFat-master/html/functions_func_s.html index 7c44433..71f287e 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x73.html +++ b/libs/SdFat-master/html/functions_func_s.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
 

- s -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x74.html b/libs/SdFat-master/html/functions_func_t.html similarity index 53% rename from libs/SdFatBeta20120108/html/functions_func_0x74.html rename to libs/SdFat-master/html/functions_func_t.html index a458137..5ec0530 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x74.html +++ b/libs/SdFat-master/html/functions_func_t.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -85,13 +92,16 @@

- t -

-
- +
+ + diff --git a/libs/SdFat-master/html/functions_func_u.html b/libs/SdFat-master/html/functions_func_u.html new file mode 100755 index 0000000..53b9fea --- /dev/null +++ b/libs/SdFat-master/html/functions_func_u.html @@ -0,0 +1,96 @@ + + + + + + +SdFat: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- u -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x76.html b/libs/SdFat-master/html/functions_func_v.html similarity index 51% rename from libs/SdFatBeta20120108/html/functions_func_0x76.html rename to libs/SdFat-master/html/functions_func_v.html index 5e0e828..8d4ccbc 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x76.html +++ b/libs/SdFat-master/html/functions_func_v.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -81,9 +88,12 @@

- v -

-
- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_func_0x77.html b/libs/SdFat-master/html/functions_func_w.html similarity index 52% rename from libs/SdFatBeta20120108/html/functions_func_0x77.html rename to libs/SdFat-master/html/functions_func_w.html index b6e08a3..49ef68d 100755 --- a/libs/SdFatBeta20120108/html/functions_func_0x77.html +++ b/libs/SdFat-master/html/functions_func_w.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Functions - + + + - -
+
-
SdFat
+
SdFat +
+ + +
  @@ -75,11 +82,10 @@

- w -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_0x67.html b/libs/SdFat-master/html/functions_g.html similarity index 51% rename from libs/SdFatBeta20120108/html/functions_0x67.html rename to libs/SdFat-master/html/functions_g.html index e8c33ed..998e007 100755 --- a/libs/SdFatBeta20120108/html/functions_0x67.html +++ b/libs/SdFat-master/html/functions_g.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -80,6 +85,9 @@

- g -

- +
+ + diff --git a/libs/SdFat-master/html/functions_h.html b/libs/SdFat-master/html/functions_h.html new file mode 100755 index 0000000..c59e55d --- /dev/null +++ b/libs/SdFat-master/html/functions_h.html @@ -0,0 +1,94 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x69.html b/libs/SdFat-master/html/functions_i.html similarity index 61% rename from libs/SdFatBeta20120108/html/functions_0x69.html rename to libs/SdFat-master/html/functions_i.html index 7db5424..95bff74 100755 --- a/libs/SdFatBeta20120108/html/functions_0x69.html +++ b/libs/SdFat-master/html/functions_i.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -87,11 +92,11 @@

- i -

- +
+ + diff --git a/libs/SdFat-master/html/functions_l.html b/libs/SdFat-master/html/functions_l.html new file mode 100755 index 0000000..de79b66 --- /dev/null +++ b/libs/SdFat-master/html/functions_l.html @@ -0,0 +1,101 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x6d.html b/libs/SdFat-master/html/functions_m.html similarity index 50% rename from libs/SdFatBeta20120108/html/functions_0x6d.html rename to libs/SdFat-master/html/functions_m.html index 47146ff..20324bf 100755 --- a/libs/SdFatBeta20120108/html/functions_0x6d.html +++ b/libs/SdFat-master/html/functions_m.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -77,24 +82,17 @@

- m -

-
- +
+ + diff --git a/libs/SdFat-master/html/functions_n.html b/libs/SdFat-master/html/functions_n.html new file mode 100755 index 0000000..4e25c58 --- /dev/null +++ b/libs/SdFat-master/html/functions_n.html @@ -0,0 +1,94 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

    +
  • name() +: File +
  • +
+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x6f.html b/libs/SdFat-master/html/functions_o.html similarity index 55% rename from libs/SdFatBeta20120108/html/functions_0x6f.html rename to libs/SdFat-master/html/functions_o.html index ccea898..045bb81 100755 --- a/libs/SdFatBeta20120108/html/functions_0x6f.html +++ b/libs/SdFat-master/html/functions_o.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -80,10 +85,6 @@

- o -

- +
+ + diff --git a/libs/SdFat-master/html/functions_p.html b/libs/SdFat-master/html/functions_p.html new file mode 100755 index 0000000..15d50c2 --- /dev/null +++ b/libs/SdFat-master/html/functions_p.html @@ -0,0 +1,162 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x72.html b/libs/SdFat-master/html/functions_r.html similarity index 54% rename from libs/SdFatBeta20120108/html/functions_0x72.html rename to libs/SdFat-master/html/functions_r.html index 29c64ba..ee333b6 100755 --- a/libs/SdFatBeta20120108/html/functions_0x72.html +++ b/libs/SdFat-master/html/functions_r.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -78,7 +83,10 @@

- r -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_0x73.html b/libs/SdFat-master/html/functions_s.html similarity index 61% rename from libs/SdFatBeta20120108/html/functions_0x73.html rename to libs/SdFat-master/html/functions_s.html index cfaf965..a7fdd85 100755 --- a/libs/SdFatBeta20120108/html/functions_0x73.html +++ b/libs/SdFat-master/html/functions_s.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:

- s -

- +
+ + diff --git a/libs/SdFat-master/html/functions_t.html b/libs/SdFat-master/html/functions_t.html new file mode 100755 index 0000000..ef444d5 --- /dev/null +++ b/libs/SdFat-master/html/functions_t.html @@ -0,0 +1,111 @@ + + + + + + +SdFat: Class Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_type.html b/libs/SdFat-master/html/functions_type.html similarity index 76% rename from libs/SdFatBeta20120108/html/functions_type.html rename to libs/SdFat-master/html/functions_type.html index 4f06b7e..ee55554 100755 --- a/libs/SdFatBeta20120108/html/functions_type.html +++ b/libs/SdFat-master/html/functions_type.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - Typedefs - + + + - -
+
-
SdFat
+
SdFat +
+ + -
+
 
  • fmtflags @@ -66,9 +72,12 @@ : ios_base
-
- + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x75.html b/libs/SdFat-master/html/functions_u.html similarity index 51% rename from libs/SdFatBeta20120108/html/functions_0x75.html rename to libs/SdFat-master/html/functions_u.html index 2790d8f..4579ed2 100755 --- a/libs/SdFatBeta20120108/html/functions_0x75.html +++ b/libs/SdFat-master/html/functions_u.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:

- u -

-
- +
+ + diff --git a/libs/SdFatBeta20120108/html/functions_0x76.html b/libs/SdFat-master/html/functions_v.html similarity index 51% rename from libs/SdFatBeta20120108/html/functions_0x76.html rename to libs/SdFat-master/html/functions_v.html index a3adf53..17db8a3 100755 --- a/libs/SdFatBeta20120108/html/functions_0x76.html +++ b/libs/SdFat-master/html/functions_v.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -80,21 +85,16 @@

- v -

-
- +
+ + diff --git a/libs/SdFat-master/html/functions_vars.html b/libs/SdFat-master/html/functions_vars.html new file mode 100755 index 0000000..9038711 --- /dev/null +++ b/libs/SdFat-master/html/functions_vars.html @@ -0,0 +1,274 @@ + + + + + + +SdFat: Class Members - Variables + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/functions_0x77.html b/libs/SdFat-master/html/functions_w.html similarity index 55% rename from libs/SdFatBeta20120108/html/functions_0x77.html rename to libs/SdFat-master/html/functions_w.html index 328cede..1aa1246 100755 --- a/libs/SdFatBeta20120108/html/functions_0x77.html +++ b/libs/SdFat-master/html/functions_w.html @@ -2,24 +2,30 @@ + + SdFat: Class Members - + + + - -
+
-
SdFat
+
SdFat +
+ + +
Here is a list of all documented class members with links to the class documentation for each member:
@@ -81,12 +86,10 @@

- w -

- +
+ + diff --git a/libs/SdFatBeta20120108/html/globals.html b/libs/SdFat-master/html/globals.html similarity index 53% rename from libs/SdFatBeta20120108/html/globals.html rename to libs/SdFat-master/html/globals.html index 7ee68b4..26d541a 100755 --- a/libs/SdFatBeta20120108/html/globals.html +++ b/libs/SdFat-master/html/globals.html @@ -2,24 +2,30 @@ + + SdFat: File Members - + + + - -
+
-
SdFat
+
SdFat +
+ + -
+
Here is a list of all documented file members with links to the documentation:

- a -

@@ -78,85 +83,40 @@

- b -

- d -

- e -

@@ -165,48 +125,6 @@

- f -

- + + + diff --git a/libs/SdFat-master/html/globals_defs.html b/libs/SdFat-master/html/globals_defs.html new file mode 100755 index 0000000..63a850c --- /dev/null +++ b/libs/SdFat-master/html/globals_defs.html @@ -0,0 +1,224 @@ + + + + + + +SdFat: File Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- a -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+ + + + diff --git a/libs/SdFatBeta20120108/html/globals_func.html b/libs/SdFat-master/html/globals_func.html similarity index 51% rename from libs/SdFatBeta20120108/html/globals_func.html rename to libs/SdFat-master/html/globals_func.html index 2a295eb..8414775 100755 --- a/libs/SdFatBeta20120108/html/globals_func.html +++ b/libs/SdFat-master/html/globals_func.html @@ -2,24 +2,30 @@ + + SdFat: File Members - + + + - -
+
-
SdFat
+
SdFat +
+ + - -
+
-  - -

- b -

- + + + diff --git a/libs/SdFat-master/html/globals_vars.html b/libs/SdFat-master/html/globals_vars.html new file mode 100755 index 0000000..0ea0e26 --- /dev/null +++ b/libs/SdFat-master/html/globals_vars.html @@ -0,0 +1,214 @@ + + + + + + +SdFat: File Members + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + + +
+
+  + +

- f -

+ + +

- s -

+ + +

- u -

+
+ + + + diff --git a/libs/SdFat-master/html/graph_legend.html b/libs/SdFat-master/html/graph_legend.html new file mode 100755 index 0000000..9116c02 --- /dev/null +++ b/libs/SdFat-master/html/graph_legend.html @@ -0,0 +1,113 @@ + + + + + + +SdFat: Graph Legend + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + +
+
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

1 /*! Invisible class because of truncation */
+
2 class Invisible { };
+
3 
+
4 /*! Truncated class, inheritance relation is hidden */
+
5 class Truncated : public Invisible { };
+
6 
+
7 /* Class not documented with doxygen comments */
+
8 class Undocumented { };
+
9 
+
10 /*! Class that is inherited using public inheritance */
+
11 class PublicBase : public Truncated { };
+
12 
+
13 /*! A template class */
+
14 template<class T> class Templ { };
+
15 
+
16 /*! Class that is inherited using protected inheritance */
+
17 class ProtectedBase { };
+
18 
+
19 /*! Class that is inherited using private inheritance */
+
20 class PrivateBase { };
+
21 
+
22 /*! Class that is used by the Inherited class */
+
23 class Used { };
+
24 
+
25 /*! Super class that inherits a number of other classes */
+
26 class Inherited : public PublicBase,
+
27  protected ProtectedBase,
+
28  private PrivateBase,
+
29  public Undocumented,
+
30  public Templ<int>
+
31 {
+
32  private:
+
33  Used *m_usedClass;
+
34 };
+

This will result in the following graph:

+
+ +
+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a grey border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/libs/SdFat-master/html/graph_legend.png b/libs/SdFat-master/html/graph_legend.png new file mode 100755 index 0000000000000000000000000000000000000000..40d66dfc1d39a77302897144218f144a58e95515 GIT binary patch literal 12430 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 S1pL4NO<7)DuI7b#`2Pa6_HCE| literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/hierarchy.html b/libs/SdFat-master/html/hierarchy.html new file mode 100755 index 0000000..bb033a7 --- /dev/null +++ b/libs/SdFat-master/html/hierarchy.html @@ -0,0 +1,100 @@ + + + + + + +SdFat: Class Hierarchy + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ccache_tCache for an SD data block
 CFatPos_tInternal type for istream do not use in user apps
 Cios_baseBase class for all streams
 CiosError and state information for all streams
 CistreamInput Stream
 CibufstreamParse a char string
 CArduinoInStreamInput stream for Arduino Stream objects
 CifstreamSD file input stream
 CiostreamInput/Output stream
 CfstreamSD file input/output stream
 CostreamOutput Stream
 CArduinoOutStreamOutput stream for Arduino Print objects
 CiostreamInput/Output stream
 CobufstreamFormat a char string
 CofstreamSD card output stream
 CSdStreamBaseBase class for SD streams
 CfstreamSD file input/output stream
 CifstreamSD file input stream
 CofstreamSD card output stream
 CpgmType for string in flash
 CPrint
 CMinimumSerialMini serial class for the SdFat library
 CSdFileSdBaseFile with Arduino Stream
 CSd2CardRaw access to SD and SDHC flash memory cards
 CSdBaseFileBase class for SdFile with Print and C++ streams
 CFileArduino SD.h style File API
 CSdFileSdBaseFile with Arduino Stream
 CSdStreamBaseBase class for SD streams
 CStdioStreamStdioStream implements a minimal stdio stream
 CSdFatIntegration class for the SdFat library
 CSdSpiSPI class for access to SD and SDHC flash memory cards
 CSdVolumeAccess FAT16 and FAT32 volumes on SD and SDHC cards
 CsetfillType for setfill manipulator
 CsetprecisionType for setprecision manipulator
 CsetwType for setw manipulator
 CStream
 CFileArduino SD.h style File API
+
+
+ + + + diff --git a/libs/SdFat-master/html/index.html b/libs/SdFat-master/html/index.html new file mode 100755 index 0000000..1d025db --- /dev/null +++ b/libs/SdFat-master/html/index.html @@ -0,0 +1,143 @@ + + + + + + +SdFat: Arduino SdFat Library + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + +
+
+
+
Arduino SdFat Library
+
+
+
Copyright © 2012, 2013, 2014 by William Greiman

+Introduction

+

The Arduino SdFat Library is a minimal implementation of FAT16 and FAT32 file systems on SD flash memory cards. Standard SD and high capacity SDHC cards are supported.

+

Experimental support for FAT12 can be enabled by setting FAT12_SUPPORT nonzero in SdFatConfig.h.

+

The SdFat library only supports short 8.3 names.

+

The main classes in SdFat are SdFat, SdBaseFile, SdFile, File, StdioStream, fstream, ifstream, and ofstream.

+

The SdFat class maintains a FAT volume, a current working directory, and simplifies initialization of other classes.

+

The SdBaseFile class provides basic file access functions such as open(), binary read(), binary write(), close(), remove(), and sync(). SdBaseFile is the smallest file class.

+

The SdFile class has all the SdBaseFile class functions plus the Arduino Print class functions.

+

The File class has all the SdBaseFile functions plus the functions in the Arduino SD.h File class. This provides compatibility with the Arduino SD.h library.

+

The StdioStream class implements functions similar to Linux/Unix standard buffered input/output.

+

The fstream class implements C++ iostreams for both reading and writing text files.

+

The ifstream class implements C++ iostreams for reading text files.

+

The ofstream class implements C++ iostreams for writing text files.

+

The classes ibufstream and obufstream format and parse character strings in memory buffers.

+

the classes ArduinoInStream and ArduinoOutStream provide iostream functions for Serial, LiquidCrystal, and other devices.

+

A number of example are provided in the SdFat/examples folder. These were developed to test SdFat and illustrate its use.

+

+Installation

+

You must manually install SdFat by copying the SdFat folder from the download package to the Arduino libraries folder in you sketch book.

+

See the Manual installation section of this guide.

+

http://arduino.cc/en/Guide/Libraries

+

+SdFat Configuration

+

Several configuration options may be changed by editing the SdFatConfig.h file in the SdFat folder.

+

Set SD_FILE_USES_STREAM nonzero to use Stream instead of Print for SdFile. Using Stream will use more flash.

+

To enable SD card CRC checking set USE_SD_CRC nonzero.

+

To use multiple SD cards set USE_MULTIPLE_CARDS nonzero.

+

Set FAT12_SUPPORT nonzero to enable use of FAT12 volumes. FAT12 has not been well tested and requires additional flash.

+

Set USE_ARDUINO_SPI_LIBRARY nonzero to force use of Arduino Standard SPI library. This will override native and software SPI for all boards.

+

Use of software SPI can be enabled for selected boards by setting the symbols AVR_SOFT_SPI, DUE_SOFT_SPI, LEONARDO_SOFT_SPI, MEGA_SOFT_SPI, and TEENSY3_SOFT_SPI.

+

Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature of the standard Arduino SPI library. You must include SPI.h in your sketches when ENABLE_SPI_TRANSACTION is nonzero.

+

Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during SD card busy waits.

+

+SD\SDHC Cards

+

Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and most consumer devices use the 4-bit parallel SD protocol. A card that functions well on A PC or Mac may not work well on the Arduino.

+

Most cards have good SPI read performance but cards vary widely in SPI write performance. Write performance is limited by how efficiently the card manages internal erase/remapping operations. The Arduino cannot optimize writes to reduce erase operations because of its limit RAM.

+

SanDisk cards generally have good write performance. They seem to have more internal RAM buffering than other cards and therefore can limit the number of flash erase operations that the Arduino forces due to its limited RAM.

+

+Hardware Configuration

+

SdFat was developed using an Adafruit Industries Data Logging Shield.

+

The hardware interface to the SD card should not use a resistor based level shifter. SdFat sets the SPI bus frequency to 8 MHz which results in signal rise times that are too slow for the edge detectors in many newer SD card controllers when resistor voltage dividers are used.

+

The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like the 74HC4050N based circuit shown in the file SdLevel.png. The Adafruit Wave Shield uses a 74AHC125N. Gravitech sells SD and MicroSD Card Adapters based on the 74LCX245.

+

If you are using a resistor based level shifter and are having problems try setting the SPI bus frequency to 4 MHz. This can be done by using card.init(SPI_HALF_SPEED) to initialize the SD card.

+

+Bugs and Comments

+

If you wish to report bugs or have comments, send email to fat16.nosp@m.lib@.nosp@m.sbcgl.nosp@m.obal.nosp@m..net.

+

+SdFat Usage

+

SdFat uses a slightly restricted form of short names. Short names are limited to 8 characters followed by an optional period (.) and extension of up to 3 characters. The characters may be any combination of letters and digits. The following special characters are also allowed:

+

$ % ' - _ @ ~ ` ! ( ) { } ^ # &

+

Short names are always converted to upper case and their original case value is lost.

+

An application which writes to a file using print(), println() or write() must call sync() at the appropriate time to force data and directory information to be written to the SD Card. Data and directory information are also written to the SD card when close() is called.

+

Applications must use care calling sync() since 2048 bytes of I/O is required to update file and directory information. This includes writing the current data block, reading the block that contains the directory entry for update, writing the directory block back and reading back the current data block.

+

It is possible to open a file with two or more instances of a file object. A file may be corrupted if data is written to the file by more than one instance of a file object.

+

+How to format SD Cards as FAT Volumes

+

The best way to restore an SD card's format on a PC or Mac is to use SDFormatter which can be downloaded from:

+

http://www.sdcard.org/downloads

+

A formatter sketch, SdFormatter.ino, is included in the SdFat/examples/SdFormatter directory. This sketch attempts to emulate SD Association's SDFormatter.

+

SDFormatter aligns flash erase boundaries with file system structures which reduces write latency and file system overhead.

+

The PC/Mac SDFormatter does not have an option for FAT type so it may format very small cards as FAT12. Use the SdFat formatter to force FAT16 formatting of small cards.

+

Do not format the SD card with an OS utility, OS utilities do not format SD cards in conformance with the SD standard.

+

You should use a freshly formatted SD card for best performance. FAT file systems become slower if many files have been created and deleted. This is because the directory entry for a deleted file is marked as deleted, but is not deleted. When a new file is created, these entries must be scanned before creating the file. Also files can become fragmented which causes reads and writes to be slower.

+

+Examples

+

A number of examples are provided in the SdFat/examples folder. See the html documentation for a list.

+

To access these examples from the Arduino development environment go to: File -> Examples -> SdFat -> <Sketch Name>

+

Compile, upload to your Arduino and click on Serial Monitor to run the example.

+

Here is a list:

+

AnalogBinLogger - Fast AVR ADC logger - see the AnalogBinLoggerExtras folder.

+

bench - A read/write benchmark.

+

cin_cout - Demo of ArduinoInStream and ArduinoOutStream.

+

dataLogger - A simple modifiable data logger.

+

directoryFunctions - Demo of chdir(), ls(), mkdir(), and rmdir().

+

fgets - Demo of the fgets read line/string function.

+

formating - Print a table with various formatting options.

+

getline - Example of getline from section 27.7.1.3 of the C++ standard.

+

LowLatencyLogger - A modifiable data logger for higher data rates.

+

OpenNext - Open all files in the root dir and print their filename.

+

PrintBenchmark - A simple benchmark for printing to a text file.

+

QuickStart - A sketch to quickly test your SD card and SD shield/module.

+

RawWrite - A test of raw write functions for contiguous files.

+

readCSV - Read a comma-separated value file using iostream extractors.

+

ReadWriteSdFat - SdFat version of Arduino SD ReadWrite example.

+

rename - A demo of SdFat::rename(old, new) and SdFile::rename(dirFile, newPath).

+

SdFormatter - This sketch will format an SD or SDHC card.

+

SdInfo - Initialize an SD card and analyze its structure for trouble shooting.

+

StdioBench - Demo and test of stdio style stream.

+

StreamParseInt - Simple demo of parseInt() Stream member function.

+

StressTest - Create and write files until the SD is full.

+

Timestamp - Sets file create, modify, and access timestamps.

+

TwoCards - Example using two SD cards.

+
+ + + + diff --git a/libs/SdFat-master/html/inherit_graph_0.png b/libs/SdFat-master/html/inherit_graph_0.png new file mode 100755 index 0000000000000000000000000000000000000000..4b076b4ff5dea14a8f3a921f30bffe1653b698bd GIT binary patch literal 377 zcmV-<0fzpGP)}V=H)KCX>kz zWRp#R@120nGCPkf8-Nf(2uY;#JU;`tYZkHs9spkUL!ZC_zzM*oWJN1ta&ff-$3T)Z zVW$kfz(KQ$Ekc1pC{PFm3Ta*7Si682tqUwc){nABfmsQi15+@+u6;;PjhXSKdA|3I zGuKDSDbOy;yibjV*2eN&bTik@req6up6exfOLNu9-NGSCOw{UAT1%j--EvTUcb05n zpQM<)RJm1lW6m8o{h-ZzSIo6;=`@w(0gX;!AY4>vsQB_?>ry0SZF?T1g=kJ;Ekggo z>_caZ0#zq7TUZDM3ZXzD6euJ#M0x->twI{72k>(Rd;-4!E&!gTDq11$+653o2-z5a X$e1oA;PjfK00000NkvXXu0mjftcsZl literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_1.png b/libs/SdFat-master/html/inherit_graph_1.png new file mode 100755 index 0000000000000000000000000000000000000000..add8800ede9e20d761faa67c77ba61ee8b2331e9 GIT binary patch literal 402 zcmV;D0d4+?P)-q8@4+tTI5NFI_#O{Gl;4ZnAz48wHj03mEM^C^r@SRc7&Upl0 zX%O|qOK3Tl!Iu@h$*$rWkf;Gj)Bq%E0JTB2gyTfqda`Ba+5|6Aq5sfFW3QFV`py%# z{IY)lo}D_!*w#Z4>**3JU&~r8mrJ*Lidx={i6kq&Ob|5r;aUI+7p&{Q_bRQ?0;6% zzon4!;8S~B59K)+d-s^=@gG3u^xvA=UF$l?u1VCi7l7;^fJ6;Iq6Q#Q1E>wEx3ntu w%L8yIgO;cV;1BqSuINJe-MRoFgb-p8{}%o(cLWl^3jhEB07*qoM6N<$f*3Wq0{{R3 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_10.png b/libs/SdFat-master/html/inherit_graph_10.png new file mode 100755 index 0000000000000000000000000000000000000000..53441c321e2667285778b34cc7a9698547fe3f5f GIT binary patch literal 323 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_3.png b/libs/SdFat-master/html/inherit_graph_3.png new file mode 100755 index 0000000000000000000000000000000000000000..b50aad92f8e2fa3600df9f36d92ea3a59ac9d8cd GIT binary patch literal 324 zcmV-K0lWT*P)eucScF;FfC9-B6p4%- zn{a1?bx(>Coqg8*#Qt``Fbv~I=_2tBa4K1dAa~#Z-28@lBw-IMfvaLsT5N$eaPb>r zV&Nrpr&W<6F4izBSw(G3Y^#{qRxz=yA}Q7l?xDTTd3{oOv2i9dcBq(wqd$UE+bYsxa|}h)bUs1apgP_SCKRtCSXwN^%_TRkW>%%vY_+L7 zMB~eb@TacI){;U}Y)U{CfkSNTX%!RODq{w<0FI>!smYoCfAZh12e6WVC5B-biaY_v WH&FL35K4Ri0000|gW!U_%O^81F#3DC zIEG|2zMXNJ_mF{ri+TsMY{4QfivUj50H&)K7#2yqyV4}$r*J&y59i|}ozFbOn)a5N zO^#j9s?Z|f`P_e3G@%5U9Ia=4HFNpMShyyeDp ze_bET^KwRhcgts9y>qmyN#viV&gAzC*PKY%b3)+Z-<|W#I88%}6?B$_?sWb(*)?M& z)01z3efg}}gO@O1TaS?83{1OTt3 BvBdxY literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_5.png b/libs/SdFat-master/html/inherit_graph_5.png new file mode 100755 index 0000000000000000000000000000000000000000..418bf6feb2af6dd8c7e6a234b5514e810200bc0f GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^u0X8H!3HEnDpiVs6kC$Fy9>jA5L~c#`D6wLMrBVI z$B>N1w=*^h9x~u@t+%+gAdyu{qG_6-hNfg=VnoZNd8t0m4=wJSsRb21{I~nF>O@`l ze;cR7FetVNtSgcHEqEaHltbDh&IhxkiWl8slwq*3QJyuEx54(46wi+OTlU3F0ujfv z9yy3Lx+r>xG`T3Q>3yEux;o^p^A-Q@xTE)3y#pVy)+ML^(Q-I#yGo;$Be-Ld-NA;M zRaZD9eziZbkUIV4{CDr#MpM{_J_1Mi`i#n#YF%vad zI-MrK360w2IgE3bbEUAAt>rWS@;~-ZcJ)>+u?8e7h*;zk7sA%wWnM8=N*E+q?@i3fnI9E?e60UQ9_Ju8}-4S+r34*qE0 z*OEB_2-<^H;XImuobZQes7=7CSZGL5xrmf_Er;2*`C#2>wYM58T1rTbHS#TQ?Ej2gc_?(#evZFhWVPHMcI=h9z18||1msf*O+@$lver6|-U#r=!| z)F-6~l%hZ>3Y4PIcTU*?IF~A926njtH+=tDEctroiXns$V!#Wt1Yy&xrz&m$0000< KMNUMnLSTZva+k*d literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_7.png b/libs/SdFat-master/html/inherit_graph_7.png new file mode 100755 index 0000000000000000000000000000000000000000..792debcaef4c395023cfe3222ed6d69830dc8ed5 GIT binary patch literal 407 zcmV;I0cie-P)$Dq^9catEA~6v1&>EW`th#UYHby_4e}LF?psIwwI8Ws$5d6 z>a7N87*FM_J;Qol9hlqG zKdY(emji&i3~Hv|0sI2^wpO$ee!K+`LI@#U@c>q0KwNP!1z-RG002ovPDHLkV1j#w Bv)ljx literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_8.png b/libs/SdFat-master/html/inherit_graph_8.png new file mode 100755 index 0000000000000000000000000000000000000000..b885d43515c00c4b33681d9b0376dbe7208bfc29 GIT binary patch literal 332 zcmV-S0ki&zP)bhN@Q_rb$hekc9M~2nB`5qT zLoTqQ*j5^8RO@n4S(5Kre{sC^2QcJn4PqV^sj@vSIYB`~KvOfp2W z1m?!#@m$%6l#^eCtOZ!(23QNQ#tpC*V9n|cDBS~k;G`u)m>zhg0yzVozyY{QDKg-0 eEx>Ucr#apZ9w`?w^bHIE0000$ literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherit_graph_9.png b/libs/SdFat-master/html/inherit_graph_9.png new file mode 100755 index 0000000000000000000000000000000000000000..8a0ddeb615fbd89f6a83fa95d3d92d6c0e5cc0a1 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^89=Pc!3HGP-C83Iq}Y|gW!U_%O^81Fh+Q~ zIEG|2zMX!y@Q{H(>wHPALUGNeWR1q;s*@ANES@{DnoL|MT3qBNcyFsp_R`df`#g^~ zesk}hzjYIX6Nh5U1Xi}hKMW66rz*1CXQ+GR=(&KqfuF(rbk_;_&ztRzwe1z!BH`e( z!=o+sw3dgR$O%gbdardMK~Zfg=8hv9={h=!t6uH!##0JYD@<);T3K F0RS9uvGM=_ literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/inherits.html b/libs/SdFat-master/html/inherits.html new file mode 100755 index 0000000..ca43e74 --- /dev/null +++ b/libs/SdFat-master/html/inherits.html @@ -0,0 +1,105 @@ + + + + + + +SdFat: Class Hierarchy + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + + + diff --git a/libs/SdFat-master/html/ios_8h.html b/libs/SdFat-master/html/ios_8h.html new file mode 100755 index 0000000..f5252b8 --- /dev/null +++ b/libs/SdFat-master/html/ios_8h.html @@ -0,0 +1,691 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/ios.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
ios.h File Reference
+
+
+ +

ios_base and ios classes +More...

+
#include <SdBaseFile.h>
+
+Include dependency graph for ios.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

class  ios
 Error and state information for all streams. More...
 
class  ios_base
 Base class for all streams. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

ios_baseboolalpha (ios_base &str)
 
ios_basedec (ios_base &str)
 
ios_basehex (ios_base &str)
 
ios_baseinternal (ios_base &str)
 
ios_baseleft (ios_base &str)
 
ios_basenoboolalpha (ios_base &str)
 
ios_basenoshowbase (ios_base &str)
 
ios_basenoshowpoint (ios_base &str)
 
ios_basenoshowpos (ios_base &str)
 
ios_basenoskipws (ios_base &str)
 
ios_basenouppercase (ios_base &str)
 
ios_baseoct (ios_base &str)
 
ios_baseright (ios_base &str)
 
ios_baseshowbase (ios_base &str)
 
ios_baseshowpoint (ios_base &str)
 
ios_baseshowpos (ios_base &str)
 
ios_baseskipws (ios_base &str)
 
ios_baseuppercase (ios_base &str)
 
+

Detailed Description

+

ios_base and ios classes

+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& boolalpha (ios_basestr)
+
+inline
+
+

function for boolalpha manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& dec (ios_basestr)
+
+inline
+
+

function for dec manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& hex (ios_basestr)
+
+inline
+
+

function for hex manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& internal (ios_basestr)
+
+inline
+
+

function for internal manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& left (ios_basestr)
+
+inline
+
+

function for left manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& noboolalpha (ios_basestr)
+
+inline
+
+

function for noboolalpha manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& noshowbase (ios_basestr)
+
+inline
+
+

function for noshowbase manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& noshowpoint (ios_basestr)
+
+inline
+
+

function for noshowpoint manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& noshowpos (ios_basestr)
+
+inline
+
+

function for noshowpos manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& noskipws (ios_basestr)
+
+inline
+
+

function for noskipws manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& nouppercase (ios_basestr)
+
+inline
+
+

function for nouppercase manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& oct (ios_basestr)
+
+inline
+
+

function for oct manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& right (ios_basestr)
+
+inline
+
+

function for right manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& showbase (ios_basestr)
+
+inline
+
+

function for showbase manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& showpoint (ios_basestr)
+
+inline
+
+

function for showpoint manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& showpos (ios_basestr)
+
+inline
+
+

function for showpos manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& skipws (ios_basestr)
+
+inline
+
+

function for skipws manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ios_base& uppercase (ios_basestr)
+
+inline
+
+

function for uppercase manipulator

Parameters
+ + +
[in]strThe stream
+
+
+
Returns
The stream
+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/ios_8h__dep__incl.png b/libs/SdFat-master/html/ios_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..459ddf101083355c30f01db0e25fc4941604abc8 GIT binary patch literal 21640 zcmb5W2UJu`mo|KwASem~0!pS4P=YAg1_6;IIdlt16cCUcB`3M$BqBKpNNSRRbHVN@#5BIG+y7+;P==CJB4_Yp?qJhSrDM1tDvzme;jwKPyYo=&hC1 zmxR+e*WOY4Ky`&vNlop&BRR6DzwcvUm9q*aw>$OVAo{Z+F@J1r+EL%b9S?Cv|J(dd z18cYQc6yFd=_IB9n}2@XDIxf9Iuks>1TSZ5nRuK|DZt>D?%6pw{K|BJ?<jOtysEV`^_CJQ(VJH@gm2c`JvDSMUGT^ zJVv(}|BI7my2)hQ;@m$YV%ukZibwkIQ+oTSg@-w8L&yP^6M8Nb&U~_ zI;@)B_jGI72dikvmloi)AxWN2HbdQ}o-a+WavKgG{4aKK>FZa#yVWJWjURtAhG^45 zG;0!A%Oxy0jIuvsIh5R8GP4l5P*>y7)VZx(|8tpQm<}}TM6Oxx@HfVHk%*+qBZJYX zJC!wAk7AxqQm}5vSnAJ(b#Z}S#5E)7>?zy{gDFE-mDoDkoSO58>=h%rOnMr}#j1O{ zqTQ%G(dG?dkA?|KjsNKXx8wVJ-@xJ9-0?Tb$=#_HBSJ#N!r5fO4qJF*2UC;q4IywD zNX@P+conn7T`O)j=uu6_+9-$f-m^G%asnhRO#+C?UOwl(n7(C4%Pnsy&B)27k>bY=3{xo4ykqg6=D#haLwQ)!i13`+(qJY z7afd%)Qgvdnf1-%-gk6Ww(HX`?lTFBfQ1jA+e&v8jWW0k=Lj*Jq@iz0)GP|daen0? z8ND5gZzw=s?&keWtZD5ossZ*e%Hmmv2t*$9Crn$5BepQ3z+2W538u~Yyuq#GMXS*a z5!#K5J@^;iQAY6zGK~$pJHB4oqg7(@`5@cR=gG&JR}U#6Y1FxBn)t%JWQJy;*N+;v z^qcBbgm@#fXpg>D-knE(T1Lhq4es2BH#L9 zIG~$s*1@Sw`k!qKKS(HaHN|l|c`Uiqe@E%xG zlJD4ayD)8uE|e+yTWDzRn(_j=ug(Eg>v&92U@V1_B zCqJdjz1mu^T7xc{XgWLo-0JpHF=zjj=_S!(*Vp{l2A$*jQ4& zv3IM5^K!NH!WrE08Q++1239)gDffsdw9*0JcI`I3s8%L|U(DIV)n$&~Y#o-Qz}z#? z4ZLxy&C||V9!3+Po^7)w?oi3)U{PPYi6_lMX`!c~Y_iBIk`&{z->y(9Y1b{R^Tm@~ z%Hh~<_*yDq7g{ZUhj4=2eRg@CK zVA%d(*dL>!rpD&yPi%?oxo1+}EBxBb$0`}T>%J`{15Z1FbQnUN*Skz9PLI?(z@d~` zSy@R->t9`mrdZx+Y813~Dw}U-DVeR9$HD~WUW3@=kH7YyDKYoR79U1^ zEkdGu9dR&weUVAQ7Zafwi38G8;6my#IX|U}Su)cnTbcEv&rl*2dxeP2`1yJ+#@=m= zm_7Qrv$bgJ&hLCv&?)`WpdopZAXkk6K`G7Ud#X9d?hkZnKwFwwd-Lbg&t%~GxXC7g zp1)AACg)~nyEeVlp+oJdk?W@`?MqmJp2zmTnSj<5Z`Yn=zI3t{EgJ%sB#pm0bYp#; zhS#3n3g6Fy*@y?MwT~4-ll9YjW+!XRzzb+p8s00Fq+}cbmg5>23;x`eDlalF5~3!= z8`z$m^!pC5vvq= zC-&(n9|hJ!1yyn_Saf+zC_LhdNvL|8Zp|kSYGQ3NC=s6^J`Z!|E09(Y^O7%=1B_!D z&(TI?lB#;WT|bv!{meL2{fQ{?f8V2vq+Q})Fmx6;e6WFwfYgOwEMg&&CPNkb-*yJYdG^;Q%;rlcp5ifau}QJ zwY=i>ccZXYBG~U`{22zBA@gjjrDb|!B`p*H06mVF3TQtqdP_EjhmF{9%;!nNql zbdLRqUyG`2N>e9R1241&TeBwj_7ywduJ$KMQ8I_`)PT`sW@jI4T0i@v)uF=dsex#G zU5`~lrn@y9+(0!lwCET7SRrhwbHF5Z(Z}CBG7zYnE$;3_G{yHc6#M!67z4IhTA2Uz999pzjR$*ZwKj6z2<*T9slCh9 zxNOQ5s!>H{j5SMmj{g$|NN*qxMTvHWDJf5;tG!Q@tH8YJKzw5uD(e|d=o}ET!!JE$DpGIppiGsZ4gpVfp;;U*~h-)AijBvS(gr z4dyVhmG7SepnK5F1ZCiIpSy|NZAXQ{L$}qK1cT$&i{t^!%mz$txIV9wuqk(N*2{p0Mw9uD!mHFj+}25eRy(6col) zD*0$%LZ>o~;7f2n87^yIRcxA#(n~qQ!ItY!aj@mR+CQ-6X7;~e%Q4*(HcU?(+ce+N ztSE3CN}wi3QUs=k9__DSvkK47Ctv8p~S0uRpB?fXZBaZ%t~4bLm=j z;-Z6RS3f~XuU^6$o?_AYjr#A;Op*iNmuFFXq%Ryb{J`F@$`$sUS59KH{7&})jXm3{Sz?EbUIK@MehEHk)KlF(4e*Tm zjl!SJv?OP&ufcAAx41+5&l|~p=SOOMty+7`bDmY=+}x#vdC-Vbvunm!&eo-RG7h`( zj4txoD;70Td1&T;rITfAqtT=ijV##VV)M;R&EbC16oNt`fD4{wjvaw;0wnHvjx>Re#J#Q#R_#qI>0r^+;eCci~ zM&$OoXk@FL_>^RJdI1BBCoy7PMXUPyJWz1Iccfad#xQD5Hs3vflrLG!yKL|HPucg-8;kAJ_Iq{!Ade{sXJGRRUj@4au$soaz{r@P7W z@o#+alN4toqkbmKb<$|HVh8VimiU|fAHUsydbc!P6*gWT5S&`$1 zW~@y*-e&p5aYgx zG|`~q!G)BSiw`AL@l8p$Z`_1Jm_ML>%_p98kLP}TKHEL8;7&~-hU#0xleX9s>0;g=d^d*~6(hV}7~_o=E}iu1p{ST}$gRMJ({b>i0=v5+hg{s~ zK1(kZayN=T7fIXj{UMD&Gk{y}OO;IkEBcVu@2u2E8YQg(A7F|gV5KRhtL9$QLH)Wk zgObS&%axQoA5*)J2B+mnmicX?${tGekgA0PHc8aw4S;Y`P?q{I4v7tpLU|MA&TM|y z(6KVPoRp9cpP1NY$XEoD1dvscv$K`DGMmaM(+3ZO4#&WB*18v3I;A(Sq0SzQO`Z5) z9u{bLKjW@ivx3A|MMOkFT$w&kFi17@7g{OALQT4aFYTRWz;b9z>E9Sil6jNBuTZnV zzf{Rx9$?5y^x5u5Y@RMU&t25WCxQ91x9*_wx%1UNz2Z_hX%X z^Sa+7MY$hX-lmA$zxtf|{4o`iLe3>yL52{8A)1Je*Jr{X%<)IY3Xl@KPgMapqXocc z<8ojfHB=)`zj2%fV2}xdk}8|`X5_|cd`K#raax?hp4M4BmauXfcVXJ3(qqNmbYfl~UqpkFRb(h5~DQw#n8D1f%)y& z015uI(7y>e1NPXTH$t5^@ISFrV7>0f-kQq^yZXHDbLmTK>t!3iVZyF%FmM2(kj(&d zL3~M>88|S8eCcxgdo4d`PL~G*$E~8X^WYb0SDBxa0;k|%B4|DhniGLQUVF%0<@IPhgH8bchM5D95hU2#E!H(4NJnff!D;om2V)@1B& z`cb~?KIc$2huggfC0_&x&+xCdUJZDS_>Jd6omG@{04>I{DT)iKeteb986QHRqLg!- z@gOa zlPv#{D-~e9#DRsE{{Xi!;txF6KgDyz;y2@(1CkE;7XY&fF> z*g@|AZ8w0`M!o@qF}?How+^`;FiwZf$>(~1WlMxs<39kdi(PUlWaV-J@&bnfn1D6e z0GeI`{J|~YjHNQmNGHVC?@{ac1T%U()ob^Vlunj*cISK8g_n&6D;U>W6`XEqv+glo zZvXO*KvjE{YJIHC{&TQb*2jwW{5bL8Biq25s=%7fz?wa#6QOy}b?X^3=$}uXuum8` z5^dfH|LwQGPsI?$N(S-8^b0Xa@RcI~s5v47Tm&9KarbU`jLyTyX|4oL8&Bj-!>k>Z zmidbR!EnLQ@BaUT;m%EyNF^6su)E3iIH;9M75%5~)(T1Tfa&+S4ldG)q8WDRR_En= z(^WQa31v&jF|d$RIDk%6ZzrJ1IE6?9sEAHDtzZO!@E{vB+w&p+-D4KO5gAc5ZU)9f z2gVaNx3v+AS|pX+P|4Z%s)-3J%AWr&Y+5mLhW-gNRaM9vwZ-uqxRrldrhVYxH_7&f zC?#dtXETuIct2@ip$c$-#N_6z%)XYEw4yG(@ueFAX`!_E2Y}1d0f*{3vw8kpO<9?K z^*wN!jS;aaJ&+%I^7r_)Aa#+(lfyQt4b0_Vq=-I9H`O_e;S{>3eg7a}P@?&DpEG+_0f;14$C99Xf(&1j zm6f-?HMr+7R5~rEsYXQG71p!VspVIgj1)=eem3c}QO%D!Iilu2fxPIU(waXHxF4X+ zt0C=6Gvt`ZlWcev4AV*#Q#+`RT4qn!>4*Oz@-36Yh^p z4jKQ2?f+NI8IuuLU(xh)6t!an{a1h%Ph_B`B8G@LRe0cjrTZUPhO~6J67ip588R5a zVAFJ_DYvsvR~H_GJ4*T}Xv6WEj`GEnQk!>RuIB0|?M&=~hd~odt<+%uo||C83pAEZ ztNXL#%kFBW1rxBHB$De;Z|&qARu6K04I+=0PQ*q><5Ze|98rl*YHjcVVo~+1?ps6H z(R?Njf`RPOb&$nD{h#d7ZFg~A7eq&L!M9uq1B<3wpQVm_TsV&ZNICOGxva-d;eJd~ zhqeAD@KJl+vanxxoJe`wi&nMn?U=#M7SioljeX3Ifalf> z&+4M>a?Q4+(iq?$C);-7LiB)_M@K5yxxf4Knya=+Yqc1;{Yy6Yy>1TD zQI{&Ke9P24Yn*F2o+D>UBlmr$<0BeE16>REn!Trj9Xt=_9Akj!61_5kt2V*5PqZY;^g9YB+(4GW+OhcjVFa+Q1XA67phA+iJsO zWU#|;3$93+eTm<5+)RY+>T$x*fST?^j$EAxZx$NokwUeLPVmtK{AkCkek}{G#d*QO zc3$1Z?&#HQh+Xa z6DPIU@joJz{`iz?I;zw2xaHTi1(?{UfUXaLB%a2~%G>yoq8!cHn&+Q>utQ{Z4=*H* zP8~Xv_L3(G^XD?Mho-6t0uEP3iqAZM^+_Tx;}X3%&-CNR?G)6W_UZKIY+)z?qa%MC zjvu`HW|p2z2R`tSlJfZ5T*ogPTQg=f0l3SSj*HwH@>Hn~@Mzs%9&QdxZ+h|79?Mi? z@)e{|PV@%6F!F}s@*=~Id9LZD*Q8mFVB=VF(|R9GqqaKmp9H&CwR|!}`Rb)eAJ>E^ zEx6w&UV(QG5lxJH#E-I*sc(V3EtvO0(jWh#`{=5SnzSB+LMmT%Crn`36G;FgzZTk6 zEXg#@pI>4hcpF{j>@lNa;X=5h5x*&)yD1TF$ss_JAe1S_l_kpP+=kLPuVl zmCNi#`b}Th_=3O%8e~1TJ*@B7j(YGhj2vYOlcbvW`>~tViRSyO8y-mf6^4RLpi6-J zd`x|Fmfw#+1shk}RQ$v}e_8y{i?qzA=Y2S+6 z=PtIP&YA;x{j1uzj3By37FF`A&Si5Hq{#k&I9`Gio`;^J9{&BPvM-yH4!KAcA2@}y zoO%F2O|JXS(jNX#V;x6*o{H;nZ@?zCR0T*V5^a$p;k#jIJvCW9?fk*(pGZWU{Gnjd z@8&^g#w;vu!2zuHQleU;mz#dX$0uTn7*qnODyFcm7X?4ks~x9r4%30-4ldV|FjB}0 zYHTGTyab`Y-scs5b&PvR zF367$%Zp8UH=&!zS~%X}uI-)o@au02VZX0l;sB5?(1LS=k`?V=Rn<$aJJN0@X{(rX z%qx(VM?Ylo#~psm&^hGl{_@WI(`aA|K_i{{GiX05Qd!Rop;!wtjk?mik9*5)7X)t< z7}(3)cGMA@a-wFY$$x(F$)t1qSMCn-i$f6=+`}1g>2k{EEO>yFUO?w4dM<5DN9Q5; z`~eQNQ(7(v0`$ct@>B^c>Z!voB>448%b8!l0v|~e89DnLr5!KmP=Mtg{yr(T&j#@c z1@QvO#`~QhFKJ}0Tf>Q|jgN5f7ArO!uQYIW$*&V1#&AC^kQPLaU4*Shm;~5EQ!l-HLTMcg z-lWVlg>#2sd;z%_wfQ-J25A(qU4t$aS?CNUfY8E9%MO~rn`EFxh8*75G2YUt>~vf z0@zDk38+1O8=HiN0bDNtDsh4k@*MA*?~T@F&4OW&zsY;1QSf9Wtjj5$O3wsABFKo# z#p?b17-k2_-;Q;%6G+RgI%Y4|*@Z;7XxAV9a;CN9#`P1@sVi}91>^$eW92pk<6~m{ zPhdxe-D+4pHiV{KT1F-7&;8O4T?6wuwCS7zv_z3|_6NMGqGa4;X zrUZzR2Pz>A7G(mtv!I6xv3-EdS9iaC^J)?PX7I?!@3`EyAF)XEg^=VQ!uwEauf+Rq z6qqbu`+Va?2Ith8$nk~5-)R>2)##!dF{~zKhn>nCEWY!Vl%WbBJuxAC!2H|jZ^1zex_F3sHcx9!2)z5NvA$&(& z&SBq7tQaE;U~U4SBH#*nVfk3e1zxamIN!ZgE`oh>wYHw)!{~@f%M{r{`he>RRt{#l zm<0P`J8|9y$4r6$Da^dBML4pawf*32#I4h<2ynp233#mLG%z|1mLL_xfIg&P=9=Hy5XKF<6%2-% z@sIee77po;o_~{-%Uk8n9*5JASTUz?;(!#cNzZ%;>v1ybC6AvcfbD;h2j;z}LAuZw z;;624xroCGERczPYO7Dbw8@TPIW5Uqw2z36W=^qLsSgvwpXnb?*5)4Bu_33Qm=rtc zqA^&R&??4im|RIFm3-+*>E{DQCz8&YpX@)fL%ey_3nBNuKlk_ZVow=1|N7Oy;PQ+i z`k@Vco0QN#9T2yk%dLTw?@h|m2Rn=(c^a3gUg%WjDM#XBi2S9c!Hjy^mS@AiD|0K} zR)Z6mza(V0F;N;82N#i`)pvh`6yIc6(K z7T&ph8i3^nL{r&Ujnuj9Y=}*U0FYYY5#;omi4AkEXjW8fwv5kSq zs`K8Jfgp>)3v<9H!5vVD^WX68Xh@toa-Y!(LFNur0J%NF&IxO!huGX)O+W)vzIU!Y5P6jYWg zZoayy#b)Psl*{k!R{TzQ!wb_@Eyn*yczTyhCnzAAhO;2aXDM($c(E6bIX6r|E>e&; z@YAlJiDGoRM750t^qYk16sDkFcbmIy_JQdf|Aq$;k$S!N8%@nP8}+7pt0js`6fN0- z1i}n;Buw7;da7ZN(HKkvU$MwRiD{(pgoQofz36Vj9~T@{(2Oje#ENG*) z{Q1`=3j_(SaoKxM(-cD`CR?r!C0)sm8}BAMG`hEk19^0t>L}mxLN%X@ix2K#-1E=N z+G(F;W8nd_Gc*u{ZYALa#V{^1;(iA!?yawW))#ecgJ(5hg2qII#m zECG;@xsLyEZiSjR$lMnr=Nkk{(=Qe}`dqT?zLcjjN)AMIc&PHH1+4;tronjip&I|A zXfIQ@!yqPn54sOlZaYfJQEal6M#rglw?)Wzp~DJ`&wIcPq?kc(V+j19^cNf^3*9{$`Te>hM-x#sPA5cs#uE zop+g5ZHAAA!-HP+RX&VBJliPVwy_g`lQEbZXkE)Q9XDB6@H4iy@KKsZ>G5N#pLLbK zydM$@=Kg>rbTe?htN38t`QH@{;`meLU6|u&0qgDwV}J&(B@R4U0?Nd~utvvIrP8#z zz=fm27U4@eci&_i1OKkX!LkDq5A4-Z3Pt;8)syK&IQiA)XU-8kM`h2G4ia#nfsE5s zDo4vc1KYE;*iMG)jXsl=su2Nl_a?eI1~qbt5TQ=@snb~$P}sDOKfat?&ZdQO=m zt__m{g`pPZOgd-bb=yKLJXoSBxZ9ctU6~1>)`5}X5NSGrwKo_jCE1@#chjRBN<&M8VvOg0&Pz`;ktla6qJ=cVj5$r58 zm0Na3=`#T#7o=x|Agc{;1ESfe`P~9I^BV{9;9z~>xBV$6`{7+LA#r+~`V7~GO}2?L z@^!PO^o0SzW0U~w3rV|BqG|bsoZl4B8(+d>k+}sEz%bCk7Gx#MOT84QP4AH=Q4nkY zf=HufUA@0MQ#*n~;l)O~e*Ph(314&n0NwKj$0rXOaq}60TW}fmQc}7k;vcU)39h(l zaF3RDl$%~-Mx2$Em5td6#DwIJEGTU5ZoM_oZu5g&3g0 z$UR(kNa}t_A#x}E;3vUM$n&Ml<2jK5fNRVF$5#!`ybIX>JH};-(>^nAk8{OT$;ls~ zb2IZxA|fU?KZcZ0#;h&%pZsP4Vci}$%{$UXYmf-PSn=N%wN*^;s^J|6L%OGP8pob|5#Y+2cTcDOS!Oc&Lhzcb%S#;fNw7--)y;3I?o2+;Fap`J$Y^2L zFp)o(iWHGsOlWz$M3KW9PSP7Gn~{aBIT|}nC1HjIW}{&547aknbh!d(6U;*rZC+9S zwcI`e&B*gc_!8cB2cSbUgwvw?Ebad2EQuT@5f41Y<&V;WIol{$Gq4rLW%~6nog{_5 zQk)ml1Tn%iG{wbtykzS5D<3O{6vydioShp^J)q(!)&}33i*fy{=F;{d^Lx1*Dod@OaN|dnsw;iloH#aF+~A1X&!&HHfoz=D#^<%fAC8Y_gCm z^qovE@lO~pvJ?0pu(?Y^pt>LBZfZnSgAS%_A47dfu3VwAK9AHItm?O7_a7-;QJAm~IbZC+1e-XK;xqrv{GeI?j<*9W3;!VOH z1itDEl-}{gQO_11Ga$u>e=CsF0}lSw6D*PlI5&Y>_kFUp-? z4eDXsEzJJy=i%LtU{E$DCS$yz%%VcO^iC!t3ga*UO(_-0uj3eLL0Kt6XrYmQ5CwLwic^_x7c- z*MKv1Pb5fQFN=uKwv-?(_o#t8HG2gwAWRV!O}5Tg41)!zSM=FgRv& zrgxh$Oo>&H;@*i|yos7sgV%nvlcH*bi|~WsFbFHKYYCpH>F!ky6#h{-K|V`bq3NzeopwgI|2x>JR@8QDRaQg zy8eE{*Jk>MEKUM*EB^IMIT)v4rHj?Y4*KSem_l&Iap*q=EI|cWb~aJ>+Pi!#DZhMk z&>N_vVip*Om3KbzwM}L+P=RoJO)43k-QfnTR;5@p_&cGVytGG8ZHFVi`e9))#lvXY)pU$f2dP!HD>olKN#%5cBi9Pa2;dvqccxK>{4 zerTq@1VW2$GP{QVqoHcE`qX~PHf=9g(tnBz=0iT>f_a5I{{-_9>i-Jn&muG5y;|&f zXP0yuvBo#Lm}M_Aq?>!r7H4cSb?r%UhPw#ix1+g??;HJV!!DbTTC@Va8M^S|*vk?Y7O`&&s_F+FX*>98rMS zx4ZMwx}NdJ9Pg^aL3p1414fr{Z(p>Sx}>*uSv_)8XrZo;=YcQRZmwFSaD+k-Z!YI+ zTFqrGg>$KgiaJ4FJKO?|8hxL=a;GDd=IT;UYOgip2A26Vt)(_yYhYkhO7w&I-&B8n zK>a)Hjo6BxM>j;%EI|y94{La{=7`12*6Bf@hU35R-TxG1ko~q0hzsO{|q_3GW08AIGQ*5?@(+qZNWKH?mJV3iWIYQ3HuWrx3 z5qPD9c2Ubh&be&x?u8P zpkOkYV96-{;n}WTd3&Eb>1nWC#LG&f);CTM5Oue*vzz@_Yq0XR9s?b(E*K@LTSoO# zgVkGS^gdTLF~F67R<1E(9B6+vVwz{M{FR|Sg1+Zr@=i|ng&{$(?vNGQn5{}&Xl{z2 z8xH>RRb%{lQR~T7IDpK_|=tw#hgwX?N#Gr3i)l zD9Dzu)+?Le{<}^ANWCxAhOM9mm?We|SVT7Q+PEI;wQC8~Z$W#j#br;?H))2LnGf<; z6TV|xGgA8GE5Fl3$hsOB=^Un_8!o@SEE&+UfPl?Z0gm3QjpZ&85TJYp0_7{6LxZ6o zUacO;+%E}ZM_tv4*Gp5{zvx2BI;zUa{rPQ8O%t|ajua#fnG=+=DMTaWaxqpJd=&4l z;3VN|AXS^uzxoWSaFQ_D=5<7!UiyZ@I&YiJoQx$0eMIY)FKF(tvzxgTuIBhj-`CMA zb(ct;zelqx!vs!uy+#2;8%)Vp%*%fj`YP+KZ7sTYjg(DfKX_@ShTmwY|Y@@UT| zB4uzmNW;dR^cx0B3J?Q)H=Hd)YQ#whP>id z!A(HZ;Rgke+ETR&qhdN1ZqAu&7POWEX$li%t1xnp2%yRn<>ikGKm_))q!f0TKR@%^ z)N#`@ic(BVniAAyWj!XZ?QvG%Bpsw=O*Y<|qY5U(^XGu{(iER z^C7_ta$9y7m z8Yr_nR!C&CMVr~+=Aqi=IT~lBwK+t%63Be%|EYcpfSZt>`#Pp+6;LhE2JOoMz10f@ z<)Y&YP44(JQa=prA+C@n6f2Dcyj~U`DA+gyoH9GPKF}T60L@aVl6jUEJ&pnA;o-R; znUVhY${Qu5H+bL*s0Z#R1Ix+bP#>g)#CiPwCMVWs4p5x79Vj^mXUvy7WMJ4A_5GW})00T!e$KE>D0m>~^ z)H6AFnkat~OOpfbx1k|XPcN_Obw7F%k-rsLKvA>-_(#-JcK%&ZALDf6?J!Wa^;V_H zCl36O$K^C`Q`FG4=*rmRQrE^ZJFQrbP24!%)XqjN}Cz77yM)~B$El$ z`S&0>ZE6)2P?rJ}Jj0j3lJ@{Ho4iPaweW}0ptdv}P?gl>%r2o@v$<`rNjZY=R`F7Y z;~Lq)j&txOoUFv(hJykuBsm1cM=F);nM6R5m3_3MC7qn&(nw5-Z!g6+b^+=;kh*~E zNcg*|X0!Y~aS2&qd_P!rSs)HG?S7})Px)#*Ka36TPpMgOZVqfQ4l=m4T~(CPp#0`3 zWcVTmg>zA-p`kOEQ0+X52^_I!gUJKZW?=dB;=6A%MoS}tVS1FI&Vl?%?Uyh~4MmM- zbA(Z>bg<8$NDrrJss@^-hrpDyU8X@kw?er+4X8!~+w_CMn8ZQ*JB$~*Qm8TFt}MwG z9dV#iNyRFeg3`=$c+AUYLVHjpbE|qi6L{+FcNWeaaEK1}kbt;BIEnrc)ZUl^ zUyvUJTE}L7D>s+1clo=f2D5QVr~s?CXFK~PU7MLX1xjMg;`pd>rVA!{jH{h|Fri{i z8i>d!8+S7mf=3am+k%Yp(u7P_)>ZL2%8qtUK>oy`?eE$bq+urnN* z71@TEDaWiaTdb^wvADt?z*^k`g0E$%OxH*Evb;0Z4tc7)j~QCnJDu-gfUL=#;kp-b z%arvq)yXFB{t#f)3~q3*(dr`_muy=Qx&-DO^Yyluj^E_+C;gqr;pVEjEcw;pO>eag zovFXN0Vw4qR}Sl_Qzcvwf?RVnvT2~Tugd1=N&tP@Ds&nR3F^zoW}braRDr#|2ap?5 z?tdiUS_Sw$f1us?S0~IdftbjaIBpmNGE$dt z=}!KCudSK?`t|j%I_Fo0pw7wG(yD$}p8V_qv#weHm%H5eISD~xY844`d$y<|qD^~d zW^=n=YH%^KoI4^ozyVckkib|3`EUA2Zb`+jQgN8n(%P+9>{opIIU!Il}JXjry6d+eGlPF)F3o4fq~pMq<+ zWmXzac8ihmFb+5Y*m00f#hU|H=iLFI!Mi!M(nCp4M2Fn6U}pC1$5ZxjV}hU?Y)`>= z0kSQ@&T{YD+)U<>#_J5V5KD0ps;V|@XmQS!0##b^;kY83bCASK@ zm-HfMl6eyL(P+@j9mc<}y>nY_jIar-IMl>@Ixpkb;0;VG47oO2A zKRG2LhXmpeE?)fo9)ns`%XlJ8v1|0hYEP!CLukLSLIeB^U-b8;$oA4pIcbeq*2w># zIPs>s&*DZA@4m~h*iFg2v*vHh!wX-5cFOBmj;(ajpGLeRn=;fr=xj@Br+<&1_q9&`bhVBaCXx#Yg0Ff5Ze#cPQBWzZ zOv!AOF;zVwGXL%5c|hj7#cV_yzG#SndXG=Chgx`Xo5I0XKMwZQ0N9s90X_zh@AwZ~ z=vJFVcBq)Fo+@-3-Z8)1`_?W!@Sl{6bD73v+`I4W`vvI@axF`~ks{LU`@2eJ-zZWc zS5s-gcvD&=gcIC-+l-~Z>i)`+DFM6t zhz$2&07x!246eUPLU?r*bE3I`!?t_Ss2Zwkiqyg>9=!LQ*C;S-ir0eJWEXh$eAeD6 z*bYk}`9RnIJ?HR$2?lrCyZ%Jse`<9mhOWOVf79yD(`xjwqa4n2a=_sl9i6xSe3|&t z^5B4(YjlB%NM*XPdL^K62AlMIlL+x5@cc&}`b&!3ApYD3 zGZR$xKA&n-6|c0?I##XhyTe!is`U-YlqlkOEssAbIGty24@4Vl4CZ3>=7T1_&a4^1 z-ZU+$%E1=Wfb6Q6AoHqWXZ+(s#(a?jv?>*(K86JI=q%`sp9)=-7U4pae*Kiwy-yBb z`n@n6#u*KIROXdcP2T40JKx-Mnwmg1KotJH9Q4fA9N%?ql0y~=>ulvi(FfhdDPAn_ zJ|9&Q238J^Pf-= zo@r1qXOdc6Jq9}z4NVV@+@Aal!H-onn||8qI7;23d>Y1lWp}GFU=>eGI_pYgRManm zl_osZB(-5r8t%lC$CSE8(6=cctRu>ulJqo1YuK#QK?Ml>(9blelx=MGzo3I}bAq&1 zzBQ;d2Ok-5TIy5C{{nk!Wo3=m5=2O{lwJY8u5eCEbSe>Lq8~N75bOH6Qh(%mk2ANT z26X)@Vv<+Z1y`J%g)7c3)3$R31sezOfo7N^*<1ZwPR~4XRVqq9+f*Px(qSjz2C@Xa zmhQyY0_DVS{3Z8)ent$1aJKEV zhnU^RA!J2G+~*|lzM(m-Q216j(lzB+3}9unasocBS|wvjq6LCKt;yCdy?dlROC}=} zZ=NYhY~eyMS*A!6=2g<(-Sjc678N3gd;t6sZlh{KE^;!`Vd@pL2^q$uqh;?K|?Xbu$N80OBT73vs0-4{fJ z$;n0Y(4@|9XBh$3tl1t)3KRg1&Mi1iTeYumuX*R!T{xseel;wjlmUFFfeka(^Fn8y z2GXz(e=5BXiuZUG?mR%5Lbwmj7=;d9SpC^BS;+4d@$=1?p3*H<8_(`sU)Q(t?+Pbo zmuJr0BBL_N+G2bBncUcovQ2Te-37pmL-LHpy36f*Z|39lL{5udWK7)8)ZUuzov zFrt?EtA354vC90FtLxIiVQ1x5UEfCk@4nxC8$J@0{>0!gf4%_VzWM z4xciS-&3S#LRRoQjF+=9m=sDT(yMY)J8tT*yZ!pj>Jv*rPZu%J2$99%b%^?b0wMJS zOP$8XwF(=XfwYps(Xg5O%m*SWv!MkAa%(=G??r%!+LNMYHi?Q0;ZeN4;-Y`RP3|sB z6^+klb@doIlxI18^?M1i8SJ58NloY*Bl7I{3a=wIU(fnU*!vQEXX^W|!kSx%A(I@} zsmF|xK1N3C^&@6R5hteN&GXfjRTjm4VJlejOHYyfU?jH!0^0CP!ms%ml%k2G7w%b2 zFiN~WYs=N*%;b-SL7M9nIwTZBI(|g2)exUT)G>57wM8v#mKaBe3t>tyKCkaj2cloE z({kNr(0z0ZGeUT$DDG45qrx71(K`&^t=yyf>yxieR2 zL+{IqqF`2OYP!bI75GZn?K@d-!2{TNis%6(g_vP&(tR(r>xp{%O-(Q)kT@1pLx zmsr(FbL$D~kyDnHph0U+@NZl1qOAncrvn`;UZTy?qYf_Y&+pRGqOcYR>OfkR&(HM8 z|GnYrA0~vBv`|4^0{*coswgQ@d!OH^ot;6KHq;`4^V{gCexku9-gDGMncpnK{X0}( z4zml6PiXMUpQ0qPEibr@n-c%O0CNhA_0KPTk;SVzYtbeG?A$pLY713FTvhH9qjX>q zqlVGnKYWo0?p4*#0{VuCuy_R^f@6QDkqj{6b$>CxEx7=T7^MS?7^Pk|JAAQ-J^<)t zs`!J5d?BA7eF150=C}Si~rGve|VX7qRyPSS_Nj0fxmZ0wUr9 zK%r0wxfLZU0`I$Q64e=t7^TL*z^$LO)@%aoY7x8w=*RN;?Y~Ysu4ZA(+;F1foE&mX zOgdDxC9iry>BAyMiOc1NKc}i2t;K2pFN?5v#X-b%RSgy|E@ozCYH!C{?Gg!l)eoX* zu!vD&=86~YP}NICgb^c}_&H*}Hf2Pe}*XDvl2) zc6Nr_60;VaB9>cXlnN|j6tfYN&CXn9jC@lS9~P14jIm$avuE31l8&s^h_oG6wE*1i zaP6QI2z^g7qDZiaQB1DLWV5*|MGmY7Ati_Tb^DSS#;pFM* z?jy%9Rb{Q|6j2s2N(B}%ipWS?fB(U2fdd->SqbRVs_qpN6Jvi*Ix?Em-CdkLd^iJR z#P^n1U*GT<#uRt;_ZI~iIv|2~Rc%H@3fb)N7+|LWnKDNHozIWH6leTIURcB^q#N4% z`xjpW9J~Y26##xwd0Rg6wdY}=i5Y*f{( zs`XvO^7$>(x!lm-RB`@^?}z}}aqM@9U{5}u-xXz`M1HV{Q6R^QSD|oV9iXQH<}tu* z9UtHFpQK|WUuIQhYrWK8~tv1)g<7M@JM8ix~MbI5@n>T6=4ua9|j~ z5dLHB#Z3SftIC*aX6xkS!~2qsjl$4<0Q!Q=F+II`Hk%!KLj)Ij4fFj1kPH5Q zFb5!llC}8x-o0acqK%TsKNc|p0IXUyw6s{nkZR!;Rb)i49mqVA&u^JdIyQ=qwHOz{ zWkKgN#=dH;xoiGws%RIno1=@4C^#0e7PoTcjmwI~u8oC)-UNsvqC1R{9eehS?oT>4 zik>l=SCw4Q`P$oieslEbOi4uA0YDWFfZtC{?D%8kK@tVPBG#e?2Zwtc2OCNyy;($y zBKknF*zqWL&^I@0B`<=-Jw0oe?B73j$nSi+caI#+<%V8Y#iam51Z^VnP>i7x`NAUB zVtRYmXWQDGJ6%_=6~SRZ?slBQ6H`-<{x|8^D1MoY$y;mD)zy&$;Jb(cfVKJ(fQv<> z4ZvIZ{OI$s1W6PCi&%?TvEr7Tq&Zj6QNx;X%E2ANj`zXW8H zDy%WO9e~CXBvAk?Voh%4${UxJN}cN+2e$xP0`$QnN4mylW*$12bZk_Alamim_4f}I zjX{6Vd3$=6y|#b<%uzs!z!9F@OsRDdfCA>eW%1GA4`aHuxA$u8?mk~dGKt6I@wgB1 zxjzNVm%2x1=La;CIjN?3mn`{&E?#_L;>(c2M*+Y`L3QV~C3XgY4gg=Sb1W1CYv04v z)Q=6|+N5LgunxdEF}8m;fY$(Qjj@l0Qz+Danae|mUWqW0rt%DcGXd~u%{r?#ocL_r zqM(?i_PVTB)S-`ez+5J3S|;fLh=_=4#Ue&TL=B5YjEIOD7K<1W5jCthikQYcU#;y| zYfC*|i@Gnbexq*7>(JjY^TxIOje@!Czu&0aVlI;}QJ?Ir0A$|JIKPHcu`ZH8r_@R}hHnqe6z0rf0mm4-XKHuKA0TWE-+ zT02395~{W1HC?4)jB3+*y&vT=%vb)w5T-4!SSl@3Gh;3@mnkKp98R47O{&r`%>38N ze~+TyO22zO58Hmw{`?M+)Vd7E|K{_bSL@5q2dLUjW!|(nir{ zH9-=!+H_Lk_n__gwa|w^`TN!S_4=FpT~=Z)hs9i`NJLe{stql)Qo@88+VJA%8)+q# zz5$2P3d1bSr)>v&Nj{8G4%JhW$!+sn3uUsu}Jc!nAJWMqWHiFGkh_h-!|s=7bN~_ zaRyn2N_|#qFNlSfFX<1XBr%u0r)4fv?4l@Qes=*c> z&CgGc#*wd4_e+$hW*Sc9ibrY393_faGZisE%0EC9;V!RJK7XZ47A@3H`8+{m3bP!P zF6BdwUgt1*{jV!c7vvnTO8r)Pty(Nz?`hfl<>u{o<6Dt?mH&OnYl)dNm zTs+?M8*3E9m;9#RI2OuLue|WH-?n_Z^5?bm>(zI)xcsau^OwPI{xa9;eVV0+c_noD zic|ht`LxxFme=%Yk)~LvvamT?&MRmAs-@qk_RR%3Il9&usD(635nD(c-`+T+K~YL- z3!~P47upges*7eVVsU>Ecny&d1(DQnSXBM`J?(?*2F0ow4(v#JY6od$ zn*IM>X&qnzqu4d;mRP0z1?A^r)$1zQK@T*kq}e|VTZx|>1*#vE;kRu+d0(yHTH6n^ zjxpECmu4tp)mF56&Fkkx{%ix?3RH7ph}A|h&7EMi1N)Ua5@h={0Rd7bQB zIQEm5jG=n?NsMh509*y;GS$b?qyuP0UT3|x0r)(COr2w)*7Q37Z^zX3N&uI{)Hcz4 zE`a9&I7tUWL_|bHL_|bHL_|bHL_|bHlnVa?e3nK^2Ggf{00000NkvXXu0mjfxToB6 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ios_8h__incl.png b/libs/SdFat-master/html/ios_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..87546e2ec5ed9ab01f9f791077051f42b0677598 GIT binary patch literal 31119 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ඵtzMn8pU1-I{d_c-?P zgWJ&4eG&a(Tx}IhCg;p|R5lk#D+NaKPeY}8h9##-$ASfUE@hVxmT=5zJva)0ez=aE zv}R8_7aJ+V7eTd9&!n9o{Z~b>p2pHnK|S#CQ$FltiVpVMhyDs_R!5vktNuTaL1|uW z)C0Qu^Cpm3%JBdD9VyZwtM>JEIFpFcJz=CNjKGB%Ik_GJZnA5L72T#qrHklKp_!sO mN{{i+&+q;J`O`IeMxMabA8UU}<}K*34Bb(`kHo85hWsy{qu^rz literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/iostream_8h.html b/libs/SdFat-master/html/iostream_8h.html new file mode 100755 index 0000000..78c6d02 --- /dev/null +++ b/libs/SdFat-master/html/iostream_8h.html @@ -0,0 +1,467 @@ + + + + + + +SdFat: Arduino/libraries/SdFat/iostream.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
iostream.h File Reference
+
+
+ +

iostream class +More...

+
#include <istream.h>
+#include <ostream.h>
+
+Include dependency graph for iostream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + + + + + + + +

+Classes

class  iostream
 Input/Output stream. More...
 
struct  setfill
 type for setfill manipulator More...
 
struct  setprecision
 type for setprecision manipulator More...
 
struct  setw
 type for setw manipulator More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

ostreamendl (ostream &os)
 
ostreamflush (ostream &os)
 
ostreamoperator<< (ostream &os, const setfill &arg)
 
ostreamoperator<< (ostream &os, const setprecision &arg)
 
ostreamoperator<< (ostream &os, const setw &arg)
 
istreamoperator>> (istream &obj, const setfill &arg)
 
istreamoperator>> (istream &is, const setprecision &arg)
 
istreamoperator>> (istream &is, const setw &arg)
 
istreamws (istream &is)
 
+

Detailed Description

+

iostream class

+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ostream& endl (ostreamos)
+
+inline
+
+

insert endline

Parameters
+ + +
[in]osThe Stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ostream& flush (ostreamos)
+
+inline
+
+

flush manipulator

Parameters
+ + +
[in]osThe stream
+
+
+
Returns
The stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& operator<< (ostreamos,
const setfillarg 
)
+
+inline
+
+

setfill manipulator

Parameters
+ + + +
[in]osthe stream
[in]argset setfill object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& operator<< (ostreamos,
const setprecisionarg 
)
+
+inline
+
+

setprecision manipulator

Parameters
+ + + +
[in]osthe stream
[in]argset setprecision object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ostream& operator<< (ostreamos,
const setwarg 
)
+
+inline
+
+

setw manipulator

Parameters
+ + + +
[in]osthe stream
[in]argset setw object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& operator>> (istreamobj,
const setfillarg 
)
+
+inline
+
+

setfill manipulator

Parameters
+ + + +
[in]objthe stream
[in]argset setfill object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& operator>> (istreamis,
const setprecisionarg 
)
+
+inline
+
+

setprecision manipulator

Parameters
+ + + +
[in]isthe stream
[in]argset setprecision object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
istream& operator>> (istreamis,
const setwarg 
)
+
+inline
+
+

setw manipulator

Parameters
+ + + +
[in]isthe stream
[in]argset setw object
+
+
+
Returns
the stream
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
istream& ws (istreamis)
+
+inline
+
+

Skip white space

Parameters
+ + +
[in]isthe Stream
+
+
+
Returns
The stream
+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/iostream_8h__dep__incl.png b/libs/SdFat-master/html/iostream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..78779c6c96f1d443ac9e21e5696e482e4db749a3 GIT binary patch literal 12929 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/iostream_8h__incl.png b/libs/SdFat-master/html/iostream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..f93fd36da554547628eef501843075d227309ec6 GIT binary patch literal 36115 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 d(Sbt3f97*Lx}|v?pKJlidAj + + + + + +SdFat: Arduino/libraries/SdFat/istream.h File Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + + +
+
+ +
+
istream.h File Reference
+
+
+ +

istream class +More...

+
#include <ios.h>
+
+Include dependency graph for istream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + +

+Classes

class  istream
 Input Stream. More...
 
+

Detailed Description

+

istream class

+
+ + + + diff --git a/libs/SdFat-master/html/istream_8h__dep__incl.png b/libs/SdFat-master/html/istream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..b6ba9d223a727cb6154d08aab3286fd9a01fcc90 GIT binary patch literal 14536 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 HyN~||UZxeI literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/istream_8h__incl.png b/libs/SdFat-master/html/istream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..1e98bc641998d363324bf3c552ca4f8821c81a4f GIT binary patch literal 31706 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[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/libs/SdFat-master/html/nav_f.png b/libs/SdFat-master/html/nav_f.png new file mode 100755 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/nav_g.png b/libs/SdFat-master/html/nav_g.png new file mode 100755 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + +SdFat: Arduino/libraries/SdFat/ostream.h File Reference + + + + + + +
+
+
+ + + + + +
+
SdFat +
+
+ + + + + + + +
+ +
+
ostream.h File Reference
+
+
+ +

ostream class +More...

+
#include <ios.h>
+
+Include dependency graph for ostream.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+ + + + + + + +

+Classes

class  ostream
 Output Stream. More...
 
struct  pgm
 type for string in flash More...
 
+ + + +

+Macros

#define pstr(str)   pgm(PSTR(str))
 
+

Detailed Description

+

ostream class

+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define pstr( str)   pgm(PSTR(str))
+
+

macro for flash inserter

+ +
+
+
+ + + + diff --git a/libs/SdFat-master/html/ostream_8h__dep__incl.png b/libs/SdFat-master/html/ostream_8h__dep__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..d3f19422270c903d594396b7bab1fd9e7f3b7851 GIT binary patch literal 14536 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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/ostream_8h__incl.png b/libs/SdFat-master/html/ostream_8h__incl.png new file mode 100755 index 0000000000000000000000000000000000000000..cbbd840582a080cde31fbbe1399e518120cb7bfc GIT binary patch literal 31704 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 + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
FatPos_t Member List
+
+
+ +

This is the complete list of members for FatPos_t, including all inherited members.

+ + + + +
clusterFatPos_t
FatPos_t() (defined in FatPos_t)FatPos_tinline
positionFatPos_t
+ + + + diff --git a/libs/SdFat-master/html/struct_fat_pos__t.html b/libs/SdFat-master/html/struct_fat_pos__t.html new file mode 100755 index 0000000..5d5477b --- /dev/null +++ b/libs/SdFat-master/html/struct_fat_pos__t.html @@ -0,0 +1,105 @@ + + + + + + +SdFat: FatPos_t Struct Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
FatPos_t Struct Reference
+
+
+ +

internal type for istream do not use in user apps + More...

+ +

#include <SdBaseFile.h>

+ + + + + + +

+Public Attributes

uint32_t cluster
 
uint32_t position
 
+

Detailed Description

+

internal type for istream do not use in user apps

+

Member Data Documentation

+ +
+
+ + + + +
uint32_t FatPos_t::cluster
+
+

cluster for position

+ +
+
+ +
+
+ + + + +
uint32_t FatPos_t::position
+
+

stream position

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/structpgm-members.html b/libs/SdFat-master/html/structpgm-members.html new file mode 100755 index 0000000..8fac6e1 --- /dev/null +++ b/libs/SdFat-master/html/structpgm-members.html @@ -0,0 +1,63 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
pgm Member List
+
+
+ +

This is the complete list of members for pgm, including all inherited members.

+ + + + +
pgm(char *str)pgminlineexplicit
pgm(const char *str)pgminlineexplicit
ptrpgm
+ + + + diff --git a/libs/SdFat-master/html/structpgm.html b/libs/SdFat-master/html/structpgm.html new file mode 100755 index 0000000..8241d39 --- /dev/null +++ b/libs/SdFat-master/html/structpgm.html @@ -0,0 +1,159 @@ + + + + + + +SdFat: pgm Struct Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

type for string in flash + More...

+ +

#include <ostream.h>

+ + + + + + +

+Public Member Functions

 pgm (char *str)
 
 pgm (const char *str)
 
+ + + +

+Public Attributes

char * ptr
 
+

Detailed Description

+

type for string in flash

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
pgm::pgm (char * str)
+
+inlineexplicit
+
+

constructor

Parameters
+ + +
[in]strinitializer for pointer.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
pgm::pgm (const char * str)
+
+inlineexplicit
+
+

constructor

Parameters
+ + +
[in]strinitializer for pointer.
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
char* pgm::ptr
+
+

Pointer to flash string

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/structsetfill-members.html b/libs/SdFat-master/html/structsetfill-members.html new file mode 100755 index 0000000..6183af1 --- /dev/null +++ b/libs/SdFat-master/html/structsetfill-members.html @@ -0,0 +1,62 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
setfill Member List
+
+
+ +

This is the complete list of members for setfill, including all inherited members.

+ + + +
csetfill
setfill(char arg)setfillinlineexplicit
+ + + + diff --git a/libs/SdFat-master/html/structsetfill.html b/libs/SdFat-master/html/structsetfill.html new file mode 100755 index 0000000..82fef38 --- /dev/null +++ b/libs/SdFat-master/html/structsetfill.html @@ -0,0 +1,128 @@ + + + + + + +SdFat: setfill Struct Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
setfill Struct Reference
+
+
+ +

type for setfill manipulator + More...

+ +

#include <iostream.h>

+ + + + +

+Public Member Functions

 setfill (char arg)
 
+ + + +

+Public Attributes

char c
 
+

Detailed Description

+

type for setfill manipulator

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
setfill::setfill (char arg)
+
+inlineexplicit
+
+

constructor

+
Parameters
+ + +
[in]argnew fill character
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
char setfill::c
+
+

fill character

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/structsetprecision-members.html b/libs/SdFat-master/html/structsetprecision-members.html new file mode 100755 index 0000000..d0e3ff7 --- /dev/null +++ b/libs/SdFat-master/html/structsetprecision-members.html @@ -0,0 +1,62 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
setprecision Member List
+
+
+ +

This is the complete list of members for setprecision, including all inherited members.

+ + + +
psetprecision
setprecision(unsigned int arg)setprecisioninlineexplicit
+ + + + diff --git a/libs/SdFat-master/html/structsetprecision.html b/libs/SdFat-master/html/structsetprecision.html new file mode 100755 index 0000000..58d902a --- /dev/null +++ b/libs/SdFat-master/html/structsetprecision.html @@ -0,0 +1,127 @@ + + + + + + +SdFat: setprecision Struct Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
setprecision Struct Reference
+
+
+ +

type for setprecision manipulator + More...

+ +

#include <iostream.h>

+ + + + +

+Public Member Functions

 setprecision (unsigned int arg)
 
+ + + +

+Public Attributes

unsigned int p
 
+

Detailed Description

+

type for setprecision manipulator

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
setprecision::setprecision (unsigned int arg)
+
+inlineexplicit
+
+

constructor

Parameters
+ + +
[in]argnew precision
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
unsigned int setprecision::p
+
+

precision

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/structsetw-members.html b/libs/SdFat-master/html/structsetw-members.html new file mode 100755 index 0000000..54f8ead --- /dev/null +++ b/libs/SdFat-master/html/structsetw-members.html @@ -0,0 +1,62 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
setw Member List
+
+
+ +

This is the complete list of members for setw, including all inherited members.

+ + + +
setw(unsigned arg)setwinlineexplicit
wsetw
+ + + + diff --git a/libs/SdFat-master/html/structsetw.html b/libs/SdFat-master/html/structsetw.html new file mode 100755 index 0000000..c1c4b68 --- /dev/null +++ b/libs/SdFat-master/html/structsetw.html @@ -0,0 +1,127 @@ + + + + + + +SdFat: setw Struct Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+ +
+ +

type for setw manipulator + More...

+ +

#include <iostream.h>

+ + + + +

+Public Member Functions

 setw (unsigned arg)
 
+ + + +

+Public Attributes

unsigned w
 
+

Detailed Description

+

type for setw manipulator

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
setw::setw (unsigned arg)
+
+inlineexplicit
+
+

constructor

Parameters
+ + +
[in]argnew width
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
unsigned setw::w
+
+

width

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/html/sync_off.png b/libs/SdFat-master/html/sync_off.png new file mode 100755 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/sync_on.png b/libs/SdFat-master/html/sync_on.png new file mode 100755 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/tab_a.png b/libs/SdFat-master/html/tab_a.png new file mode 100755 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/html/tab_b.png b/libs/SdFat-master/html/tab_b.png new file mode 100755 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/libs/SerialPortBeta20120106/html/tabs.css b/libs/SdFat-master/html/tabs.css similarity index 94% rename from libs/SerialPortBeta20120106/html/tabs.css rename to libs/SdFat-master/html/tabs.css index 2192056..9cf578f 100755 --- a/libs/SerialPortBeta20120106/html/tabs.css +++ b/libs/SdFat-master/html/tabs.css @@ -3,6 +3,7 @@ width: 100%; z-index: 101; font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } .tabs2 { diff --git a/libs/SdFat-master/html/unioncache__t-members.html b/libs/SdFat-master/html/unioncache__t-members.html new file mode 100755 index 0000000..366d7c9 --- /dev/null +++ b/libs/SdFat-master/html/unioncache__t-members.html @@ -0,0 +1,68 @@ + + + + + + +SdFat: Member List + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+
+
cache_t Member List
+
+
+ +

This is the complete list of members for cache_t, including all inherited members.

+ + + + + + + + + +
datacache_t
dircache_t
fat16cache_t
fat32cache_t
fbscache_t
fbs32cache_t
fsinfocache_t
mbrcache_t
+ + + + diff --git a/libs/SdFat-master/html/unioncache__t.html b/libs/SdFat-master/html/unioncache__t.html new file mode 100755 index 0000000..2279668 --- /dev/null +++ b/libs/SdFat-master/html/unioncache__t.html @@ -0,0 +1,195 @@ + + + + + + +SdFat: cache_t Union Reference + + + + + + +
+
+ + + + + + +
+
SdFat +
+
+
+ + + + +
+
+ +
+
cache_t Union Reference
+
+
+ +

Cache for an SD data block. + More...

+ +

#include <SdVolume.h>

+ + + + + + + + + + + + + + + + + + +

+Public Attributes

uint8_t data [512]
 
dir_t dir [16]
 
uint16_t fat16 [256]
 
uint32_t fat32 [128]
 
fat_boot_t fbs
 
fat32_boot_t fbs32
 
fat32_fsinfo_t fsinfo
 
mbr_t mbr
 
+

Detailed Description

+

Cache for an SD data block.

+

Member Data Documentation

+ +
+
+ + + + +
uint8_t cache_t::data[512]
+
+

Used to access cached file data blocks.

+ +
+
+ +
+
+ + + + +
dir_t cache_t::dir[16]
+
+

Used to access cached directory entries.

+ +
+
+ +
+
+ + + + +
uint16_t cache_t::fat16[256]
+
+

Used to access cached FAT16 entries.

+ +
+
+ +
+
+ + + + +
uint32_t cache_t::fat32[128]
+
+

Used to access cached FAT32 entries.

+ +
+
+ +
+
+ + + + +
fat_boot_t cache_t::fbs
+
+

Used to access to a cached FAT boot sector.

+ +
+
+ +
+
+ + + + +
fat32_boot_t cache_t::fbs32
+
+

Used to access to a cached FAT32 boot sector.

+ +
+
+ +
+
+ + + + +
fat32_fsinfo_t cache_t::fsinfo
+
+

Used to access to a cached FAT32 FSINFO sector.

+ +
+
+ +
+
+ + + + +
mbr_t cache_t::mbr
+
+

Used to access a cached Master Boot Record.

+ +
+
+
The documentation for this union was generated from the following file: +
+ + + + diff --git a/libs/SdFat-master/readme.txt b/libs/SdFat-master/readme.txt new file mode 100755 index 0000000..98620c6 --- /dev/null +++ b/libs/SdFat-master/readme.txt @@ -0,0 +1,168 @@ +The Arduino SdFat library provides read/write access to FAT16/FAT32 +file systems on SD/SDHC flash cards. + +SdFat requires Arduino 1.05 or greater. + +To use SdFat, unzip the download file and place the SdFat folder +into the libraries sub-folder in your main sketch folder. + +For more information see the Manual installation section of this guide: + +http://arduino.cc/en/Guide/Libraries + +A number of configuration options can be set by editing SdFatConfig.h +#define macros. See the html documentation for details + +If you wish to report bugs or have comments, send email to +fat16lib@sbcglobal.net + +Read changes.txt if you have used previous releases of this library. + +Read troubleshooting.txt for common hardware problems. + +Please read the html documentation for this library. Start with +html/index.html and read the Main Page. Next go to the Classes tab and +read the documentation for the classes SdFat, SdBaseFile, SdFile, File, +StdioStream, ifstream, ofstream, and others. + +Support has been added for Software SPI on AVR, Due, and Teensy 3.1 boards. + +SPI transactions are supported. See SoftwareSPI.txt and SPI_Transactions.txt +for more information. + + +A new class, "File", has been added to provide compatibility with the Arduino +SD.h library. To use SdFat with programs written for SD.h replace + +#include + +with these two lines: + +#include +SdFat SD; + + +The SdFile class implements binary files similar to Linux's system calls. + +The StdioStream class implements buffered I/O for similar to Linux stdio.h. +StdioStream is under development so expect changes and bugs. + +The classes ifstream, ofstream, istream, and ostream follow the +C++ iostream standard when possible. + +Many examples are included in the SdFat/examples folder. + +There are many tutorials and much documentation about using C++ iostreams +on the web. + +http://www.cplusplus.com/ is a good C++ site for learning iostreams. + +Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and +most consumer devices use the 4-bit parallel SD protocol. A card that +functions well on A PC or Mac may not work well on the Arduino. + +Most cards have good SPI read performance but cards vary widely in SPI +write performance. Write performance is limited by how efficiently the +card manages internal erase/remapping operations. The Arduino cannot +optimize writes to reduce erase operations because of its limited RAM. + +SanDisk cards generally have good write performance. They seem to have +more internal RAM buffering than other cards and therefore can limit +the number of flash erase operations that the Arduino forces due to its +limited RAM. + +The hardware interface to the SD card should not use a resistor based +level shifter. SdFat sets the SPI bus frequency to 8 MHz which results +in signal rise times that are too slow for the edge detectors in many +newer SD card controllers when resistor voltage dividers are used. + +The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like +the 74HC4050N based circuit shown in the file SdLevel.png. The +Adafruit Wave Shield uses a 74AHC125N. Gravitech sells SD and MicroSD +Card Adapters based on the 74LCX245. + +If you are using a resistor based level shifter and are having problems +try setting the SPI bus frequency to 4 MHz. This can be done by using +card.init(SPI_HALF_SPEED) to initialize the SD card. + +A feature to use software SPI is available. Software SPI is slower +than hardware SPI but allows any digital pins to be used. See +SdFatConfig.h for software SPI definitions. + +An many shields designed for an Uno can be use on an Arduino Mega +by defining MEGA_SOFT_SPI in SdFatConfig.h. + + +The best way to restore an SD card's format is to use SDFormatter +which can be downloaded from: + +http://www.sdcard.org/consumers/formatter/ + +SDFormatter aligns flash erase boundaries with file +system structures which reduces write latency and file system overhead. + +SDFormatter does not have an option for FAT type so it may format +small cards as FAT12. + +The example sketch SdFatFormatter.ino will format smaller cards FAT16 +so they can be used with SdFat. + +The SdFatTestSuite folder contains development tests. + +The SdFat/examples folder has the following sketches. Older examples +and test programs are in the examples/#attic folder. + +AnalogBinLogger - Fast AVR ADC logger - see the AnalogBinLoggerExtras folder. + +bench - A read/write benchmark. + +cin_cout - Demo of ArduinoInStream and ArduinoOutStream. + +dataLogger - A simple modifiable data logger. + +directoryFunctions - Demo of chdir(), ls(), mkdir(), and rmdir(). + +fgets - Demo of the fgets read line/string function. + +formating - Print a table with various formatting options. + +getline - Example of getline from section 27.7.1.3 of the C++ standard. + +LowLatencyLogger - A modifiable data logger for higher data rates. + +OpenNext - Open all files in the root dir and print their filename. + +PrintBenchmark - A simple benchmark for printing to a text file. + +QuickStart - A sketch to quickly test your SD card and SD shield/module. + +RawWrite - A test of raw write functions for contiguous files. + +readCSV - Read a comma-separated value file using iostream extractors. + +ReadWriteSdFat - SdFat version of Arduino SD ReadWrite example. + +rename - A demo of SdFat::rename(old, new) and SdFile::rename(dirFile, newPath). + +SdFormatter - This sketch will format an SD or SDHC card. + +SdInfo - Initialize an SD card and analyze its structure for trouble shooting. + +StdioBench - Demo and test of stdio style stream. + +StreamParseInt - Simple demo of parseInt() Stream member function. + +StressTest - Create and write files until the SD is full. + +Timestamp - Sets file create, modify, and access timestamps. + +TwoCards - Example using two SD cards. + +To access these examples from the Arduino development environment +go to: File -> Examples -> SdFat -> + +Compile, upload to your Arduino and click on Serial Monitor to run +the example. + + +Updated 25 Oct 2014 diff --git a/libs/SdFatBeta20120108/troubleshooting.txt b/libs/SdFat-master/troubleshooting.txt similarity index 59% rename from libs/SdFatBeta20120108/troubleshooting.txt rename to libs/SdFat-master/troubleshooting.txt index 59e876f..a0bb1aa 100755 --- a/libs/SdFatBeta20120108/troubleshooting.txt +++ b/libs/SdFat-master/troubleshooting.txt @@ -1,11 +1,14 @@ -The best source of recent information is the AdaFruit forum +The best source of recent information is the Arduino forum -http://forums.adafruit.com/ +http://arduino.cc/forum/ + +Also search the Adafruit forum -Also search the Arduino forum +http://forums.adafruit.com/ -http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl +If you are using a Teensy try +http://forum.pjrc.com/forum.php Try running the SdInfo sketch in the SdFat/examples folder to get more information. @@ -29,17 +32,3 @@ Other cards fail with an errorCode() > 1. These cards see SD commands at low SPI clock rate but fail at higher SPI clock rate. It may be possible to use these cards by replacing card.init() with card.init(SPI_HALF_SPEED). This will slow the the SPI clock by 50%. - --------------------------------------------------------------------------------- -Redefining SS_PIN to be a pin other than the Arduino/AVR hardware SS pin. - -Arduino/AVR SPI will only function correctly in master mode if the hardware SS -pin is in output mode. Sd2Card::init() will enable output mode for the hardware -SS pin even if it is not SD chip select. - -If you have multiple SPI devices you must insure devices other than the SD card -have their chip select pin high when Sd2Card::init() is called. - -If you want to understand in more detail how AVR SPI works read this - -http://www.atmel.com/dyn/resources/prod_documents/doc2585.pdf. See section 2.3. diff --git a/libs/SdFatBeta20120108/MegaSoftSpi.txt b/libs/SdFatBeta20120108/MegaSoftSpi.txt deleted file mode 100755 index f086eca..0000000 --- a/libs/SdFatBeta20120108/MegaSoftSpi.txt +++ /dev/null @@ -1,14 +0,0 @@ -Features have been added to support an unmodified Adafruit GPS Shield -or Datalogging Shield on an Arduino Mega. - -Define MEGA_SOFT_SPI to be non-zero in SdFatConfig.h to use software SPI -on Mega Arduinos. Pins used are SS 10, MOSI 11, MISO 12, and SCK 13. - -Defining MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be -used on Mega Arduinos. Software SPI works well with GPS Shield V1.1 -but many SD cards will fail with GPS Shield V1.0. - -Software SPI should work with all Datalogging Shields. - -The examples SdFatGPS_CSVSensorLogger.pde and SdFatGPSLogger_v3.pde -should work on on the Mega when MEGA_SOFT_SPI is defined. \ No newline at end of file diff --git a/libs/SdFatBeta20120108/SdFat/Sd2PinMap.h b/libs/SdFatBeta20120108/SdFat/Sd2PinMap.h deleted file mode 100755 index d265839..0000000 --- a/libs/SdFatBeta20120108/SdFat/Sd2PinMap.h +++ /dev/null @@ -1,360 +0,0 @@ -/* Arduino SdFat Library - * Copyright (C) 2010 by William Greiman - * - * This file is part of the Arduino SdFat Library - * - * This Library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see - * . - */ -// Warning this file was generated by a program. -#ifndef Sd2PinMap_h -#define Sd2PinMap_h -#include -//------------------------------------------------------------------------------ -/** struct for mapping digital pins */ -struct pin_map_t { - volatile uint8_t* ddr; - volatile uint8_t* pin; - volatile uint8_t* port; - uint8_t bit; -}; -//------------------------------------------------------------------------------ -#if defined(__AVR_ATmega1280__)\ -|| defined(__AVR_ATmega2560__) -// Mega - -// Two Wire (aka I2C) ports -uint8_t const SDA_PIN = 20; // D1 -uint8_t const SCL_PIN = 21; // D0 - -// SPI port -uint8_t const SS_PIN = 53; // B0 -uint8_t const MOSI_PIN = 51; // B2 -uint8_t const MISO_PIN = 50; // B3 -uint8_t const SCK_PIN = 52; // B1 - -static const pin_map_t digitalPinMap[] = { - {&DDRE, &PINE, &PORTE, 0}, // E0 0 - {&DDRE, &PINE, &PORTE, 1}, // E1 1 - {&DDRE, &PINE, &PORTE, 4}, // E4 2 - {&DDRE, &PINE, &PORTE, 5}, // E5 3 - {&DDRG, &PING, &PORTG, 5}, // G5 4 - {&DDRE, &PINE, &PORTE, 3}, // E3 5 - {&DDRH, &PINH, &PORTH, 3}, // H3 6 - {&DDRH, &PINH, &PORTH, 4}, // H4 7 - {&DDRH, &PINH, &PORTH, 5}, // H5 8 - {&DDRH, &PINH, &PORTH, 6}, // H6 9 - {&DDRB, &PINB, &PORTB, 4}, // B4 10 - {&DDRB, &PINB, &PORTB, 5}, // B5 11 - {&DDRB, &PINB, &PORTB, 6}, // B6 12 - {&DDRB, &PINB, &PORTB, 7}, // B7 13 - {&DDRJ, &PINJ, &PORTJ, 1}, // J1 14 - {&DDRJ, &PINJ, &PORTJ, 0}, // J0 15 - {&DDRH, &PINH, &PORTH, 1}, // H1 16 - {&DDRH, &PINH, &PORTH, 0}, // H0 17 - {&DDRD, &PIND, &PORTD, 3}, // D3 18 - {&DDRD, &PIND, &PORTD, 2}, // D2 19 - {&DDRD, &PIND, &PORTD, 1}, // D1 20 - {&DDRD, &PIND, &PORTD, 0}, // D0 21 - {&DDRA, &PINA, &PORTA, 0}, // A0 22 - {&DDRA, &PINA, &PORTA, 1}, // A1 23 - {&DDRA, &PINA, &PORTA, 2}, // A2 24 - {&DDRA, &PINA, &PORTA, 3}, // A3 25 - {&DDRA, &PINA, &PORTA, 4}, // A4 26 - {&DDRA, &PINA, &PORTA, 5}, // A5 27 - {&DDRA, &PINA, &PORTA, 6}, // A6 28 - {&DDRA, &PINA, &PORTA, 7}, // A7 29 - {&DDRC, &PINC, &PORTC, 7}, // C7 30 - {&DDRC, &PINC, &PORTC, 6}, // C6 31 - {&DDRC, &PINC, &PORTC, 5}, // C5 32 - {&DDRC, &PINC, &PORTC, 4}, // C4 33 - {&DDRC, &PINC, &PORTC, 3}, // C3 34 - {&DDRC, &PINC, &PORTC, 2}, // C2 35 - {&DDRC, &PINC, &PORTC, 1}, // C1 36 - {&DDRC, &PINC, &PORTC, 0}, // C0 37 - {&DDRD, &PIND, &PORTD, 7}, // D7 38 - {&DDRG, &PING, &PORTG, 2}, // G2 39 - {&DDRG, &PING, &PORTG, 1}, // G1 40 - {&DDRG, &PING, &PORTG, 0}, // G0 41 - {&DDRL, &PINL, &PORTL, 7}, // L7 42 - {&DDRL, &PINL, &PORTL, 6}, // L6 43 - {&DDRL, &PINL, &PORTL, 5}, // L5 44 - {&DDRL, &PINL, &PORTL, 4}, // L4 45 - {&DDRL, &PINL, &PORTL, 3}, // L3 46 - {&DDRL, &PINL, &PORTL, 2}, // L2 47 - {&DDRL, &PINL, &PORTL, 1}, // L1 48 - {&DDRL, &PINL, &PORTL, 0}, // L0 49 - {&DDRB, &PINB, &PORTB, 3}, // B3 50 - {&DDRB, &PINB, &PORTB, 2}, // B2 51 - {&DDRB, &PINB, &PORTB, 1}, // B1 52 - {&DDRB, &PINB, &PORTB, 0}, // B0 53 - {&DDRF, &PINF, &PORTF, 0}, // F0 54 - {&DDRF, &PINF, &PORTF, 1}, // F1 55 - {&DDRF, &PINF, &PORTF, 2}, // F2 56 - {&DDRF, &PINF, &PORTF, 3}, // F3 57 - {&DDRF, &PINF, &PORTF, 4}, // F4 58 - {&DDRF, &PINF, &PORTF, 5}, // F5 59 - {&DDRF, &PINF, &PORTF, 6}, // F6 60 - {&DDRF, &PINF, &PORTF, 7}, // F7 61 - {&DDRK, &PINK, &PORTK, 0}, // K0 62 - {&DDRK, &PINK, &PORTK, 1}, // K1 63 - {&DDRK, &PINK, &PORTK, 2}, // K2 64 - {&DDRK, &PINK, &PORTK, 3}, // K3 65 - {&DDRK, &PINK, &PORTK, 4}, // K4 66 - {&DDRK, &PINK, &PORTK, 5}, // K5 67 - {&DDRK, &PINK, &PORTK, 6}, // K6 68 - {&DDRK, &PINK, &PORTK, 7} // K7 69 -}; -//------------------------------------------------------------------------------ -#elif defined(__AVR_ATmega644P__)\ -|| defined(__AVR_ATmega644__)\ -|| defined(__AVR_ATmega1284P__) -// Sanguino - -// Two Wire (aka I2C) ports -uint8_t const SDA_PIN = 17; // C1 -uint8_t const SCL_PIN = 18; // C2 - -// SPI port -uint8_t const SS_PIN = 4; // B4 -uint8_t const MOSI_PIN = 5; // B5 -uint8_t const MISO_PIN = 6; // B6 -uint8_t const SCK_PIN = 7; // B7 - -static const pin_map_t digitalPinMap[] = { - {&DDRB, &PINB, &PORTB, 0}, // B0 0 - {&DDRB, &PINB, &PORTB, 1}, // B1 1 - {&DDRB, &PINB, &PORTB, 2}, // B2 2 - {&DDRB, &PINB, &PORTB, 3}, // B3 3 - {&DDRB, &PINB, &PORTB, 4}, // B4 4 - {&DDRB, &PINB, &PORTB, 5}, // B5 5 - {&DDRB, &PINB, &PORTB, 6}, // B6 6 - {&DDRB, &PINB, &PORTB, 7}, // B7 7 - {&DDRD, &PIND, &PORTD, 0}, // D0 8 - {&DDRD, &PIND, &PORTD, 1}, // D1 9 - {&DDRD, &PIND, &PORTD, 2}, // D2 10 - {&DDRD, &PIND, &PORTD, 3}, // D3 11 - {&DDRD, &PIND, &PORTD, 4}, // D4 12 - {&DDRD, &PIND, &PORTD, 5}, // D5 13 - {&DDRD, &PIND, &PORTD, 6}, // D6 14 - {&DDRD, &PIND, &PORTD, 7}, // D7 15 - {&DDRC, &PINC, &PORTC, 0}, // C0 16 - {&DDRC, &PINC, &PORTC, 1}, // C1 17 - {&DDRC, &PINC, &PORTC, 2}, // C2 18 - {&DDRC, &PINC, &PORTC, 3}, // C3 19 - {&DDRC, &PINC, &PORTC, 4}, // C4 20 - {&DDRC, &PINC, &PORTC, 5}, // C5 21 - {&DDRC, &PINC, &PORTC, 6}, // C6 22 - {&DDRC, &PINC, &PORTC, 7}, // C7 23 - {&DDRA, &PINA, &PORTA, 7}, // A7 24 - {&DDRA, &PINA, &PORTA, 6}, // A6 25 - {&DDRA, &PINA, &PORTA, 5}, // A5 26 - {&DDRA, &PINA, &PORTA, 4}, // A4 27 - {&DDRA, &PINA, &PORTA, 3}, // A3 28 - {&DDRA, &PINA, &PORTA, 2}, // A2 29 - {&DDRA, &PINA, &PORTA, 1}, // A1 30 - {&DDRA, &PINA, &PORTA, 0} // A0 31 -}; -//------------------------------------------------------------------------------ -#elif defined(__AVR_ATmega32U4__) -// Teensy 2.0 - -// Two Wire (aka I2C) ports -uint8_t const SDA_PIN = 6; // D1 -uint8_t const SCL_PIN = 5; // D0 - -// SPI port -uint8_t const SS_PIN = 0; // B0 -uint8_t const MOSI_PIN = 2; // B2 -uint8_t const MISO_PIN = 3; // B3 -uint8_t const SCK_PIN = 1; // B1 - -static const pin_map_t digitalPinMap[] = { - {&DDRB, &PINB, &PORTB, 0}, // B0 0 - {&DDRB, &PINB, &PORTB, 1}, // B1 1 - {&DDRB, &PINB, &PORTB, 2}, // B2 2 - {&DDRB, &PINB, &PORTB, 3}, // B3 3 - {&DDRB, &PINB, &PORTB, 7}, // B7 4 - {&DDRD, &PIND, &PORTD, 0}, // D0 5 - {&DDRD, &PIND, &PORTD, 1}, // D1 6 - {&DDRD, &PIND, &PORTD, 2}, // D2 7 - {&DDRD, &PIND, &PORTD, 3}, // D3 8 - {&DDRC, &PINC, &PORTC, 6}, // C6 9 - {&DDRC, &PINC, &PORTC, 7}, // C7 10 - {&DDRD, &PIND, &PORTD, 6}, // D6 11 - {&DDRD, &PIND, &PORTD, 7}, // D7 12 - {&DDRB, &PINB, &PORTB, 4}, // B4 13 - {&DDRB, &PINB, &PORTB, 5}, // B5 14 - {&DDRB, &PINB, &PORTB, 6}, // B6 15 - {&DDRF, &PINF, &PORTF, 7}, // F7 16 - {&DDRF, &PINF, &PORTF, 6}, // F6 17 - {&DDRF, &PINF, &PORTF, 5}, // F5 18 - {&DDRF, &PINF, &PORTF, 4}, // F4 19 - {&DDRF, &PINF, &PORTF, 1}, // F1 20 - {&DDRF, &PINF, &PORTF, 0}, // F0 21 - {&DDRD, &PIND, &PORTD, 4}, // D4 22 - {&DDRD, &PIND, &PORTD, 5}, // D5 23 - {&DDRE, &PINE, &PORTE, 6} // E6 24 -}; -//------------------------------------------------------------------------------ -#elif defined(__AVR_AT90USB646__)\ -|| defined(__AVR_AT90USB1286__) -// Teensy++ 1.0 & 2.0 - -// Two Wire (aka I2C) ports -uint8_t const SDA_PIN = 1; // D1 -uint8_t const SCL_PIN = 0; // D0 - -// SPI port -uint8_t const SS_PIN = 20; // B0 -uint8_t const MOSI_PIN = 22; // B2 -uint8_t const MISO_PIN = 23; // B3 -uint8_t const SCK_PIN = 21; // B1 - -static const pin_map_t digitalPinMap[] = { - {&DDRD, &PIND, &PORTD, 0}, // D0 0 - {&DDRD, &PIND, &PORTD, 1}, // D1 1 - {&DDRD, &PIND, &PORTD, 2}, // D2 2 - {&DDRD, &PIND, &PORTD, 3}, // D3 3 - {&DDRD, &PIND, &PORTD, 4}, // D4 4 - {&DDRD, &PIND, &PORTD, 5}, // D5 5 - {&DDRD, &PIND, &PORTD, 6}, // D6 6 - {&DDRD, &PIND, &PORTD, 7}, // D7 7 - {&DDRE, &PINE, &PORTE, 0}, // E0 8 - {&DDRE, &PINE, &PORTE, 1}, // E1 9 - {&DDRC, &PINC, &PORTC, 0}, // C0 10 - {&DDRC, &PINC, &PORTC, 1}, // C1 11 - {&DDRC, &PINC, &PORTC, 2}, // C2 12 - {&DDRC, &PINC, &PORTC, 3}, // C3 13 - {&DDRC, &PINC, &PORTC, 4}, // C4 14 - {&DDRC, &PINC, &PORTC, 5}, // C5 15 - {&DDRC, &PINC, &PORTC, 6}, // C6 16 - {&DDRC, &PINC, &PORTC, 7}, // C7 17 - {&DDRE, &PINE, &PORTE, 6}, // E6 18 - {&DDRE, &PINE, &PORTE, 7}, // E7 19 - {&DDRB, &PINB, &PORTB, 0}, // B0 20 - {&DDRB, &PINB, &PORTB, 1}, // B1 21 - {&DDRB, &PINB, &PORTB, 2}, // B2 22 - {&DDRB, &PINB, &PORTB, 3}, // B3 23 - {&DDRB, &PINB, &PORTB, 4}, // B4 24 - {&DDRB, &PINB, &PORTB, 5}, // B5 25 - {&DDRB, &PINB, &PORTB, 6}, // B6 26 - {&DDRB, &PINB, &PORTB, 7}, // B7 27 - {&DDRA, &PINA, &PORTA, 0}, // A0 28 - {&DDRA, &PINA, &PORTA, 1}, // A1 29 - {&DDRA, &PINA, &PORTA, 2}, // A2 30 - {&DDRA, &PINA, &PORTA, 3}, // A3 31 - {&DDRA, &PINA, &PORTA, 4}, // A4 32 - {&DDRA, &PINA, &PORTA, 5}, // A5 33 - {&DDRA, &PINA, &PORTA, 6}, // A6 34 - {&DDRA, &PINA, &PORTA, 7}, // A7 35 - {&DDRE, &PINE, &PORTE, 4}, // E4 36 - {&DDRE, &PINE, &PORTE, 5}, // E5 37 - {&DDRF, &PINF, &PORTF, 0}, // F0 38 - {&DDRF, &PINF, &PORTF, 1}, // F1 39 - {&DDRF, &PINF, &PORTF, 2}, // F2 40 - {&DDRF, &PINF, &PORTF, 3}, // F3 41 - {&DDRF, &PINF, &PORTF, 4}, // F4 42 - {&DDRF, &PINF, &PORTF, 5}, // F5 43 - {&DDRF, &PINF, &PORTF, 6}, // F6 44 - {&DDRF, &PINF, &PORTF, 7} // F7 45 -}; -//------------------------------------------------------------------------------ -#elif defined(__AVR_ATmega168__)\ -||defined(__AVR_ATmega168P__)\ -||defined(__AVR_ATmega328P__) -// 168 and 328 Arduinos - -// Two Wire (aka I2C) ports -uint8_t const SDA_PIN = 18; // C4 -uint8_t const SCL_PIN = 19; // C5 - -// SPI port -uint8_t const SS_PIN = 10; // B2 -uint8_t const MOSI_PIN = 11; // B3 -uint8_t const MISO_PIN = 12; // B4 -uint8_t const SCK_PIN = 13; // B5 - -static const pin_map_t digitalPinMap[] = { - {&DDRD, &PIND, &PORTD, 0}, // D0 0 - {&DDRD, &PIND, &PORTD, 1}, // D1 1 - {&DDRD, &PIND, &PORTD, 2}, // D2 2 - {&DDRD, &PIND, &PORTD, 3}, // D3 3 - {&DDRD, &PIND, &PORTD, 4}, // D4 4 - {&DDRD, &PIND, &PORTD, 5}, // D5 5 - {&DDRD, &PIND, &PORTD, 6}, // D6 6 - {&DDRD, &PIND, &PORTD, 7}, // D7 7 - {&DDRB, &PINB, &PORTB, 0}, // B0 8 - {&DDRB, &PINB, &PORTB, 1}, // B1 9 - {&DDRB, &PINB, &PORTB, 2}, // B2 10 - {&DDRB, &PINB, &PORTB, 3}, // B3 11 - {&DDRB, &PINB, &PORTB, 4}, // B4 12 - {&DDRB, &PINB, &PORTB, 5}, // B5 13 - {&DDRC, &PINC, &PORTC, 0}, // C0 14 - {&DDRC, &PINC, &PORTC, 1}, // C1 15 - {&DDRC, &PINC, &PORTC, 2}, // C2 16 - {&DDRC, &PINC, &PORTC, 3}, // C3 17 - {&DDRC, &PINC, &PORTC, 4}, // C4 18 - {&DDRC, &PINC, &PORTC, 5} // C5 19 -}; -#else // defined(__AVR_ATmega1280__) -#error unknown chip -#endif // defined(__AVR_ATmega1280__) -//------------------------------------------------------------------------------ -static const uint8_t digitalPinCount = sizeof(digitalPinMap)/sizeof(pin_map_t); - -uint8_t badPinNumber(void) - __attribute__((error("Pin number is too large or not a constant"))); - -static inline __attribute__((always_inline)) - bool getPinMode(uint8_t pin) { - if (__builtin_constant_p(pin) && pin < digitalPinCount) { - return (*digitalPinMap[pin].ddr >> digitalPinMap[pin].bit) & 1; - } else { - return badPinNumber(); - } -} -static inline __attribute__((always_inline)) - void setPinMode(uint8_t pin, uint8_t mode) { - if (__builtin_constant_p(pin) && pin < digitalPinCount) { - if (mode) { - *digitalPinMap[pin].ddr |= 1 << digitalPinMap[pin].bit; - } else { - *digitalPinMap[pin].ddr &= ~(1 << digitalPinMap[pin].bit); - } - } else { - badPinNumber(); - } -} -static inline __attribute__((always_inline)) - bool fastDigitalRead(uint8_t pin) { - if (__builtin_constant_p(pin) && pin < digitalPinCount) { - return (*digitalPinMap[pin].pin >> digitalPinMap[pin].bit) & 1; - } else { - return badPinNumber(); - } -} -static inline __attribute__((always_inline)) - void fastDigitalWrite(uint8_t pin, uint8_t value) { - if (__builtin_constant_p(pin) && pin < digitalPinCount) { - if (value) { - *digitalPinMap[pin].port |= 1 << digitalPinMap[pin].bit; - } else { - *digitalPinMap[pin].port &= ~(1 << digitalPinMap[pin].bit); - } - } else { - badPinNumber(); - } -} -#endif // Sd2PinMap_h diff --git a/libs/SdFatBeta20120108/SdFat/SdBaseFile.h b/libs/SdFatBeta20120108/SdFat/SdBaseFile.h deleted file mode 100755 index 420c651..0000000 --- a/libs/SdFatBeta20120108/SdFat/SdBaseFile.h +++ /dev/null @@ -1,489 +0,0 @@ -/* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman - * - * This file is part of the Arduino SdFat Library - * - * This Library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see - * . - */ -#ifndef SdBaseFile_h -#define SdBaseFile_h -/** - * \file - * \brief SdBaseFile class - */ -#include -#if ARDUINO < 100 -#include -#else // ARDUINO -#include -#endif // ARDUINO -#include -#include -//------------------------------------------------------------------------------ -/** - * \struct fpos_t - * \brief internal type for istream - * do not use in user apps - */ -struct fpos_t { - /** stream position */ - uint32_t position; - /** cluster for position */ - uint32_t cluster; - fpos_t() : position(0), cluster(0) {} -}; - -// use the gnu style oflag in open() -/** open() oflag for reading */ -uint8_t const O_READ = 0X01; -/** open() oflag - same as O_IN */ -uint8_t const O_RDONLY = O_READ; -/** open() oflag for write */ -uint8_t const O_WRITE = 0X02; -/** open() oflag - same as O_WRITE */ -uint8_t const O_WRONLY = O_WRITE; -/** open() oflag for reading and writing */ -uint8_t const O_RDWR = (O_READ | O_WRITE); -/** open() oflag mask for access modes */ -uint8_t const O_ACCMODE = (O_READ | O_WRITE); -/** The file offset shall be set to the end of the file prior to each write. */ -uint8_t const O_APPEND = 0X04; -/** synchronous writes - call sync() after each write */ -uint8_t const O_SYNC = 0X08; -/** truncate the file to zero length */ -uint8_t const O_TRUNC = 0X10; -/** set the initial position at the end of the file */ -uint8_t const O_AT_END = 0X20; -/** create the file if nonexistent */ -uint8_t const O_CREAT = 0X40; -/** If O_CREAT and O_EXCL are set, open() shall fail if the file exists */ -uint8_t const O_EXCL = 0X80; - -// SdBaseFile class static and const definitions -// flags for ls() -/** ls() flag to print modify date */ -uint8_t const LS_DATE = 1; -/** ls() flag to print file size */ -uint8_t const LS_SIZE = 2; -/** ls() flag for recursive list of subdirectories */ -uint8_t const LS_R = 4; - - -// flags for timestamp -/** set the file's last access date */ -uint8_t const T_ACCESS = 1; -/** set the file's creation date and time */ -uint8_t const T_CREATE = 2; -/** Set the file's write date and time */ -uint8_t const T_WRITE = 4; -// values for type_ -/** This file has not been opened. */ -uint8_t const FAT_FILE_TYPE_CLOSED = 0; -/** A normal file */ -uint8_t const FAT_FILE_TYPE_NORMAL = 1; -/** A FAT12 or FAT16 root directory */ -uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2; -/** A FAT32 root directory */ -uint8_t const FAT_FILE_TYPE_ROOT32 = 3; -/** A subdirectory file*/ -uint8_t const FAT_FILE_TYPE_SUBDIR = 4; -/** Test value for directory type */ -uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED; - -/** date field for FAT directory entry - * \param[in] year [1980,2107] - * \param[in] month [1,12] - * \param[in] day [1,31] - * - * \return Packed date for dir_t entry. - */ -static inline uint16_t FAT_DATE(uint16_t year, uint8_t month, uint8_t day) { - return (year - 1980) << 9 | month << 5 | day; -} -/** year part of FAT directory date field - * \param[in] fatDate Date in packed dir format. - * - * \return Extracted year [1980,2107] - */ -static inline uint16_t FAT_YEAR(uint16_t fatDate) { - return 1980 + (fatDate >> 9); -} -/** month part of FAT directory date field - * \param[in] fatDate Date in packed dir format. - * - * \return Extracted month [1,12] - */ -static inline uint8_t FAT_MONTH(uint16_t fatDate) { - return (fatDate >> 5) & 0XF; -} -/** day part of FAT directory date field - * \param[in] fatDate Date in packed dir format. - * - * \return Extracted day [1,31] - */ -static inline uint8_t FAT_DAY(uint16_t fatDate) { - return fatDate & 0X1F; -} -/** time field for FAT directory entry - * \param[in] hour [0,23] - * \param[in] minute [0,59] - * \param[in] second [0,59] - * - * \return Packed time for dir_t entry. - */ -static inline uint16_t FAT_TIME(uint8_t hour, uint8_t minute, uint8_t second) { - return hour << 11 | minute << 5 | second >> 1; -} -/** hour part of FAT directory time field - * \param[in] fatTime Time in packed dir format. - * - * \return Extracted hour [0,23] - */ -static inline uint8_t FAT_HOUR(uint16_t fatTime) { - return fatTime >> 11; -} -/** minute part of FAT directory time field - * \param[in] fatTime Time in packed dir format. - * - * \return Extracted minute [0,59] - */ -static inline uint8_t FAT_MINUTE(uint16_t fatTime) { - return(fatTime >> 5) & 0X3F; -} -/** second part of FAT directory time field - * Note second/2 is stored in packed time. - * - * \param[in] fatTime Time in packed dir format. - * - * \return Extracted second [0,58] - */ -static inline uint8_t FAT_SECOND(uint16_t fatTime) { - return 2*(fatTime & 0X1F); -} -/** Default date for file timestamps is 1 Jan 2000 */ -uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1; -/** Default time for file timestamp is 1 am */ -uint16_t const FAT_DEFAULT_TIME = (1 << 11); -//------------------------------------------------------------------------------ -/** - * \class SdBaseFile - * \brief Base class for SdFile with Print and C++ streams. - */ -class SdBaseFile { - public: - /** Create an instance. */ - SdBaseFile() : writeError(false), type_(FAT_FILE_TYPE_CLOSED) {} - SdBaseFile(const char* path, uint8_t oflag); - ~SdBaseFile() {if(isOpen()) close();} - /** - * writeError is set to true if an error occurs during a write(). - * Set writeError to false before calling print() and/or write() and check - * for true after calls to print() and/or write(). - */ - bool writeError; - //---------------------------------------------------------------------------- - // helpers for stream classes - /** get position for streams - * \param[out] pos struct to receive position - */ - void getpos(fpos_t* pos); - /** set position for streams - * \param[out] pos struct with value for new position - */ - void setpos(fpos_t* pos); - //---------------------------------------------------------------------------- - bool close(); - bool contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock); - bool createContiguous(SdBaseFile* dirFile, - const char* path, uint32_t size); - /** \return The current cluster number for a file or directory. */ - uint32_t curCluster() const {return curCluster_;} - /** \return The current position for a file or directory. */ - uint32_t curPosition() const {return curPosition_;} - /** \return Current working directory */ - static SdBaseFile* cwd() {return cwd_;} - /** Set the date/time callback function - * - * \param[in] dateTime The user's call back function. The callback - * function is of the form: - * - * \code - * void dateTime(uint16_t* date, uint16_t* time) { - * uint16_t year; - * uint8_t month, day, hour, minute, second; - * - * // User gets date and time from GPS or real-time clock here - * - * // return date using FAT_DATE macro to format fields - * *date = FAT_DATE(year, month, day); - * - * // return time using FAT_TIME macro to format fields - * *time = FAT_TIME(hour, minute, second); - * } - * \endcode - * - * Sets the function that is called when a file is created or when - * a file's directory entry is modified by sync(). All timestamps, - * access, creation, and modify, are set when a file is created. - * sync() maintains the last access date and last modify date/time. - * - * See the timestamp() function. - */ - static void dateTimeCallback( - void (*dateTime)(uint16_t* date, uint16_t* time)) { - dateTime_ = dateTime; - } - /** Cancel the date/time callback function. */ - static void dateTimeCallbackCancel() {dateTime_ = 0;} - bool dirEntry(dir_t* dir); - static void dirName(const dir_t& dir, char* name); - bool exists(const char* name); - int16_t fgets(char* str, int16_t num, char* delim = 0); - /** \return The total number of bytes in a file or directory. */ - uint32_t fileSize() const {return fileSize_;} - /** \return The first cluster number for a file or directory. */ - uint32_t firstCluster() const {return firstCluster_;} - bool getFilename(char* name); - /** \return True if this is a directory else false. */ - bool isDir() const {return type_ >= FAT_FILE_TYPE_MIN_DIR;} - /** \return True if this is a normal file else false. */ - bool isFile() const {return type_ == FAT_FILE_TYPE_NORMAL;} - /** \return True if this is an open file/directory else false. */ - bool isOpen() const {return type_ != FAT_FILE_TYPE_CLOSED;} - /** \return True if this is a subdirectory else false. */ - bool isSubDir() const {return type_ == FAT_FILE_TYPE_SUBDIR;} - /** \return True if this is the root directory. */ - bool isRoot() const { - return type_ == FAT_FILE_TYPE_ROOT_FIXED || type_ == FAT_FILE_TYPE_ROOT32; - } - void ls(Print* pr, uint8_t flags = 0, uint8_t indent = 0); - void ls(uint8_t flags = 0); - bool mkdir(SdBaseFile* dir, const char* path, bool pFlag = true); - // alias for backward compactability - bool makeDir(SdBaseFile* dir, const char* path) { - return mkdir(dir, path, false); - } - bool open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag); - bool open(SdBaseFile* dirFile, const char* path, uint8_t oflag); - bool open(const char* path, uint8_t oflag = O_READ); - bool openNext(SdBaseFile* dirFile, uint8_t oflag); - bool openRoot(SdVolume* vol); - int peek(); - static void printFatDate(uint16_t fatDate); - static void printFatDate(Print* pr, uint16_t fatDate); - static void printFatTime(uint16_t fatTime); - static void printFatTime(Print* pr, uint16_t fatTime); - bool printName(); - int16_t read(); - int16_t read(void* buf, uint16_t nbyte); - int8_t readDir(dir_t* dir); - static bool remove(SdBaseFile* dirFile, const char* path); - bool remove(); - /** Set the file's current position to zero. */ - void rewind() {seekSet(0);} - bool rename(SdBaseFile* dirFile, const char* newPath); - bool rmdir(); - // for backward compatibility - bool rmDir() {return rmdir();} - bool rmRfStar(); - /** Set the files position to current position + \a pos. See seekSet(). - * \param[in] offset The new position in bytes from the current position. - * \return true for success or false for failure. - */ - bool seekCur(int32_t offset) { - return seekSet(curPosition_ + offset); - } - /** Set the files position to end-of-file + \a offset. See seekSet(). - * \param[in] offset The new position in bytes from end-of-file. - * \return true for success or false for failure. - */ - bool seekEnd(int32_t offset = 0) {return seekSet(fileSize_ + offset);} - bool seekSet(uint32_t pos); - bool sync(); - bool timestamp(SdBaseFile* file); - bool timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, - uint8_t hour, uint8_t minute, uint8_t second); - /** Type of file. You should use isFile() or isDir() instead of type() - * if possible. - * - * \return The file or directory type. - */ - uint8_t type() const {return type_;} - bool truncate(uint32_t size); - /** \return SdVolume that contains this file. */ - SdVolume* volume() const {return vol_;} - int16_t write(const void* buf, uint16_t nbyte); -//------------------------------------------------------------------------------ - private: - // allow SdFat to set cwd_ - friend class SdFat; - // global pointer to cwd dir - static SdBaseFile* cwd_; - // data time callback function - static void (*dateTime_)(uint16_t* date, uint16_t* time); - // bits defined in flags_ - // should be 0X0F - static uint8_t const F_OFLAG = (O_ACCMODE | O_APPEND | O_SYNC); - // sync of directory entry required - static uint8_t const F_FILE_DIR_DIRTY = 0X80; - - // private data - uint8_t flags_; // See above for definition of flags_ bits - uint8_t fstate_; // error and eof indicator - uint8_t type_; // type of file see above for values - uint32_t curCluster_; // cluster for current file position - uint32_t curPosition_; // current file position in bytes from beginning - uint32_t dirBlock_; // block for this files directory entry - uint8_t dirIndex_; // index of directory entry in dirBlock - uint32_t fileSize_; // file size in bytes - uint32_t firstCluster_; // first cluster of file - SdVolume* vol_; // volume where file is located - - /** experimental don't use */ - bool openParent(SdBaseFile* dir); - // private functions - bool addCluster(); - bool addDirCluster(); - dir_t* cacheDirEntry(uint8_t action); - int8_t lsPrintNext(Print *pr, uint8_t flags, uint8_t indent); - static bool make83Name(const char* str, uint8_t* name, const char** ptr); - bool mkdir(SdBaseFile* parent, const uint8_t dname[11]); - bool open(SdBaseFile* dirFile, const uint8_t dname[11], uint8_t oflag); - bool openCachedEntry(uint8_t cacheIndex, uint8_t oflags); - dir_t* readDirCache(); -//------------------------------------------------------------------------------ -// to be deleted - static void printDirName(const dir_t& dir, - uint8_t width, bool printSlash); - static void printDirName(Print* pr, const dir_t& dir, - uint8_t width, bool printSlash); -//------------------------------------------------------------------------------ -// Deprecated functions - suppress cpplint warnings with NOLINT comment -#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN) - public: - /** \deprecated Use: - * bool contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock); - * \param[out] bgnBlock the first block address for the file. - * \param[out] endBlock the last block address for the file. - * \return true for success or false for failure. - */ - bool contiguousRange(uint32_t& bgnBlock, uint32_t& endBlock) { // NOLINT - return contiguousRange(&bgnBlock, &endBlock); - } - /** \deprecated Use: - * bool createContiguous(SdBaseFile* dirFile, - * const char* path, uint32_t size) - * \param[in] dirFile The directory where the file will be created. - * \param[in] path A path with a valid DOS 8.3 file name. - * \param[in] size The desired file size. - * \return true for success or false for failure. - */ - bool createContiguous(SdBaseFile& dirFile, // NOLINT - const char* path, uint32_t size) { - return createContiguous(&dirFile, path, size); - } - /** \deprecated Use: - * static void dateTimeCallback( - * void (*dateTime)(uint16_t* date, uint16_t* time)); - * \param[in] dateTime The user's call back function. - */ - static void dateTimeCallback( - void (*dateTime)(uint16_t& date, uint16_t& time)) { // NOLINT - oldDateTime_ = dateTime; - dateTime_ = dateTime ? oldToNew : 0; - } - /** \deprecated Use: bool dirEntry(dir_t* dir); - * \param[out] dir Location for return of the file's directory entry. - * \return true for success or false for failure. - */ - bool dirEntry(dir_t& dir) {return dirEntry(&dir);} // NOLINT - /** \deprecated Use: - * bool mkdir(SdBaseFile* dir, const char* path); - * \param[in] dir An open SdFat instance for the directory that will contain - * the new directory. - * \param[in] path A path with a valid 8.3 DOS name for the new directory. - * \return true for success or false for failure. - */ - bool mkdir(SdBaseFile& dir, const char* path) { // NOLINT - return mkdir(&dir, path); - } - /** \deprecated Use: - * bool open(SdBaseFile* dirFile, const char* path, uint8_t oflag); - * \param[in] dirFile An open SdFat instance for the directory containing the - * file to be opened. - * \param[in] path A path with a valid 8.3 DOS name for the file. - * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive - * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC. - * \return true for success or false for failure. - */ - bool open(SdBaseFile& dirFile, // NOLINT - const char* path, uint8_t oflag) { - return open(&dirFile, path, oflag); - } - /** \deprecated Do not use in new apps - * \param[in] dirFile An open SdFat instance for the directory containing the - * file to be opened. - * \param[in] path A path with a valid 8.3 DOS name for a file to be opened. - * \return true for success or false for failure. - */ - bool open(SdBaseFile& dirFile, const char* path) { // NOLINT - return open(dirFile, path, O_RDWR); - } - /** \deprecated Use: - * bool open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag); - * \param[in] dirFile An open SdFat instance for the directory. - * \param[in] index The \a index of the directory entry for the file to be - * opened. The value for \a index is (directory file position)/32. - * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive - * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC. - * \return true for success or false for failure. - */ - bool open(SdBaseFile& dirFile, uint16_t index, uint8_t oflag) { // NOLINT - return open(&dirFile, index, oflag); - } - /** \deprecated Use: bool openRoot(SdVolume* vol); - * \param[in] vol The FAT volume containing the root directory to be opened. - * \return true for success or false for failure. - */ - bool openRoot(SdVolume& vol) {return openRoot(&vol);} // NOLINT - /** \deprecated Use: int8_t readDir(dir_t* dir); - * \param[out] dir The dir_t struct that will receive the data. - * \return bytes read for success zero for eof or -1 for failure. - */ - int8_t readDir(dir_t& dir) {return readDir(&dir);} // NOLINT - /** \deprecated Use: - * static uint8_t remove(SdBaseFile* dirFile, const char* path); - * \param[in] dirFile The directory that contains the file. - * \param[in] path The name of the file to be removed. - * \return true for success or false for failure. - */ - static bool remove(SdBaseFile& dirFile, const char* path) { // NOLINT - return remove(&dirFile, path); - } -//------------------------------------------------------------------------------ -// rest are private - private: - static void (*oldDateTime_)(uint16_t& date, uint16_t& time); // NOLINT - static void oldToNew(uint16_t* date, uint16_t* time) { - uint16_t d; - uint16_t t; - oldDateTime_(d, t); - *date = d; - *time = t; - } -#endif // ALLOW_DEPRECATED_FUNCTIONS -}; - -#endif // SdBaseFile_h diff --git a/libs/SdFatBeta20120108/SdFat/SdFatConfig.h b/libs/SdFatBeta20120108/SdFat/SdFatConfig.h deleted file mode 100755 index 343f2f0..0000000 --- a/libs/SdFatBeta20120108/SdFat/SdFatConfig.h +++ /dev/null @@ -1,121 +0,0 @@ -/* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman - * - * This file is part of the Arduino SdFat Library - * - * This Library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see - * . - */ -/** - * \file - * \brief configuration definitions - */ -#ifndef SdFatConfig_h -#define SdFatConfig_h -#include -//------------------------------------------------------------------------------ -/** - * To use multiple SD cards set USE_MULTIPLE_CARDS nonzero. - * - * Using multiple cards costs 400 - 500 bytes of flash. - * - * Each card requires about 550 bytes of SRAM so use of a Mega is recommended. - */ -#define USE_MULTIPLE_CARDS 0 -//------------------------------------------------------------------------------ -/** - * Set nonzero to use Serial (the HardwareSerial class) for error messages - * and output from print functions like ls(). - * - * If USE_SERIAL_FOR_STD_OUT is zero, a small non-interrupt driven class - * is used to output messages to serial port zero. This allows an alternate - * Serial library like SerialPort to be used with SdFat. - * - * You can redirect stdOut with SdFat::setStdOut(Print* stream) and - * get the current stream with SdFat::stdOut(). - */ -#define USE_SERIAL_FOR_STD_OUT 0 -//------------------------------------------------------------------------------ -/** - * Call flush for endl if ENDL_CALLS_FLUSH is nonzero - * - * The standard for iostreams is to call flush. This is very costly for - * SdFat. Each call to flush causes 2048 bytes of I/O to the SD. - * - * SdFat has a single 512 byte buffer for SD I/O so it must write the current - * data block to the SD, read the directory block from the SD, update the - * directory entry, write the directory block to the SD and read the data - * block back into the buffer. - * - * The SD flash memory controller is not designed for this many rewrites - * so performance may be reduced by more than a factor of 100. - * - * If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force - * all data to be written to the SD. - */ -#define ENDL_CALLS_FLUSH 0 -//------------------------------------------------------------------------------ -/** - * Allow use of deprecated functions if ALLOW_DEPRECATED_FUNCTIONS is nonzero - */ -#define ALLOW_DEPRECATED_FUNCTIONS 1 -//------------------------------------------------------------------------------ -/** - * Allow FAT12 volumes if FAT12_SUPPORT is nonzero. - * FAT12 has not been well tested. - */ -#define FAT12_SUPPORT 0 -//------------------------------------------------------------------------------ -/** - * SPI init rate for SD initialization commands. Must be 5 (F_CPU/64) - * or 6 (F_CPU/128). - */ -#define SPI_SD_INIT_RATE 5 -//------------------------------------------------------------------------------ -/** - * Set the SS pin high for hardware SPI. If SS is chip select for another SPI - * device this will disable that device during the SD init phase. - */ -#define SET_SPI_SS_HIGH 1 -//------------------------------------------------------------------------------ -/** - * Define MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos. - * Pins used are SS 10, MOSI 11, MISO 12, and SCK 13. - * - * MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used - * on Mega Arduinos. Software SPI works well with GPS Shield V1.1 - * but many SD cards will fail with GPS Shield V1.0. - */ -#define MEGA_SOFT_SPI 0 -//------------------------------------------------------------------------------ -/** - * Set USE_SOFTWARE_SPI nonzero to always use software SPI. - */ -#define USE_SOFTWARE_SPI 0 -// define software SPI pins so Mega can use unmodified 168/328 shields -/** Software SPI chip select pin for the SD */ -uint8_t const SOFT_SPI_CS_PIN = 10; -/** Software SPI Master Out Slave In pin */ -uint8_t const SOFT_SPI_MOSI_PIN = 11; -/** Software SPI Master In Slave Out pin */ -uint8_t const SOFT_SPI_MISO_PIN = 12; -/** Software SPI Clock pin */ -uint8_t const SOFT_SPI_SCK_PIN = 13; -//------------------------------------------------------------------------------ -/** - * The __cxa_pure_virtual function is an error handler that is invoked when - * a pure virtual function is called. - */ -#define USE_CXA_PURE_VIRTUAL 1 -#endif // SdFatConfig_h diff --git a/libs/SdFatBeta20120108/SdFat/SdFatmainpage.h b/libs/SdFatBeta20120108/SdFat/SdFatmainpage.h deleted file mode 100755 index fad0149..0000000 --- a/libs/SdFatBeta20120108/SdFat/SdFatmainpage.h +++ /dev/null @@ -1,228 +0,0 @@ -/* Arduino SdFat Library - * Copyright (C) 2011 by William Greiman - * - * This file is part of the Arduino SdFat Library - * - * This Library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see - * . - */ - -/** -\mainpage Arduino %SdFat Library -
Copyright © 2011 by William Greiman -
- -\section Intro Introduction -The Arduino %SdFat Library is a minimal implementation of FAT16 and FAT32 -file systems on SD flash memory cards. Standard SD and high capacity SDHC -cards are supported. - -Experimental support for FAT12 can be enabled by setting FAT12_SUPPORT -nonzero in SdFatConfig.h. - -The %SdFat library only supports short 8.3 names. - -The main classes in %SdFat are SdFat, SdFile, \ref fstream, \ref ifstream, -and \ref ofstream. - -The SdFat class maintains a volume working directories, a current working -directory, and simplifies initialization of other classes. - -The SdFile class provides binary file access functions such as open(), read(), -remove(), write(), close() and sync(). This class supports access to the root -directory and subdirectories. - -The \ref fstream class implements C++ iostreams for both reading and writing -text files. - -The \ref ifstream class implements the C++ iostreams for reading text files. - -The \ref ofstream class implements the C++ iostreams for writing text files. - -The classes \ref ibufstream and \ref obufstream format and parse character - strings in memory buffers. - -the classes ArduinoInStream and ArduinoOutStream provide iostream functions -for Serial, LiquidCrystal, and other devices. - -The SdVolume class supports FAT16 and FAT32 partitions. Most applications -will not need to call SdVolume member function. - -The Sd2Card class supports access to standard SD cards and SDHC cards. Most -applications will not need to call Sd2Card functions. The Sd2Card class can -be used for raw access to the SD card. - -A number of example are provided in the %SdFat/examples folder. These were -developed to test %SdFat and illustrate its use. - -%SdFat was developed for high speed data recording. %SdFat was used to -implement an audio record/play class, WaveRP, for the Adafruit Wave Shield. -This application uses special Sd2Card calls to write to contiguous files in -raw mode. These functions reduce write latency so that audio can be -recorded with the small amount of RAM in the Arduino. - -\section SDcard SD\SDHC Cards - -Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and -most consumer devices use the 4-bit parallel SD protocol. A card that -functions well on A PC or Mac may not work well on the Arduino. - -Most cards have good SPI read performance but cards vary widely in SPI -write performance. Write performance is limited by how efficiently the -card manages internal erase/remapping operations. The Arduino cannot -optimize writes to reduce erase operations because of its limit RAM. - -SanDisk cards generally have good write performance. They seem to have -more internal RAM buffering than other cards and therefore can limit -the number of flash erase operations that the Arduino forces due to its -limited RAM. - -\section Hardware Hardware Configuration - -%SdFat was developed using an - Adafruit Industries - Wave Shield. - -The hardware interface to the SD card should not use a resistor based level -shifter. %SdFat sets the SPI bus frequency to 8 MHz which results in signal -rise times that are too slow for the edge detectors in many newer SD card -controllers when resistor voltage dividers are used. - -The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like the -74HC4050N based circuit shown in the file SdLevel.png. The Adafruit Wave Shield -uses a 74AHC125N. Gravitech sells SD and MicroSD Card Adapters based on the -74LCX245. - -If you are using a resistor based level shifter and are having problems try -setting the SPI bus frequency to 4 MHz. This can be done by using -card.init(SPI_HALF_SPEED) to initialize the SD card. - -\section comment Bugs and Comments - -If you wish to report bugs or have comments, send email to fat16lib@sbcglobal.net. - -\section SdFatClass SdFat Usage - -%SdFat uses a slightly restricted form of short names. -Only printable ASCII characters are supported. No characters with code point -values greater than 127 are allowed. Space is not allowed even though space -was allowed in the API of early versions of DOS. - -Short names are limited to 8 characters followed by an optional period (.) -and extension of up to 3 characters. The characters may be any combination -of letters and digits. The following special characters are also allowed: - -$ % ' - _ @ ~ ` ! ( ) { } ^ # & - -Short names are always converted to upper case and their original case -value is lost. - -\note - The Arduino Print class uses character -at a time writes so it was necessary to use a \link SdFile::sync() sync() \endlink -function to control when data is written to the SD card. - -\par -An application which writes to a file using \link Print::print() print()\endlink, -\link Print::println() println() \endlink -or \link SdFile::write write() \endlink must call \link SdFile::sync() sync() \endlink -at the appropriate time to force data and directory information to be written -to the SD Card. Data and directory information are also written to the SD card -when \link SdFile::close() close() \endlink is called. - -\par -Applications must use care calling \link SdFile::sync() sync() \endlink -since 2048 bytes of I/O is required to update file and -directory information. This includes writing the current data block, reading -the block that contains the directory entry for update, writing the directory -block back and reading back the current data block. - -It is possible to open a file with two or more instances of SdFile. A file may -be corrupted if data is written to the file by more than one instance of SdFile. - -\section HowTo How to format SD Cards as FAT Volumes - -You should use a freshly formatted SD card for best performance. FAT -file systems become slower if many files have been created and deleted. -This is because the directory entry for a deleted file is marked as deleted, -but is not deleted. When a new file is created, these entries must be scanned -before creating the file, a flaw in the FAT design. Also files can become -fragmented which causes reads and writes to be slower. - -A formatter sketch, SdFormatter.pde, is included in the -%SdFat/examples/SdFormatter directory. This sketch attempts to -emulate SD Association's SDFormatter. - -The best way to restore an SD card's format on a PC is to use SDFormatter -which can be downloaded from: - -http://www.sdcard.org/consumers/formatter/ - -SDFormatter aligns flash erase boundaries with file -system structures which reduces write latency and file system overhead. - -SDFormatter does not have an option for FAT type so it may format -small cards as FAT12. - -After the MBR is restored by SDFormatter you may need to reformat small -cards that have been formatted FAT12 to force the volume type to be FAT16. - -If you reformat the SD card with an OS utility, choose a cluster size that -will result in: - -4084 < CountOfClusters && CountOfClusters < 65525 - -The volume will then be FAT16. - -If you are formatting an SD card on OS X or Linux, be sure to use the first -partition. Format this partition with a cluster count in above range for FAT16. -SDHC cards should be formatted FAT32 with a cluster size of 32 KB. - -Microsoft operating systems support removable media formatted with a -Master Boot Record, MBR, or formatted as a super floppy with a FAT Boot Sector -in block zero. - -Microsoft operating systems expect MBR formatted removable media -to have only one partition. The first partition should be used. - -Microsoft operating systems do not support partitioning SD flash cards. -If you erase an SD card with a program like KillDisk, Most versions of -Windows will format the card as a super floppy. - -\section References References - -Adafruit Industries: - -http://www.adafruit.com/ - -http://www.ladyada.net/make/waveshield/ - -The Arduino site: - -http://www.arduino.cc/ - -For more information about FAT file systems see: - -http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx - -For information about using SD cards as SPI devices see: - -http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf - -The ATmega328 datasheet: - -http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf - - - */ diff --git a/libs/SdFatBeta20120108/SdFat/SdVolume.cpp b/libs/SdFatBeta20120108/SdFat/SdVolume.cpp deleted file mode 100755 index f05a05b..0000000 --- a/libs/SdFatBeta20120108/SdFat/SdVolume.cpp +++ /dev/null @@ -1,401 +0,0 @@ -/* Arduino SdFat Library - * Copyright (C) 2009 by William Greiman - * - * This file is part of the Arduino SdFat Library - * - * This Library is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with the Arduino SdFat Library. If not, see - * . - */ -#include -//------------------------------------------------------------------------------ -#if !USE_MULTIPLE_CARDS -// raw block cache -uint32_t SdVolume::cacheBlockNumber_; // current block number -cache_t SdVolume::cacheBuffer_; // 512 byte cache for Sd2Card -Sd2Card* SdVolume::sdCard_; // pointer to SD card object -bool SdVolume::cacheDirty_; // cacheFlush() will write block if true -uint32_t SdVolume::cacheMirrorBlock_; // mirror block for second FAT -#endif // USE_MULTIPLE_CARDS -//------------------------------------------------------------------------------ -// find a contiguous group of clusters -bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) { - // start of group - uint32_t bgnCluster; - // end of group - uint32_t endCluster; - // last cluster of FAT - uint32_t fatEnd = clusterCount_ + 1; - - // flag to save place to start next search - bool setStart; - - // set search start cluster - if (*curCluster) { - // try to make file contiguous - bgnCluster = *curCluster + 1; - - // don't save new start location - setStart = false; - } else { - // start at likely place for free cluster - bgnCluster = allocSearchStart_; - - // save next search start if one cluster - setStart = count == 1; - } - // end of group - endCluster = bgnCluster; - - // search the FAT for free clusters - for (uint32_t n = 0;; n++, endCluster++) { - // can't find space checked all clusters - if (n >= clusterCount_) goto fail; - - // past end - start from beginning of FAT - if (endCluster > fatEnd) { - bgnCluster = endCluster = 2; - } - uint32_t f; - if (!fatGet(endCluster, &f)) goto fail; - - if (f != 0) { - // cluster in use try next cluster as bgnCluster - bgnCluster = endCluster + 1; - } else if ((endCluster - bgnCluster + 1) == count) { - // done - found space - break; - } - } - // mark end of chain - if (!fatPutEOC(endCluster)) goto fail; - - // link clusters - while (endCluster > bgnCluster) { - if (!fatPut(endCluster - 1, endCluster)) goto fail; - endCluster--; - } - if (*curCluster != 0) { - // connect chains - if (!fatPut(*curCluster, bgnCluster)) goto fail; - } - // return first cluster number to caller - *curCluster = bgnCluster; - - // remember possible next free cluster - if (setStart) allocSearchStart_ = bgnCluster + 1; - - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -bool SdVolume::cacheFlush() { - if (cacheDirty_) { - if (!sdCard_->writeBlock(cacheBlockNumber_, cacheBuffer_.data)) { - goto fail; - } - // mirror FAT tables - if (cacheMirrorBlock_) { - if (!sdCard_->writeBlock(cacheMirrorBlock_, cacheBuffer_.data)) { - goto fail; - } - cacheMirrorBlock_ = 0; - } - cacheDirty_ = 0; - } - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -bool SdVolume::cacheRawBlock(uint32_t blockNumber, bool dirty) { - if (cacheBlockNumber_ != blockNumber) { - if (!cacheFlush()) goto fail; - if (!sdCard_->readBlock(blockNumber, cacheBuffer_.data)) goto fail; - cacheBlockNumber_ = blockNumber; - } - if (dirty) cacheDirty_ = true; - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -// return the size in bytes of a cluster chain -bool SdVolume::chainSize(uint32_t cluster, uint32_t* size) { - uint32_t s = 0; - do { - if (!fatGet(cluster, &cluster)) goto fail; - s += 512UL << clusterSizeShift_; - } while (!isEOC(cluster)); - *size = s; - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -// Fetch a FAT entry -bool SdVolume::fatGet(uint32_t cluster, uint32_t* value) { - uint32_t lba; - if (cluster > (clusterCount_ + 1)) goto fail; - if (FAT12_SUPPORT && fatType_ == 12) { - uint16_t index = cluster; - index += index >> 1; - lba = fatStartBlock_ + (index >> 9); - if (!cacheRawBlock(lba, CACHE_FOR_READ)) goto fail; - index &= 0X1FF; - uint16_t tmp = cacheBuffer_.data[index]; - index++; - if (index == 512) { - if (!cacheRawBlock(lba + 1, CACHE_FOR_READ)) goto fail; - index = 0; - } - tmp |= cacheBuffer_.data[index] << 8; - *value = cluster & 1 ? tmp >> 4 : tmp & 0XFFF; - return true; - } - if (fatType_ == 16) { - lba = fatStartBlock_ + (cluster >> 8); - } else if (fatType_ == 32) { - lba = fatStartBlock_ + (cluster >> 7); - } else { - goto fail; - } - if (lba != cacheBlockNumber_) { - if (!cacheRawBlock(lba, CACHE_FOR_READ)) goto fail; - } - if (fatType_ == 16) { - *value = cacheBuffer_.fat16[cluster & 0XFF]; - } else { - *value = cacheBuffer_.fat32[cluster & 0X7F] & FAT32MASK; - } - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -// Store a FAT entry -bool SdVolume::fatPut(uint32_t cluster, uint32_t value) { - uint32_t lba; - // error if reserved cluster - if (cluster < 2) goto fail; - - // error if not in FAT - if (cluster > (clusterCount_ + 1)) goto fail; - - if (FAT12_SUPPORT && fatType_ == 12) { - uint16_t index = cluster; - index += index >> 1; - lba = fatStartBlock_ + (index >> 9); - if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail; - // mirror second FAT - if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_; - index &= 0X1FF; - uint8_t tmp = value; - if (cluster & 1) { - tmp = (cacheBuffer_.data[index] & 0XF) | tmp << 4; - } - cacheBuffer_.data[index] = tmp; - index++; - if (index == 512) { - lba++; - index = 0; - if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail; - // mirror second FAT - if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_; - } - tmp = value >> 4; - if (!(cluster & 1)) { - tmp = ((cacheBuffer_.data[index] & 0XF0)) | tmp >> 4; - } - cacheBuffer_.data[index] = tmp; - return true; - } - if (fatType_ == 16) { - lba = fatStartBlock_ + (cluster >> 8); - } else if (fatType_ == 32) { - lba = fatStartBlock_ + (cluster >> 7); - } else { - goto fail; - } - if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail; - // store entry - if (fatType_ == 16) { - cacheBuffer_.fat16[cluster & 0XFF] = value; - } else { - cacheBuffer_.fat32[cluster & 0X7F] = value; - } - // mirror second FAT - if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_; - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -// free a cluster chain -bool SdVolume::freeChain(uint32_t cluster) { - uint32_t next; - - // clear free cluster location - allocSearchStart_ = 2; - - do { - if (!fatGet(cluster, &next)) goto fail; - - // free cluster - if (!fatPut(cluster, 0)) goto fail; - - cluster = next; - } while (!isEOC(cluster)); - - return true; - - fail: - return false; -} -//------------------------------------------------------------------------------ -/** Volume free space in clusters. - * - * \return Count of free clusters for success or -1 if an error occurs. - */ -int32_t SdVolume::freeClusterCount() { - uint32_t free = 0; - uint16_t n; - uint32_t todo = clusterCount_ + 2; - - if (fatType_ == 16) { - n = 256; - } else if (fatType_ == 32) { - n = 128; - } else { - // put FAT12 here - return -1; - } - - for (uint32_t lba = fatStartBlock_; todo; todo -= n, lba++) { - if (!cacheRawBlock(lba, CACHE_FOR_READ)) return -1; - if (todo < n) n = todo; - if (fatType_ == 16) { - for (uint16_t i = 0; i < n; i++) { - if (cacheBuffer_.fat16[i] == 0) free++; - } - } else { - for (uint16_t i = 0; i < n; i++) { - if (cacheBuffer_.fat32[i] == 0) free++; - } - } - } - return free; -} -//------------------------------------------------------------------------------ -/** Initialize a FAT volume. - * - * \param[in] dev The SD card where the volume is located. - * - * \param[in] part The partition to be used. Legal values for \a part are - * 1-4 to use the corresponding partition on a device formatted with - * a MBR, Master Boot Record, or zero if the device is formatted as - * a super floppy with the FAT boot sector in block zero. - * - * \return The value one, true, is returned for success and - * the value zero, false, is returned for failure. Reasons for - * failure include not finding a valid partition, not finding a valid - * FAT file system in the specified partition or an I/O error. - */ -bool SdVolume::init(Sd2Card* dev, uint8_t part) { - uint32_t totalBlocks; - uint32_t volumeStartBlock = 0; - fat32_boot_t* fbs; - - sdCard_ = dev; - fatType_ = 0; - allocSearchStart_ = 2; - cacheDirty_ = 0; // cacheFlush() will write block if true - cacheMirrorBlock_ = 0; - cacheBlockNumber_ = 0XFFFFFFFF; - - // if part == 0 assume super floppy with FAT boot sector in block zero - // if part > 0 assume mbr volume with partition table - if (part) { - if (part > 4)goto fail; - if (!cacheRawBlock(volumeStartBlock, CACHE_FOR_READ)) goto fail; - part_t* p = &cacheBuffer_.mbr.part[part-1]; - if ((p->boot & 0X7F) !=0 || - p->totalSectors < 100 || - p->firstSector == 0) { - // not a valid partition - goto fail; - } - volumeStartBlock = p->firstSector; - } - if (!cacheRawBlock(volumeStartBlock, CACHE_FOR_READ)) goto fail; - fbs = &cacheBuffer_.fbs32; - if (fbs->bytesPerSector != 512 || - fbs->fatCount == 0 || - fbs->reservedSectorCount == 0 || - fbs->sectorsPerCluster == 0) { - // not valid FAT volume - goto fail; - } - fatCount_ = fbs->fatCount; - blocksPerCluster_ = fbs->sectorsPerCluster; - // determine shift that is same as multiply by blocksPerCluster_ - clusterSizeShift_ = 0; - while (blocksPerCluster_ != (1 << clusterSizeShift_)) { - // error if not power of 2 - if (clusterSizeShift_++ > 7) goto fail; - } - blocksPerFat_ = fbs->sectorsPerFat16 ? - fbs->sectorsPerFat16 : fbs->sectorsPerFat32; - - fatStartBlock_ = volumeStartBlock + fbs->reservedSectorCount; - - // count for FAT16 zero for FAT32 - rootDirEntryCount_ = fbs->rootDirEntryCount; - - // directory start for FAT16 dataStart for FAT32 - rootDirStart_ = fatStartBlock_ + fbs->fatCount * blocksPerFat_; - - // data start for FAT16 and FAT32 - dataStartBlock_ = rootDirStart_ + ((32 * fbs->rootDirEntryCount + 511)/512); - - // total blocks for FAT16 or FAT32 - totalBlocks = fbs->totalSectors16 ? - fbs->totalSectors16 : fbs->totalSectors32; - // total data blocks - clusterCount_ = totalBlocks - (dataStartBlock_ - volumeStartBlock); - - // divide by cluster size to get cluster count - clusterCount_ >>= clusterSizeShift_; - - // FAT type is determined by cluster count - if (clusterCount_ < 4085) { - fatType_ = 12; - if (!FAT12_SUPPORT) goto fail; - } else if (clusterCount_ < 65525) { - fatType_ = 16; - } else { - rootDirStart_ = fbs->fat32RootCluster; - fatType_ = 32; - } - return true; - - fail: - return false; -} diff --git a/libs/SdFatBeta20120108/SdFat/examples/bench/bench.pde b/libs/SdFatBeta20120108/SdFat/examples/bench/bench.pde deleted file mode 100755 index 11ed723..0000000 --- a/libs/SdFatBeta20120108/SdFat/examples/bench/bench.pde +++ /dev/null @@ -1,103 +0,0 @@ -/* - * This sketch is a simple binary write/read benchmark. - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS_PIN; - -#define FILE_SIZE_MB 5 -#define FILE_SIZE (1000000UL*FILE_SIZE_MB) -#define BUF_SIZE 100 - -uint8_t buf[BUF_SIZE]; - -// file system -SdFat sd; - -// test file -SdFile file; - -// Serial output stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) -//------------------------------------------------------------------------------ -void setup() { - uint32_t maxLatency; - uint32_t totalLatency; - Serial.begin(9600); - - // pstr stores strings in flash to save RAM - cout << pstr("Type any character to start\n"); - while (Serial.read() < 0) {} - - cout << pstr("Free RAM: ") << FreeRam() << endl; - - // initialize the SD card at SPI_FULL_SPEED for best performance. - // try SPI_HALF_SPEED if bus errors occur. - if (!sd.init(SPI_FULL_SPEED, chipSelect)) sd.initErrorHalt(); - - cout << pstr("Type is FAT") << int(sd.vol()->fatType()) << endl; - - // open or create file - truncate existing file. - if (!file.open("BENCH.DAT", O_CREAT | O_TRUNC | O_RDWR)) { - error("open failed"); - } - - // fill buf with known data - for (uint16_t i = 0; i < (BUF_SIZE-2); i++) { - buf[i] = 'A' + (i % 26); - } - buf[BUF_SIZE-2] = '\r'; - buf[BUF_SIZE-1] = '\n'; - - cout << pstr("File size ") << FILE_SIZE_MB << pstr("MB\n"); - - cout << pstr("Starting write test. Please wait up to a minute\n"); - - // do write test - uint32_t n = FILE_SIZE/sizeof(buf); - maxLatency = 0; - totalLatency = 0; - uint32_t t = millis(); - for (uint32_t i = 0; i < n; i++) { - uint32_t m = micros(); - if (file.write(buf, sizeof(buf)) != sizeof(buf)) { - error("write failed"); - } - m = micros() - m; - if (maxLatency < m) maxLatency = m; - totalLatency += m; - } - file.sync(); - t = millis() - t; - double s = file.fileSize(); - cout << pstr("Write ") << s/t << pstr(" KB/sec\n"); - cout << pstr("Maximum latency: ") << maxLatency; - cout << pstr(" usec, Avg Latency: ") << totalLatency/n << pstr(" usec\n\n"); - cout << pstr("Starting read test. Please wait up to a minute\n"); - // do read test - file.rewind(); - maxLatency = 0; - totalLatency = 0; - t = millis(); - for (uint32_t i = 0; i < n; i++) { - uint32_t m = micros(); - if (file.read(buf, sizeof(buf)) != sizeof(buf)) { - error("read failed"); - } - m = micros() - m; - if (maxLatency < m) maxLatency = m; - totalLatency += m; - } - t = millis() - t; - cout << pstr("Read ") << s/t << pstr(" KB/sec\n"); - cout << pstr("Maximum latency: ") << maxLatency; - cout << pstr(" usec, Avg Latency: ") << totalLatency/n << pstr(" usec\n\n"); - cout << pstr("Done\n"); -} -//------------------------------------------------------------------------------ -void loop() { } diff --git a/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempSdfat.pde b/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempSdfat.pde deleted file mode 100755 index 8666833..0000000 --- a/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempSdfat.pde +++ /dev/null @@ -1,224 +0,0 @@ -#include -SdFat SD; -#include -#include "RTClib.h" - -// A simple data logger for the Arduino analog pins - -// how many milliseconds between grabbing data and logging it. 1000 ms is once a second -#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data) - -// how many milliseconds before writing the logged data permanently to disk -// set it to the LOG_INTERVAL to write each time (safest) -// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to -// the last 10 reads if power is lost but it uses less power and is much faster! -#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card -uint32_t syncTime = 0; // time of last sync() - -#define ECHO_TO_SERIAL 1 // echo data to serial port -#define WAIT_TO_START 0 // Wait for serial input in setup() - -// the digital pins that connect to the LEDs -#define redLEDpin 2 -#define greenLEDpin 3 - -// The analog pins that connect to the sensors -#define photocellPin 0 // analog 0 -#define tempPin 1 // analog 1 -#define BANDGAPREF 14 // special indicator that we want to measure the bandgap - -#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter! -#define bandgap_voltage 1.1 // this is not super guaranteed but its not -too- off - -RTC_DS1307 RTC; // define the Real Time Clock object - -// for the data logging shield, we use digital pin 10 for the SD cs line -const int chipSelect = 10; - -// the logging file -SdFile logfile; - -void error(char *str) -{ - Serial.print("error: "); - Serial.println(str); - - // red LED indicates error - digitalWrite(redLEDpin, HIGH); - - while(1); -} - -void setup(void) -{ - Serial.begin(9600); - Serial.println(); - - // use debugging LEDs - pinMode(redLEDpin, OUTPUT); - pinMode(greenLEDpin, OUTPUT); - -#if WAIT_TO_START - Serial.println("Type any character to start"); - while (!Serial.available()); -#endif //WAIT_TO_START - - // initialize the SD card - Serial.print("Initializing SD card..."); - // make sure that the default chip select pin is set to - // output, even if you don't use it: - pinMode(10, OUTPUT); - - // see if the card is present and can be initialized: - if (!SD.init(SPI_HALF_SPEED, chipSelect)) { - error("Card failed, or not present"); - } - Serial.println("card initialized."); - - // create a new file - char filename[] = "LOGGER00.CSV"; - for (uint8_t i = 0; i < 100; i++) { - filename[6] = i/10 + '0'; - filename[7] = i%10 + '0'; - if (! SD.exists(filename)) { - // only open a new file if it doesn't exist - logfile.open(filename, O_WRITE | O_CREAT); - break; // leave the loop! - } - } - - if (! logfile.isOpen()) { - error("couldnt create file"); - } - - Serial.print("Logging to: "); - Serial.println(filename); - - // connect to RTC - Wire.begin(); - if (!RTC.begin()) { - logfile.println("RTC failed"); -#if ECHO_TO_SERIAL - Serial.println("RTC failed"); -#endif //ECHO_TO_SERIAL - } - - - logfile.println("millis,stamp,datetime,light,temp,vcc"); -#if ECHO_TO_SERIAL - Serial.println("millis,stamp,datetime,light,temp,vcc"); -#endif //ECHO_TO_SERIAL - - // If you want to set the aref to something other than 5v - analogReference(EXTERNAL); -} - -void loop(void) -{ - DateTime now; - - // delay for the amount of time we want between readings - delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL)); - - digitalWrite(greenLEDpin, HIGH); - - // log milliseconds since starting - uint32_t m = millis(); - logfile.print(m); // milliseconds since start - logfile.print(", "); -#if ECHO_TO_SERIAL - Serial.print(m); // milliseconds since start - Serial.print(", "); -#endif - - // fetch the time - now = RTC.now(); - // log time - logfile.print(now.unixtime()); // seconds since 1/1/1970 - logfile.print(", "); - logfile.write('"'); - logfile.print(now.year(), DEC); - logfile.write('/'); - logfile.print(now.month(), DEC); - logfile.write('/'); - logfile.print(now.day(), DEC); - logfile.write(' '); - logfile.print(now.hour(), DEC); - logfile.write(':'); - logfile.print(now.minute(), DEC); - logfile.write(':'); - logfile.print(now.second(), DEC); - logfile.write('"'); -#if ECHO_TO_SERIAL - Serial.print(now.unixtime()); // seconds since 1/1/1970 - Serial.print(", "); - Serial.write('"'); - Serial.print(now.year(), DEC); - Serial.write('/'); - Serial.print(now.month(), DEC); - Serial.write('/'); - Serial.print(now.day(), DEC); - Serial.write(' '); - Serial.print(now.hour(), DEC); - Serial.write(':'); - Serial.print(now.minute(), DEC); - Serial.write(':'); - Serial.print(now.second(), DEC); - Serial.write('"'); -#endif //ECHO_TO_SERIAL - - analogRead(photocellPin); - delay(10); - int photocellReading = analogRead(photocellPin); - - analogRead(tempPin); - delay(10); - int tempReading = analogRead(tempPin); - - // converting that reading to voltage, for 3.3v arduino use 3.3, for 5.0, use 5.0 - float voltage = tempReading * aref_voltage / 1024; - float temperatureC = (voltage - 0.5) * 100 ; - float temperatureF = (temperatureC * 9 / 5) + 32; - - logfile.print(", "); - logfile.print(photocellReading); - logfile.print(", "); - logfile.print(temperatureF); -#if ECHO_TO_SERIAL - Serial.print(", "); - Serial.print(photocellReading); - Serial.print(", "); - Serial.print(temperatureF); -#endif //ECHO_TO_SERIAL - - // Log the estimated 'VCC' voltage by measuring the internal 1.1v ref - analogRead(BANDGAPREF); - delay(10); - int refReading = analogRead(BANDGAPREF); - float supplyvoltage = (bandgap_voltage * 1024) / refReading; - - logfile.print(", "); - logfile.print(supplyvoltage); -#if ECHO_TO_SERIAL - Serial.print(", "); - Serial.print(supplyvoltage); -#endif // ECHO_TO_SERIAL - - logfile.println(); -#if ECHO_TO_SERIAL - Serial.println(); -#endif // ECHO_TO_SERIAL - - digitalWrite(greenLEDpin, LOW); - - // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card - // which uses a bunch of power and takes time - if ((millis() - syncTime) < SYNC_INTERVAL) return; - syncTime = millis(); - - // blink LED to show we are syncing data to the card & updating FAT! - digitalWrite(redLEDpin, HIGH); - logfile.sync(); - digitalWrite(redLEDpin, LOW); - -} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempStreams.pde b/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempStreams.pde deleted file mode 100755 index 1b389f5..0000000 --- a/libs/SdFatBeta20120108/extra/FridgeLogger/LightTempStreams.pde +++ /dev/null @@ -1,177 +0,0 @@ -#include -#include -#include "RTClib.h" - -// A simple data logger for the Arduino analog pins - -// how many milliseconds between grabbing data and logging it. 1000 ms is once a second -#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data) - -// how many milliseconds before writing the logged data permanently to disk -// set it to the LOG_INTERVAL to write each time (safest) -// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to -// the last 10 reads if power is lost but it uses less power and is much faster! -#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card -uint32_t syncTime = 0; // time of last sync() - -#define ECHO_TO_SERIAL 1 // echo data to serial port -#define WAIT_TO_START 0 // Wait for serial input in setup() - -// the digital pins that connect to the LEDs -#define redLEDpin 2 -#define greenLEDpin 3 - -// The analog pins that connect to the sensors -#define photocellPin 0 // analog 0 -#define tempPin 1 // analog 1 -#define BANDGAPREF 14 // special indicator that we want to measure the bandgap -#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter! -#define bandgap_voltage 1.1 // this is not super guaranteed but its not -too- off -//------------------------------------------------------------------------------ -// for the data logging shield, we use digital pin 10 for the sd cs line -const int chipSelect = 10; - -// Serial Stream -ArduinoOutStream cout(Serial); - -// file system -SdFat sd; - -// the logging file -ofstream logfile; - -RTC_DS1307 RTC; // define the Real Time Clock object -//------------------------------------------------------------------------------ -// operator that formats date/time -ostream& operator << (ostream& os, DateTime& dt) { - os << dt.year() << '/' << int(dt.month()) << '/' << int(dt.day()) << ','; - os << int(dt.hour()) << ':' << setfill('0') << setw(2) << int(dt.minute()); - os << ':' << setw(2) << int(dt.second()) << setfill(' '); - return os; -} -//------------------------------------------------------------------------------ -// call back for file timestamps -void dateTime(uint16_t* date, uint16_t* time) { - DateTime now = RTC.now(); - - // return date using FAT_DATE macro to format fields - *date = FAT_DATE(now.year(), now.month(), now.day()); - - // return time using FAT_TIME macro to format fields - *time = FAT_TIME(now.hour(), now.minute(), now.second()); -} -//------------------------------------------------------------------------------ -void error(char *str) { - // red LED indicates error - digitalWrite(redLEDpin, HIGH); - sd.errorHalt(str); -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - - // use debugging LEDs - pinMode(redLEDpin, OUTPUT); - pinMode(greenLEDpin, OUTPUT); - -#if WAIT_TO_START - cout << "Type any character to start" << endl; - while (!Serial.available()); -#endif //WAIT_TO_START - - // connect to RTC - Wire.begin(); - if (!RTC.begin()) error("RTC failed"); - - // set date time callback function - SdFile::dateTimeCallback(dateTime); - - // see if the card is present and can be initialized: - if (!sd.init(SPI_HALF_SPEED, chipSelect)) sd.initErrorHalt(); - - // create a new file - char filename[] = "LOGGER00.CSV"; - for (uint8_t i = 0; i < 100; i++) { - filename[6] = i/10 + '0'; - filename[7] = i%10 + '0'; - if (!sd.exists(filename)) { - // only open a new file if it doesn't exist - logfile.open(filename); - break; // leave the loop! - } - } - - if (!logfile.is_open()) error("couldnt create file"); - cout <<"Logging to: " << filename << endl; - - // file header - logfile << "millis,stamp,date,time,light,temp,vcc" << endl; -#if ECHO_TO_SERIAL - cout << "millis,stamp,date,time,light,temp,vcc" << endl; -#endif //ECHO_TO_SERIAL - - // If you want to set the aref to something other than 5v - analogReference(EXTERNAL); -} -//------------------------------------------------------------------------------ -void loop(void) { - // milliseconds since starting - uint32_t m = millis(); - - // wait for time to be a multiple of logging interval - do { - m = millis(); - } while (m % LOG_INTERVAL); - - digitalWrite(greenLEDpin, HIGH); - - // fetch the time - DateTime now = RTC.now(); - - // read the photo cell - analogRead(photocellPin); - delay(10); - int photocellReading = analogRead(photocellPin); - - // read the temperature - analogRead(tempPin); - delay(10); - int tempReading = analogRead(tempPin); - - // converting that reading to voltage, for 3.3v arduino use 3.3, for 5.0, use 5.0 - float voltage = tempReading * aref_voltage / 1024; - float temperatureC = (voltage - 0.5) * 100 ; - float temperatureF = (temperatureC * 9 / 5) + 32; - - // Get the estimated 'VCC' voltage by measuring the internal 1.1v ref - analogRead(BANDGAPREF); - delay(10); - int refReading = analogRead(BANDGAPREF); - float supplyvoltage = (bandgap_voltage * 1024) / refReading; - - // log the data - logfile << m << ',' << now.unixtime() << ',' << now; - logfile << ',' << photocellReading << ',' << temperatureF; - logfile << ',' << supplyvoltage << endl; -#if ECHO_TO_SERIAL - cout << m << ',' << now.unixtime() << ',' << now; - cout << ',' << photocellReading << ',' << temperatureF; - cout << ',' << supplyvoltage << endl; -#endif // ECHO_TO_SERIAL - - digitalWrite(greenLEDpin, LOW); - - // Now we write data to disk! Don't sync too often - // requires 2048 bytes of I/O to sd card - // which uses a bunch of power and takes time - if ((millis() - syncTime) >= SYNC_INTERVAL) { - syncTime = millis(); - - // blink LED to show we are syncing data to the card & updating FAT! - digitalWrite(redLEDpin, HIGH); - logfile.flush(); - digitalWrite(redLEDpin, LOW); - } - // check for errors - if (!logfile.good()) error("write error"); -} diff --git a/libs/SdFatBeta20120108/extra/FridgeLogger/diff.txt b/libs/SdFatBeta20120108/extra/FridgeLogger/diff.txt deleted file mode 100755 index da0b485..0000000 --- a/libs/SdFatBeta20120108/extra/FridgeLogger/diff.txt +++ /dev/null @@ -1,25 +0,0 @@ -1c1,2 -< #include ---- -> #include -> SdFat SD; -38c39 -< File logfile; ---- -> SdFile logfile; -72c73 -< if (!SD.begin(chipSelect)) { ---- -> if (!SD.init(SPI_HALF_SPEED, chipSelect)) { -84c85 -< logfile = SD.open(filename, FILE_WRITE); ---- -> logfile.open(filename, O_WRITE | O_CREAT); -89c90 -< if (! logfile) { ---- -> if (! logfile.isOpen()) { -220c221 -< logfile.flush(); ---- -> logfile.sync(); diff --git a/libs/SdFatBeta20120108/extra/FridgeLogger/lighttemplogger.pde b/libs/SdFatBeta20120108/extra/FridgeLogger/lighttemplogger.pde deleted file mode 100755 index 9f09937..0000000 --- a/libs/SdFatBeta20120108/extra/FridgeLogger/lighttemplogger.pde +++ /dev/null @@ -1,223 +0,0 @@ -#include -#include -#include "RTClib.h" - -// A simple data logger for the Arduino analog pins - -// how many milliseconds between grabbing data and logging it. 1000 ms is once a second -#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data) - -// how many milliseconds before writing the logged data permanently to disk -// set it to the LOG_INTERVAL to write each time (safest) -// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to -// the last 10 reads if power is lost but it uses less power and is much faster! -#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card -uint32_t syncTime = 0; // time of last sync() - -#define ECHO_TO_SERIAL 1 // echo data to serial port -#define WAIT_TO_START 0 // Wait for serial input in setup() - -// the digital pins that connect to the LEDs -#define redLEDpin 2 -#define greenLEDpin 3 - -// The analog pins that connect to the sensors -#define photocellPin 0 // analog 0 -#define tempPin 1 // analog 1 -#define BANDGAPREF 14 // special indicator that we want to measure the bandgap - -#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter! -#define bandgap_voltage 1.1 // this is not super guaranteed but its not -too- off - -RTC_DS1307 RTC; // define the Real Time Clock object - -// for the data logging shield, we use digital pin 10 for the SD cs line -const int chipSelect = 10; - -// the logging file -File logfile; - -void error(char *str) -{ - Serial.print("error: "); - Serial.println(str); - - // red LED indicates error - digitalWrite(redLEDpin, HIGH); - - while(1); -} - -void setup(void) -{ - Serial.begin(9600); - Serial.println(); - - // use debugging LEDs - pinMode(redLEDpin, OUTPUT); - pinMode(greenLEDpin, OUTPUT); - -#if WAIT_TO_START - Serial.println("Type any character to start"); - while (!Serial.available()); -#endif //WAIT_TO_START - - // initialize the SD card - Serial.print("Initializing SD card..."); - // make sure that the default chip select pin is set to - // output, even if you don't use it: - pinMode(10, OUTPUT); - - // see if the card is present and can be initialized: - if (!SD.begin(chipSelect)) { - error("Card failed, or not present"); - } - Serial.println("card initialized."); - - // create a new file - char filename[] = "LOGGER00.CSV"; - for (uint8_t i = 0; i < 100; i++) { - filename[6] = i/10 + '0'; - filename[7] = i%10 + '0'; - if (! SD.exists(filename)) { - // only open a new file if it doesn't exist - logfile = SD.open(filename, FILE_WRITE); - break; // leave the loop! - } - } - - if (! logfile) { - error("couldnt create file"); - } - - Serial.print("Logging to: "); - Serial.println(filename); - - // connect to RTC - Wire.begin(); - if (!RTC.begin()) { - logfile.println("RTC failed"); -#if ECHO_TO_SERIAL - Serial.println("RTC failed"); -#endif //ECHO_TO_SERIAL - } - - - logfile.println("millis,stamp,datetime,light,temp,vcc"); -#if ECHO_TO_SERIAL - Serial.println("millis,stamp,datetime,light,temp,vcc"); -#endif //ECHO_TO_SERIAL - - // If you want to set the aref to something other than 5v - analogReference(EXTERNAL); -} - -void loop(void) -{ - DateTime now; - - // delay for the amount of time we want between readings - delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL)); - - digitalWrite(greenLEDpin, HIGH); - - // log milliseconds since starting - uint32_t m = millis(); - logfile.print(m); // milliseconds since start - logfile.print(", "); -#if ECHO_TO_SERIAL - Serial.print(m); // milliseconds since start - Serial.print(", "); -#endif - - // fetch the time - now = RTC.now(); - // log time - logfile.print(now.unixtime()); // seconds since 1/1/1970 - logfile.print(", "); - logfile.write('"'); - logfile.print(now.year(), DEC); - logfile.write('/'); - logfile.print(now.month(), DEC); - logfile.write('/'); - logfile.print(now.day(), DEC); - logfile.write(' '); - logfile.print(now.hour(), DEC); - logfile.write(':'); - logfile.print(now.minute(), DEC); - logfile.write(':'); - logfile.print(now.second(), DEC); - logfile.write('"'); -#if ECHO_TO_SERIAL - Serial.print(now.unixtime()); // seconds since 1/1/1970 - Serial.print(", "); - Serial.write('"'); - Serial.print(now.year(), DEC); - Serial.write('/'); - Serial.print(now.month(), DEC); - Serial.write('/'); - Serial.print(now.day(), DEC); - Serial.write(' '); - Serial.print(now.hour(), DEC); - Serial.write(':'); - Serial.print(now.minute(), DEC); - Serial.write(':'); - Serial.print(now.second(), DEC); - Serial.write('"'); -#endif //ECHO_TO_SERIAL - - analogRead(photocellPin); - delay(10); - int photocellReading = analogRead(photocellPin); - - analogRead(tempPin); - delay(10); - int tempReading = analogRead(tempPin); - - // converting that reading to voltage, for 3.3v arduino use 3.3, for 5.0, use 5.0 - float voltage = tempReading * aref_voltage / 1024; - float temperatureC = (voltage - 0.5) * 100 ; - float temperatureF = (temperatureC * 9 / 5) + 32; - - logfile.print(", "); - logfile.print(photocellReading); - logfile.print(", "); - logfile.print(temperatureF); -#if ECHO_TO_SERIAL - Serial.print(", "); - Serial.print(photocellReading); - Serial.print(", "); - Serial.print(temperatureF); -#endif //ECHO_TO_SERIAL - - // Log the estimated 'VCC' voltage by measuring the internal 1.1v ref - analogRead(BANDGAPREF); - delay(10); - int refReading = analogRead(BANDGAPREF); - float supplyvoltage = (bandgap_voltage * 1024) / refReading; - - logfile.print(", "); - logfile.print(supplyvoltage); -#if ECHO_TO_SERIAL - Serial.print(", "); - Serial.print(supplyvoltage); -#endif // ECHO_TO_SERIAL - - logfile.println(); -#if ECHO_TO_SERIAL - Serial.println(); -#endif // ECHO_TO_SERIAL - - digitalWrite(greenLEDpin, LOW); - - // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card - // which uses a bunch of power and takes time - if ((millis() - syncTime) < SYNC_INTERVAL) return; - syncTime = millis(); - - // blink LED to show we are syncing data to the card & updating FAT! - digitalWrite(redLEDpin, HIGH); - logfile.flush(); - digitalWrite(redLEDpin, LOW); - -} \ No newline at end of file diff --git a/libs/SdFatBeta20120108/extra/FridgeLogger/readme.txt b/libs/SdFatBeta20120108/extra/FridgeLogger/readme.txt deleted file mode 100755 index 7662ce7..0000000 --- a/libs/SdFatBeta20120108/extra/FridgeLogger/readme.txt +++ /dev/null @@ -1,15 +0,0 @@ -These three files are versions of the Adafruit Fridge Logger. - -See: - -http://forums.adafruit.com/viewtopic.php?f=31&t=21844 - -http://www.ladyada.net/make/logshield/lighttemp.html - - -lighttemplogger.pde - version for the Arduino SD.h library - -LightTempSdfat.pde - minimal changes to port to SdFat - -LightTempStreams.pde - version using I/O streams - diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatAnalogLogger/SdFatAnalogLogger.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatAnalogLogger/SdFatAnalogLogger.pde deleted file mode 100755 index 9bad4e9..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatAnalogLogger/SdFatAnalogLogger.pde +++ /dev/null @@ -1,109 +0,0 @@ -// A simple data logger for the Arduino analog pins -#define LOG_INTERVAL 1000 // mills between entries -#define SENSOR_COUNT 3 // number of analog pins to log -#define ECHO_TO_SERIAL 1 // echo data to serial port -#define WAIT_TO_START 1 // Wait for serial input in setup() -#define SYNC_INTERVAL 1000 // mills between calls to sync() -uint32_t syncTime = 0; // time of last sync() - -#include - -// file system -SdFat sd; - -// log file -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - Serial.println(); - -#if WAIT_TO_START - Serial.println("Type any character to start"); - while (!Serial.available()); -#endif //WAIT_TO_START - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - // create a new file - char name[] = "LOGGER00.CSV"; - for (uint8_t i = 0; i < 100; i++) { - name[6] = i/10 + '0'; - name[7] = i%10 + '0'; - if (file.open(name, O_CREAT | O_EXCL | O_WRITE)) break; - } - if (!file.isOpen()) error ("file.create"); - Serial.print("Logging to: "); - Serial.println(name); - - // write header - file.writeError = 0; - file.print("millis"); -#if ECHO_TO_SERIAL - Serial.print("millis"); -#endif //ECHO_TO_SERIAL - -#if SENSOR_COUNT > 6 -#error SENSOR_COUNT too large -#endif //SENSOR_COUNT - - for (uint8_t i = 0; i < SENSOR_COUNT; i++) { - file.print(",sens");file.print(i, DEC); -#if ECHO_TO_SERIAL - Serial.print(",sens");Serial.print(i, DEC); -#endif //ECHO_TO_SERIAL - } - file.println(); -#if ECHO_TO_SERIAL - Serial.println(); -#endif //ECHO_TO_SERIAL - - if (file.writeError || !file.sync()) { - error("write header failed"); - } -} -//------------------------------------------------------------------------------ -void loop(void) { - uint32_t m; - - // wait for time to be a multiple of interval - do { - m = millis(); - } while (m % LOG_INTERVAL); - - // log time - file.print(m); -#if ECHO_TO_SERIAL - Serial.print(m); -#endif //ECHO_TO_SERIAL - - // add sensor data - for (uint8_t ia = 0; ia < SENSOR_COUNT; ia++) { - uint16_t data = analogRead(ia); - file.write(','); - file.print(data); -#if ECHO_TO_SERIAL - Serial.write(','); - Serial.print(data); -#endif //ECHO_TO_SERIAL - } - file.println(); -#if ECHO_TO_SERIAL - Serial.println(); -#endif //ECHO_TO_SERIAL - - if (file.writeError) error("write data failed"); - - //don't sync too often - requires 2048 bytes of I/O to SD card - if ((millis() - syncTime) >= SYNC_INTERVAL) { - syncTime = millis(); - if (!file.sync()) error("sync failed"); - } - // don't log two samples in same millisecond - if (m == millis()) delay(1); -} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatAppend/SdFatAppend.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatAppend/SdFatAppend.pde deleted file mode 100755 index 47ed45c..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatAppend/SdFatAppend.pde +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Append Example - * - * This sketch shows how to use open for append and the Arduino Print class - * with SdFat. - */ -#include -#include // use functions to print strings from flash memory - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - char name[] = "APPEND.TXT"; - PgmPrint("Appending to: "); - Serial.println(name); - - for (uint8_t i = 0; i < 100; i++) { - // O_CREAT - create the file if it does not exist - // O_APPEND - seek to the end of the file prior to each write - // O_WRITE - open for write - if (!file.open(name, O_CREAT | O_APPEND | O_WRITE)) { - error("open failed"); - } - // print 100 lines to file - for (uint8_t j = 0; j < 100; j++) { - file.print("line "); - file.print(j, DEC); - file.print(" of pass "); - file.print(i, DEC); - file.print(" millis = "); - file.println(millis()); - } - if (file.writeError) error("write failed"); - if (!file.close()) error("close failed"); - if (i > 0 && i%25 == 0) Serial.println(); - Serial.write('.'); - } - Serial.println(); - Serial.println("Done"); -} -void loop(void){} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatBench/SdFatBench.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatBench/SdFatBench.pde deleted file mode 100755 index 2b03ed8..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatBench/SdFatBench.pde +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This sketch is a simple write/read benchmark. - */ -#include -#include - -#define FILE_SIZE_MB 5 -#define FILE_SIZE (1000000UL*FILE_SIZE_MB) -#define BUF_SIZE 100 - -uint8_t buf[BUF_SIZE]; - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - PgmPrint("Free RAM: "); - Serial.println(FreeRam()); - - // initialize the SD card at SPI_FULL_SPEED for best performance. - // try SPI_HALF_SPEED if bus errors occur. - if (!sd.init(SPI_FULL_SPEED)) sd.initErrorHalt(); - - PgmPrint("Type is FAT"); - Serial.println(sd.vol()->fatType(), DEC); - - // open or create file - truncate existing file. - if (!file.open("BENCH.DAT", O_CREAT | O_TRUNC | O_RDWR)) { - error("open failed"); - } - - // fill buf with known data - for (uint16_t i = 0; i < (BUF_SIZE-2); i++) { - buf[i] = 'A' + (i % 26); - } - buf[BUF_SIZE-2] = '\r'; - buf[BUF_SIZE-1] = '\n'; - - PgmPrint("File size "); - Serial.print(FILE_SIZE_MB); - PgmPrintln(" MB"); - PgmPrintln("Starting write test. Please wait up to a minute"); - - // do write test - uint32_t n = FILE_SIZE/sizeof(buf); - uint32_t t = millis(); - for (uint32_t i = 0; i < n; i++) { - if (file.write(buf, sizeof(buf)) != sizeof(buf)) { - error("write failed"); - } - } - t = millis() - t; - file.sync(); - double r = (double)file.fileSize()/t; - PgmPrint("Write "); - Serial.print(r); - PgmPrintln(" KB/sec"); - Serial.println(); - PgmPrintln("Starting read test. Please wait up to a minute"); - - // do read test - file.rewind(); - t = millis(); - for (uint32_t i = 0; i < n; i++) { - if (file.read(buf, sizeof(buf)) != sizeof(buf)) { - error("read failed"); - } - } - t = millis() - t; - r = (double)file.fileSize()/t; - PgmPrint("Read "); - Serial.print(r); - PgmPrintln(" KB/sec"); - PgmPrintln("Done"); -} - -void loop() { } diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatCopy/SdFatCopy.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatCopy/SdFatCopy.pde deleted file mode 100755 index 8b55521..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatCopy/SdFatCopy.pde +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copy Example - only runs on chips with 2K or more RAM - * - * This sketch copies the file APPEND.TXT, created by the - * SdFatAppend.pde example, to the file ACOPY.TXT. - */ -#include -#include // use functions to print strings from flash memory - -// file system -SdFat sd; - -SdFile from; // read file -SdFile copy; // write file - -// large buffer to test for bugs. 512 bytes runs much faster. -char buf[600]; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - PgmPrint("FreeRam: "); - Serial.println(FreeRam()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - strcpy_P(buf, PSTR("APPEND.TXT")); - // open for read - if (!from.open(buf, O_READ)) { - PgmPrint("Can't open "); - Serial.println(buf); - PgmPrintln("Run the append example to create the file."); - error("from.open failed"); - } - strcpy_P(buf, PSTR("ACOPY.TXT")); - // create if needed, truncate to zero length, open for write - if (!copy.open(buf, O_CREAT | O_TRUNC | O_WRITE)) { - error("copy.open failed"); - } - // count for printing periods - uint16_t p = 0; - int16_t n; - while ((n = from.read(buf, sizeof(buf))) > 0) { - if (copy.write(buf, n) != n) error("write failed"); - // print progress periods - if (!(p++ % 25)) Serial.write('.'); - if (!(p % 500)) Serial.println(); - } - Serial.println(); - if (n != 0) error ("read"); - // force write of directory entry and last data - if (!copy.close()) error("copy.close failed"); - PgmPrintln("Copy done."); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatGPSLogger_v3/SdFatGPSLogger_v3.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatGPSLogger_v3/SdFatGPSLogger_v3.pde deleted file mode 100755 index b4a79a4..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatGPSLogger_v3/SdFatGPSLogger_v3.pde +++ /dev/null @@ -1,326 +0,0 @@ -// Ladyada's logger modified by Bill Greiman to use the SdFat library - -// this is a generic logger that does checksum testing so the data written should be always good -// Assumes a sirf III chipset logger attached to pin 0 and 1 - -#include -#include -#include - -// macros to use PSTR -#define putstring(str) SerialPrint_P(PSTR(str)) -#define putstring_nl(str) SerialPrintln_P(PSTR(str)) - -// power saving modes -#define SLEEPDELAY 0 -#define TURNOFFGPS 0 -#define LOG_RMC_FIXONLY 1 - -SdFat sd; - -SdFile f; - -#define led1Pin 4 -#define led2Pin 3 -#define powerPin 2 - -#define BUFFSIZE 75 -char buffer[BUFFSIZE]; -uint8_t bufferidx = 0; -uint8_t fix = 0; // current fix data -uint8_t i; - -/* EXAMPLE - -$PSRF103,,,,*CKSUM - - 00=GGA,01=GLL,02=GSA,03=GSV,04=RMC,05=VTG - 00=SetRate,01=Query - Output every seconds, off=00,max=255 - 00=disable Checksum,01=Enable checksum for specified message -Note: checksum is required - -Example 1: Query the GGA message with checksum enabled -$PSRF103,00,01,00,01*25 - -Example 2: Enable VTG message for a 1Hz constant output with checksum enabled -$PSRF103,05,00,01,01*20 - -Example 3: Disable VTG message -$PSRF103,05,00,00,01*21 - -*/ - -#define SERIAL_SET "$PSRF100,01,4800,08,01,00*0E\r\n" - -// GGA-Global Positioning System Fixed Data, message 103,00 -#define LOG_GGA 0 -#define GGA_ON "$PSRF103,00,00,01,01*25\r\n" -#define GGA_OFF "$PSRF103,00,00,00,01*24\r\n" - -// GLL-Geographic Position-Latitude/Longitude, message 103,01 -#define LOG_GLL 0 -#define GLL_ON "$PSRF103,01,00,01,01*26\r\n" -#define GLL_OFF "$PSRF103,01,00,00,01*27\r\n" - -// GSA-GNSS DOP and Active Satellites, message 103,02 -#define LOG_GSA 0 -#define GSA_ON "$PSRF103,02,00,01,01*27\r\n" -#define GSA_OFF "$PSRF103,02,00,00,01*26\r\n" - -// GSV-GNSS Satellites in View, message 103,03 -#define LOG_GSV 0 -#define GSV_ON "$PSRF103,03,00,01,01*26\r\n" -#define GSV_OFF "$PSRF103,03,00,00,01*27\r\n" - -// RMC-Recommended Minimum Specific GNSS Data, message 103,04 -#define LOG_RMC 1 -#define RMC_ON "$PSRF103,04,00,01,01*21\r\n" -#define RMC_OFF "$PSRF103,04,00,00,01*20\r\n" - -// VTG-Course Over Ground and Ground Speed, message 103,05 -#define LOG_VTG 0 -#define VTG_ON "$PSRF103,05,00,01,01*20\r\n" -#define VTG_OFF "$PSRF103,05,00,00,01*21\r\n" - -// Switch Development Data Messages On/Off, message 105 -#define LOG_DDM 1 -#define DDM_ON "$PSRF105,01*3E\r\n" -#define DDM_OFF "$PSRF105,00*3F\r\n" - -#define USE_WAAS 0 // useful in US, but slower fix -#define WAAS_ON "$PSRF151,01*3F\r\n" // the command for turning on WAAS -#define WAAS_OFF "$PSRF151,00*3E\r\n" // the command for turning off WAAS - -// read a Hex value and return the decimal equivalent -uint8_t parseHex(char c) { - if (c < '0') - return 0; - if (c <= '9') - return c - '0'; - if (c < 'A') - return 0; - if (c <= 'F') - return (c - 'A')+10; -} - -// blink out an error code -void error(uint8_t errno) { - while(1) { - for (i=0; i -#include -#include - -#define isdigit(x) ( x >= '0' && x <= '9') - -//extern uint16_t _end; - -SdFat sd; - -SdFile f; - -#define led1Pin 4 // LED1 connected to digital pin 4 -#define led2Pin 3 // LED2 connected to digital pin 3 -#define powerpin 2 // GPS power control - -// set the RX_BUFFER_SIZE to 32! -#define BUFFSIZE 73 // we buffer one NMEA sentence at a time, 83 bytes is longer than the max length -char buffer[BUFFSIZE]; // this is the double buffer -char buffer2[12]; - -uint8_t bufferidx = 0; -uint32_t tmp; -#define LOG_RMC 1 // essential location data -#define RMC_ON "$PSRF103,4,0,1,1*21\r\n" // the command we send to turn RMC on (1 hz rate) -#define RMC_OFF "$PSRF103,4,0,0,1*20\r\n" // the command we send to turn RMC off - -#define LOG_GGA 0 // contains fix, hdop & vdop data -#define GGA_ON "$PSRF103,0,0,1,1*25\r\n" // the command we send to turn GGA on (1 hz rate) -#define GGA_OFF "$PSRF103,0,0,0,1*24\r\n" // the command we send to turn GGA off - -#define LOG_GSA 0 // satellite data -#define GSA_ON "$PSRF103,2,0,1,1*27\r\n" // the command we send to turn GSA on (1 hz rate) -#define GSA_OFF "$PSRF103,2,0,0,1*26\r\n" // the command we send to turn GSA off - -#define LOG_GSV 0 // detailed satellite data -#define GSV_ON "$PSRF103,3,0,1,1*26\r\n" // the command we send to turn GSV on (1 hz rate) -#define GSV_OFF "$PSRF103,3,0,0,1*27\r\n" // the command we send to turn GSV off - -#define LOG_GLL 0 // Loran-compatibility data -// this isnt output by default - -#define USE_WAAS 1 // useful in US, but slower fix -#define WAAS_ON "$PSRF151,1*3F\r\n" // the command for turning on WAAS -#define WAAS_OFF "$PSRF151,0*3E\r\n" // the command for turning off WAAS - -#define LOG_RMC_FIXONLY 1 // log only when we get RMC's with fix? -uint8_t fix = 0; // current fix data - -// macros to use PSTR -#define putstring(str) SerialPrint_P(PSTR(str)) -#define putstring_nl(str) SerialPrintln_P(PSTR(str)) - -// read a Hex value and return the decimal equivalent -uint8_t parseHex(char c) { - if (c < '0') - return 0; - if (c <= '9') - return c - '0'; - if (c < 'A') - return 0; - if (c <= 'F') - return (c - 'A')+10; -} - -uint8_t i; - -// blink out an error code -void error(uint8_t errno) { - while(1) { - for (i=0; i 6) sensorCount = 6; - strncpy_P(buffer, PSTR("time,lat,long,speed,date,sens0,sens1,sens2,sens3,sens4,sens5"), 24 + 6*sensorCount); - Serial.println(buffer); - - f.println(buffer); - if (f.writeError || !f.sync()) { - putstring_nl("can't write header!"); - error(3); - } - - delay(1000); - - putstring("\r\n"); -#if USE_WAAS == 1 - putstring(WAAS_ON); // turn on WAAS -#else - putstring(WAAS_OFF); // turn on WAAS -#endif - -#if LOG_RMC == 1 - putstring(RMC_ON); // turn on RMC -#else - putstring(RMC_OFF); // turn off RMC -#endif - -#if LOG_GSV == 1 - putstring(GSV_ON); // turn on GSV -#else - putstring(GSV_OFF); // turn off GSV -#endif - -#if LOG_GSA == 1 - putstring(GSA_ON); // turn on GSA -#else - putstring(GSA_OFF); // turn off GSA -#endif - -#if LOG_GGA == 1 - putstring(GGA_ON); // turn on GGA -#else - putstring(GGA_OFF); // turn off GGA -#endif -} - -void loop() { // run over and over again - - //Serial.println(Serial.available(), DEC); - char c; - uint8_t sum; - - // read one 'line' - if (Serial.available()) { - c = Serial.read(); - //Serial.write(c); - if (bufferidx == 0) { - while (c != '$') - c = Serial.read(); // wait till we get a $ - } - buffer[bufferidx] = c; - - //Serial.write(c); - if (c == '\n') { - //putstring_nl("EOL"); - //Serial.print(buffer); - buffer[bufferidx+1] = 0; // terminate it - - if (buffer[bufferidx-4] != '*') { - // no checksum? - Serial.write('*'); - bufferidx = 0; - return; - } - // get checksum - sum = parseHex(buffer[bufferidx-3]) * 16; - sum += parseHex(buffer[bufferidx-2]); - - // check checksum - for (i=1; i < (bufferidx-4); i++) { - sum ^= buffer[i]; - } - if (sum != 0) { - //putstring_nl("Cxsum mismatch"); - Serial.write('~'); - bufferidx = 0; - return; - } - // got good data! - - if (strstr(buffer, "GPRMC")) { - // find out if we got a fix - char *p = buffer; - p = strchr(p, ',')+1; - p = strchr(p, ',')+1; // skip to 3rd item - - if (p[0] == 'V') { - digitalWrite(led1Pin, LOW); - fix = 0; - } else { - digitalWrite(led1Pin, HIGH); - fix = 1; - } - } else { - // not GPRMC - bufferidx = 0; - return; - } -#if LOG_RMC_FIXONLY - if (!fix) { - Serial.write('_'); - bufferidx = 0; - return; - } -#endif - // rad. lets print it! - - Serial.print(buffer); - - // time to clean up the string - // find time - char *p = buffer; - p = strchr(p, ',')+1; - buffer[0] = p[0]; - buffer[1] = p[1]; - buffer[2] = ':'; - buffer[3] = p[2]; - buffer[4] = p[3]; - buffer[5] = ':'; - buffer[6] = p[4]; - buffer[7] = p[5]; - // we ignore milliseconds - buffer[8] = ','; - - p = strchr(buffer+8, ',')+1; - // skip past 'active' flag - p = strchr(p, ',')+1; - // find lat - p = strchr(p, ',')+1; - - buffer[9] = '+'; - buffer[10] = p[0]; - buffer[11] = p[1]; - buffer[12] = ' '; - strncpy(buffer+13, p+2, 7); - buffer[20] = ','; - - p = strchr(buffer+21, ',')+1; - if (p[0] == 'S') - buffer[9] = '-'; - - // find long - p = strchr(p, ',')+1; - buffer[21] = '+'; - buffer[22] = p[0]; - buffer[23] = p[1]; - buffer[24] = p[2]; - buffer[25] = ' '; - strncpy(buffer+26, p+3, 7); - buffer[33] = ','; - - p = strchr(buffer+34, ',')+1; - if (p[0] == 'W') - buffer[21] = '-'; - - // find speed - p = strchr(p, ',')+1; - tmp = 0; - if (p[0] != ',') { - // ok there is some sort of speed - while (p[0] != '.' && p[0] != ',') { - tmp *= 10; - tmp += p[0] - '0'; - p++; - } - tmp *= 10; - if (isdigit(p[1])) - tmp += p[1] - '0'; // tenths - tmp *= 10; - if (isdigit(p[2])) - tmp += p[2] - '0'; // hundredths - - // tmp is knots * 100 - // convert to mph (1.15 mph = 1 knot) - tmp *= 115; - // -OR- convert km/h - // tmp *= 185 - } - tmp /= 100; - - buffer[34] = (tmp / 10000) + '0'; - tmp %= 10000; - buffer[35] = (tmp / 1000) + '0'; - tmp %= 1000; - buffer[36] = (tmp / 100) + '0'; - tmp %= 100; - buffer[37] = '.'; - buffer[38] = (tmp / 10) + '0'; - tmp %= 10; - buffer[39] = tmp + '0'; - - buffer[40] = ','; - p = strchr(p, ',')+1; - // skip past bearing - p = strchr(p, ',')+1; - //mod for bug when speed,bearing are missing (bill greiman) - uint8_t date[6]; - for (uint8_t id = 0; id < 6; id++) date[id] = p[id]; - // get date into 2001-01-31 style - buffer[41] = '2'; - buffer[42] = '0'; - buffer[43] = date[4]; - buffer[44] = date[5]; - buffer[45] = '-'; - buffer[46] = date[2]; - buffer[47] = date[3]; - buffer[48] = '-'; - buffer[49] = date[0]; - buffer[50] = date[1]; - buffer[51] = 0; - digitalWrite(led2Pin, HIGH); - if(f.write((uint8_t *) buffer, 51) != 51) { - putstring_nl("can't write fix!"); - return; - } - Serial.print(buffer); - - // add sensor data - for (uint8_t ia = 0; ia < sensorCount; ia++) { - Serial.write(','); - f.write(','); - uint16_t data = analogRead(ia); - Serial.print(data); - f.print(data); - } - Serial.println(); - f.println(); - if (f.writeError || !f.sync()) { - putstring_nl("can't write data!"); - error(4); - } - digitalWrite(led2Pin, LOW); - bufferidx = 0; - return; - } - bufferidx++; - if (bufferidx == BUFFSIZE-1) { - Serial.write('!'); - bufferidx = 0; - } - } -} - diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatLs/SdFatLs.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatLs/SdFatLs.pde deleted file mode 100755 index a12c0af..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatLs/SdFatLs.pde +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This sketch will list all files in the root directory and - * then do a recursive list of all directories on the SD card. - * - */ -#include -#include - -SdFat sd; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - - -void setup() { - Serial.begin(9600); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - PgmPrint("Free RAM: "); - Serial.println(FreeRam()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - PgmPrint("Volume is FAT"); - Serial.println(sd.vol()->fatType(), DEC); - Serial.println(); - - // list file in root with date and size - PgmPrintln("Files found in root:"); - sd.ls(LS_DATE | LS_SIZE); - Serial.println(); - - // Recursive list of all directories - PgmPrintln("Files found in all dirs:"); - sd.ls(LS_R); - - Serial.println(); - PgmPrintln("Done"); -} - -void loop() { } diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatPrint/SdFatPrint.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatPrint/SdFatPrint.pde deleted file mode 100755 index f91f9d8..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatPrint/SdFatPrint.pde +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Print Example - * - * This sketch shows how to use the Arduino Print class with SdFat. - */ -#include -#include // use functions to print strings from flash memory - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - // create a new file - char name[] = "PRINT00.TXT"; - for (uint8_t i = 0; i < 100; i++) { - name[5] = i/10 + '0'; - name[6] = i%10 + '0'; - // only create new file for write - if (file.open(name, O_CREAT | O_EXCL | O_WRITE)) break; - } - if (!file.isOpen()) error ("file.create"); - PgmPrintln("Printing to: "); - Serial.println(name); - - // print 100 line to file - for (uint8_t i = 0; i < 100; i++) { - file.print("line "); - file.print(i, DEC); - file.print(" millis = "); - file.println(millis()); - } - // force write of all data to the SD card - if (file.writeError || !file.sync()) error ("print or sync"); - PgmPrintln("Done"); -} -void loop(void){} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRead/SdFatRead.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatRead/SdFatRead.pde deleted file mode 100755 index 8268caf..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRead/SdFatRead.pde +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This sketch reads and prints the file - * PRINT00.TXT created by SdFatPrint.pde or - * WRITE00.TXT created by SdFatWrite.pde - */ -#include - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - Serial.println("type any character to start"); - while (!Serial.available()); - Serial.println(); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - // open a file - if (file.open("PRINT00.TXT", O_READ)) { - Serial.println("Opened PRINT00.TXT"); - } - else if (file.open("WRITE00.TXT", O_READ)) { - Serial.println("Opened WRITE00.TXT"); - } - else{ - error("file.open failed"); - } - Serial.println(); - - // copy file to serial port - int16_t n; - uint8_t buf[7];// nothing special about 7, just a lucky number. - while ((n = file.read(buf, sizeof(buf))) > 0) { - for (uint8_t i = 0; i < n; i++) Serial.write(buf[i]); - } - /* easier way - int16_t c; - while ((c = file.read()) > 0) Serial.write((char)c); - */ - Serial.println("\nDone"); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRemove/SdFatRemove.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatRemove/SdFatRemove.pde deleted file mode 100755 index 983ac4d..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRemove/SdFatRemove.pde +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Remove Example - * - * This sketch shows how to use remove() to delete - * the file created by the SdFatAppend.pde example. - */ -#include -#include // use functions to print strings from flash memory - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - char name[] = "APPEND.TXT"; - if (!file.open(name, O_WRITE)) { - PgmPrint("Can't open "); - Serial.println(name); - PgmPrintln("Run the append example to create the file."); - error("file.open failed"); - } - if (!file.remove()) error("file.remove failed"); - Serial.print(name); - PgmPrintln(" deleted."); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRewrite/SdFatRewrite.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatRewrite/SdFatRewrite.pde deleted file mode 100755 index b7402b4..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatRewrite/SdFatRewrite.pde +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Rewrite Example - * - * This sketch shows how to rewrite part of a line in the middle - * of the file created by the SdFatAppend.pde example. - * - * Check around line 30 of pass 50 of APPEND.TXT after running this sketch. - */ -#include -#include // use functions to print strings from flash memory - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - char name[] = "APPEND.TXT"; - // open for read and write - if (!file.open(name, O_RDWR)) { - PgmPrint("Can't open "); - Serial.println(name); - PgmPrintln("Run the append example to create the file."); - error("file.open failed"); - } - // seek to middle of file - if (!file.seekSet(file.fileSize()/2)) error("file.seekSet failed"); - // find end of line - int16_t c; - while ((c = file.read()) > 0 && c != '\n'); - if (c < 0) error("file.read failed"); - // clear write error flag - file.writeError = false; - // rewrite the begining of the line at the current position - file.write("**rewrite**"); - if (file.writeError) error("file.write failed"); - if (!file.close()) error("file.close failed"); - Serial.print(name); - PgmPrintln(" rewrite done."); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTail/SdFatTail.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatTail/SdFatTail.pde deleted file mode 100755 index 99cf5bf..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTail/SdFatTail.pde +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This sketch reads and prints the tail of all files - * created by SdFatAppend.pde, SdFatPrint.pde, and - * SdFatWrite.pde. - */ -#include - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - Serial.println("type any character to start"); - while (!Serial.available()); - Serial.println(); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - // start at beginning of root directory - sd.vwd()->rewind(); -} -/* - * Print tail of all SdFat example files - */ -void loop(void) { - dir_t dir; - char name[13]; - - // read next directory entry in current working directory - if (sd.vwd()->readDir(&dir) != sizeof(dir)) { - Serial.println("End of Directory"); - while(1); - } - - // check for file name "APPEND.TXT", "PRINT*.TXT" - // or "WRITE*.TXT" - // first 8 bytes are blank filled name - // last three bytes are blank filled extension - if ((strncmp((char *)dir.name, "APPEND ", 8) && - strncmp((char *)dir.name, "PRINT", 5) && - strncmp((char *)dir.name, "WRITE", 5)) || - strncmp((char *)&dir.name[8], "TXT", 3)) { - return; - } - // format file name - SdFile::dirName(dir, name); - - // remember position in directory - uint32_t pos = sd.vwd()->curPosition(); - - // open file - if (!file.open(name, O_READ)) error("file.open failed"); - - // restore root position - if (!sd.vwd()->seekSet(pos)) error("seekSet failed"); - - // print file name message - Serial.print("Tail of: "); - Serial.println(name); - - // position to tail of file - if (file.fileSize() > 100) { - if (!file.seekSet(file.fileSize() - 100)) error("file.seekSet failed"); - } - int16_t c; - // find end of line - while ((c = file.read()) > 0 && c != '\n'); - - // print rest of file - while ((c = file.read()) > 0) Serial.write((char)c); - file.close(); - Serial.println(); -} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTruncate/SdFatTruncate.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatTruncate/SdFatTruncate.pde deleted file mode 100755 index 6396fa8..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatTruncate/SdFatTruncate.pde +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Truncate Example - * - * This sketch shows how to use truncate() to remove the last - * half of the file created by the SdFatAppend.pde example. - */ -#include -#include // use functions to print strings from flash memory - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -void setup(void) { - Serial.begin(9600); - Serial.println(); - PgmPrintln("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - char name[] = "APPEND.TXT"; - // open for read and write - if (!file.open(name, O_RDWR)) { - PgmPrint("Can't open "); - Serial.println(name); - PgmPrintln("Run the append example to create the file."); - error("file.open failed"); - } - // seek to middle of file - if (!file.seekSet(file.fileSize()/2)) error("file.seekSet failed"); - // find end of line - int16_t c; - while ((c = file.read()) > 0 && c != '\n'); - if (c < 0) error("file.read failed"); - // truncate at current position - if (!file.truncate(file.curPosition())) error("file.truncate failed"); - Serial.print(name); - PgmPrintln(" truncated."); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/SdFatWrite/SdFatWrite.pde b/libs/SdFatBeta20120108/extra/examplesV1/SdFatWrite/SdFatWrite.pde deleted file mode 100755 index f24c2d1..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/SdFatWrite/SdFatWrite.pde +++ /dev/null @@ -1,81 +0,0 @@ -// This example is really out of date so best to ignore it -// It is still here to create files for other tests. -/* - * Write Example - * - * This sketch creates a new file and writes 100 lines to the file. - * No error checks on write in this example. - */ - -#include - -SdFat sd; - -SdFile file; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt_P(PSTR(s)) - -/* - * Write CR LF to a file - */ -void writeCRLF(SdFile& f) { - f.write((uint8_t*)"\r\n", 2); -} -/* - * Write an unsigned number to a file - */ -void writeNumber(SdFile& f, uint32_t n) { - uint8_t buf[10]; - uint8_t i = 0; - do { - i++; - buf[sizeof(buf) - i] = n % 10 + '0'; - n /= 10; - } while (n); - f.write(&buf[sizeof(buf) - i], i); -} -/* - * Write a string to a file - */ -void writeString(SdFile& f, char *str) { - uint8_t n; - for (n = 0; str[n]; n++); - f.write((uint8_t *)str, n); -} - -void setup(void) { - Serial.begin(9600); - Serial.println(); - Serial.println("Type any character to start"); - while (!Serial.available()); - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - // breadboards. use SPI_FULL_SPEED for better performance. - if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); - - // create a new file - char name[] = "WRITE00.TXT"; - for (uint8_t i = 0; i < 100; i++) { - name[5] = i/10 + '0'; - name[6] = i%10 + '0'; - if (file.open(name, O_CREAT | O_EXCL | O_WRITE)) break; - } - if (!file.isOpen()) error ("file.create"); - Serial.print("Writing to: "); - Serial.println(name); - - // write 100 line to file - for (uint8_t i = 0; i < 100; i++) { - writeString(file, "line "); - writeNumber(file, i); - writeString(file, " millis = "); - writeNumber(file, millis()); - writeCRLF(file); - } - // close file and force write of all data to the SD card - file.close(); - Serial.println("Done"); -} - -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/examplesV1/V1readme.txt b/libs/SdFatBeta20120108/extra/examplesV1/V1readme.txt deleted file mode 100755 index bc1d973..0000000 --- a/libs/SdFatBeta20120108/extra/examplesV1/V1readme.txt +++ /dev/null @@ -1,60 +0,0 @@ -These are examples from SdFat V1. - - -These examples have been simplified by using new features of SdFat. - - -SdFatAnalogLogger.pde - A simple data logger for one or more analog - pins. - -SdFatAppend.pde - This sketch creates a large file by successive - open/write/close operations using O_APPEND. - -SdFatBench.pde - A read/write benchmark. - -SdFatCopy.pde - Copy the file created by SdFatAppend.pde to the file - ACOPY.TXT. - -SdFatGPS_CSVSensorLogger.pde - Ladyada's GPS logger modified to use the - SdFat library. - -SdFatGPSLogger_v3.pde - Ladyada's GPS logger modified to use the SdFat - library. - -SdFatLs.pde - A test of the ls() file list function. - -SdFatMakeDir.pde - A debug sketch to verify subdirectory creation and - access. - -SdFatPrint.pde - This sketch shows how to use the Arduino Print class - with SdFat. - -SdFatRawWrite.pde - A test of raw write functions for contiguous files. - -SdFatRead.pde - This sketch reads and prints the file PRINT00.TXT - created by SdFatPrint.pde or WRITE00.TXT created by - SdFatWrite.pde. - -SdFatRemove.pde - This sketch shows how to use remove() to delete the - file created by the SdFatAppend.pde example. - -SdFatRewrite.pde - This sketch shows how to rewrite part of a line in - the middle of the file created by the - SdFatAppend.pde example. - -SdFatRmDir.pde - A sketch to test file and directory deletion. - - -SdFatTail.pde - This sketch reads and prints the tail of all files - created by SdFatAppend.pde, SdFatPrint.pde, and - SdFatWrite.pde. - -SdFAtTimestamp.pde - This sketch shows how to set file access, create, - and write/modify timestamps. - -SdFatTruncate.pde - This sketch shows how to use truncate() to remove - the last half of the file created by the - SdFatAppend.pde example. - -SdFatWrite.pde - This sketch creates a new file and writes 100 lines - to the file. diff --git a/libs/SdFatBeta20120108/extra/extra.txt b/libs/SdFatBeta20120108/extra/extra.txt deleted file mode 100755 index 961a74a..0000000 --- a/libs/SdFatBeta20120108/extra/extra.txt +++ /dev/null @@ -1,7 +0,0 @@ -examplesV1 - Examples from earlier versions of SdFat. - -FridgeLogger - Example versions of Adafruit light temperature logger - -makePinInclude - Sketch used to make Sd2PinMap.h - -SdFatTestSuite - Development tests. \ No newline at end of file diff --git a/libs/SdFatBeta20120108/extra/makePinInclude/makePinInclude.pde b/libs/SdFatBeta20120108/extra/makePinInclude/makePinInclude.pde deleted file mode 100755 index 7911085..0000000 --- a/libs/SdFatBeta20120108/extra/makePinInclude/makePinInclude.pde +++ /dev/null @@ -1,353 +0,0 @@ -#include -#include -SdFat sd; -SdFile file; -#define INCLUDE_GUARD "Sd2PinMap_h" -//------------------------------------------------------------------------------ -// 168 - 328 Arduino -uint8_t i2c328[] = { - 18, // SDA - 19 // SCL -}; -uint8_t spi328[] = { - 10, // SS - 11, // MOSI - 12, // MISO - 13 // SCK -}; -char pins328[][3] PROGMEM = { - // 0 1 2 3 4 5 6 7 8 9 - "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "B0", "B1", // 0 - 9 - "B2", "B3", "B4", "B5", "C0", "C1", "C2", "C3", "C4", "C5" // 10 - 19 -}; -uint8_t const nPin328 = sizeof(pins328)/sizeof(char[3]); -//------------------------------------------------------------------------------ -// Mega Arduino -uint8_t i2c1280[] = { - 20, // SDA - 21 // SCL -}; -uint8_t spi1280[] = { - 53, // SS - 51, // MOSI - 50, // MISO - 52 // SCK -}; -char pins1280[][3] PROGMEM = { -// 0 1 2 3 4 5 6 7 8 9 - "E0", "E1", "E4", "E5", "G5", "E3", "H3", "H4", "H5", "H6", // 0 - 9 - "B4", "B5", "B6", "B7", "J1", "J0", "H1", "H0", "D3", "D2", // 10 - 19 - "D1", "D0", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", // 20 - 29 - "C7", "C6", "C5", "C4", "C3", "C2", "C1", "C0", "D7", "G2", // 30 - 39 - "G1", "G0", "L7", "L6", "L5", "L4", "L3", "L2", "L1", "L0", // 40 - 49 - "B3", "B2", "B1", "B0", "F0", "F1", "F2", "F3", "F4", "F5", // 50 - 59 - "F6", "F7", "K0", "K1", "K2", "K3", "K4", "K5", "K6", "K7", // 60 - 69 -}; -uint8_t const nPin1280 = sizeof(pins1280)/sizeof(char[3]); -//------------------------------------------------------------------------------ -// Sanguino -uint8_t i2c644[] = { - 17, // SDA - 18 // SCL -}; -uint8_t spi644[] = { - 4, // SS - 5, // MOSI - 6, // MISO - 7 // SCK -}; -char pins644[][3] PROGMEM = { // -// 0 1 2 3 4 5 6 7 8 9 - "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "D0", "D1", // 0 - 9 - "D2", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", // 10 - 19 - "C4", "C5", "C6", "C7", "A7", "A6", "A5", "A4", "A3", "A2", // 20 - 29 - "A1", "A0" // 30 - 31 -}; -uint8_t const nPin644 = sizeof(pins644)/sizeof(char[3]); -//------------------------------------------------------------------------------ -// Teensy 2.0 -uint8_t i2c32U4[] = { - 6, // SDA - 5 // SCL -}; -uint8_t spi32U4[] = { - 0, // SS - 2, // MOSI - 3, // MISO - 1 // SCK -}; -char pins32U4[][3] PROGMEM = { -// 0 1 2 3 4 5 6 7 8 9 - "B0", "B1", "B2", "B3", "B7", "D0", "D1", "D2", "D3", "C6", // 0 - 9 - "C7", "D6", "D7", "B4", "B5", "B6", "F7", "F6", "F5", "F4", // 10 - 19 - "F1", "F0", "D4", "D5", "E6" // 20 - 24 -}; -uint8_t const nPin32U4 = sizeof(pins32U4)/sizeof(char[3]); -//------------------------------------------------------------------------------ -// Teensy++ 1.0 & 2.0 -uint8_t i2c1286[] = { - 1, // SDA - 0 // SCL -}; -uint8_t spi1286[] = { - 20, // SS - 22, // MOSI - 23, // MISO - 21 // SCK -}; -char pins1286[][3] PROGMEM = { -// 0 1 2 3 4 5 6 7 8 9 - "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "E0", "E1", // 0 - 9 - "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "E6", "E7", // 10 - 19 - "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "A0", "A1", // 20 - 29 - "A2", "A3", "A4", "A5", "A6", "A7", "E4", "E5", "F0", "F1", // 30 - 39 - "F2", "F3", "F4", "F5", "F6", "F7" // 40 - 45 -}; -uint8_t const nPin1286 = sizeof(pins1286)/sizeof(char[3]); -//------------------------------------------------------------------------------ -#define print_P(stream, str) printPGM(stream, PSTR(str)) -#define println_P(stream, str) printlnPGM(stream, PSTR(str)) -//------------------------------------------------------------------------------ -void printPGM(Print* stream, PGM_P str) { - for (uint8_t c; (c = pgm_read_byte(str)); str++) stream->write(c); -} -//------------------------------------------------------------------------------ -void printlnPGM(Print* stream, PGM_P str) { - printPGM(stream, str); - stream->println(); -} -//------------------------------------------------------------------------------ -void printFunctions(Print* stream) { - print_P(stream, - "static const uint8_t digitalPinCount = sizeof(digitalPinMap)/sizeof(pin_map_t);\r\n" - "\r\n" - "uint8_t badPinNumber(void)\r\n" - " __attribute__((error(\"Pin number is too large or not a constant\")));\r\n" - "\r\n" - "static inline __attribute__((always_inline))\r\n" - " bool getPinMode(uint8_t pin) {\r\n" - " if (__builtin_constant_p(pin) && pin < digitalPinCount) {\r\n" - " return (*digitalPinMap[pin].ddr >> digitalPinMap[pin].bit) & 1;\r\n" - " } else {\r\n" - " return badPinNumber();\r\n" - " }\r\n" - "}\r\n" - "static inline __attribute__((always_inline))\r\n" - " void setPinMode(uint8_t pin, uint8_t mode) {\r\n" - " if (__builtin_constant_p(pin) && pin < digitalPinCount) {\r\n" - " if (mode) {\r\n" - " *digitalPinMap[pin].ddr |= 1 << digitalPinMap[pin].bit;\r\n" - " } else {\r\n" - " *digitalPinMap[pin].ddr &= ~(1 << digitalPinMap[pin].bit);\r\n" - " }\r\n" - " } else {\r\n" - " badPinNumber();\r\n" - " }\r\n" - "}\r\n" - "static inline __attribute__((always_inline))\r\n" - " bool fastDigitalRead(uint8_t pin) {\r\n" - " if (__builtin_constant_p(pin) && pin < digitalPinCount) {\r\n" - " return (*digitalPinMap[pin].pin >> digitalPinMap[pin].bit) & 1;\r\n" - " } else {\r\n" - " return badPinNumber();\r\n" - " }\r\n" - "}\r\n" - "static inline __attribute__((always_inline))\r\n" - " void fastDigitalWrite(uint8_t pin, uint8_t value) {\r\n" - " if (__builtin_constant_p(pin) && pin < digitalPinCount) {\r\n" - " if (value) {\r\n" - " *digitalPinMap[pin].port |= 1 << digitalPinMap[pin].bit;\r\n" - " } else {\r\n" - " *digitalPinMap[pin].port &= ~(1 << digitalPinMap[pin].bit);\r\n" - " }\r\n" - " } else {\r\n" - " badPinNumber();\r\n" - " }\r\n" - "}\r\n"); -} -//------------------------------------------------------------------------------ -void printGNU(Print* stream) { - println_P(stream, - "/* Arduino SdFat Library\r\n" - " * Copyright (C) 2010 by William Greiman\r\n" - " *\r\n" - " * This file is part of the Arduino SdFat Library\r\n" - " *\r\n" - " * This Library is free software: you can redistribute it and/or modify\r\n" - " * it under the terms of the GNU General Public License as published by\r\n" - " * the Free Software Foundation, either version 3 of the License, or\r\n" - " * (at your option) any later version.\r\n" - " *\r\n" - " * This Library is distributed in the hope that it will be useful,\r\n" - " * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n" - " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n" - " * GNU General Public License for more details.\r\n" - " *\r\n" - " * You should have received a copy of the GNU General Public License\r\n" - " * along with the Arduino SdFat Library. If not, see\r\n" - " * .\r\n" - " */\r\n" - "// Warning this file was generated by a program."); -} -//---------------------------------------------------------------- -void printMap(Print* stream, char (*list)[3], uint8_t nPin) { - println_P(stream, "static const pin_map_t digitalPinMap[] = {"); - for (uint8_t i = 0; i < nPin; i++) { - char cPort = pgm_read_byte(&list[i][0]); - char cBit = pgm_read_byte(&list[i][1]); - print_P(stream, " {&DDR"); - stream->write(cPort); - print_P(stream, ", &PIN"); - stream->write(cPort); - print_P(stream, ", &PORT"); - stream->write(cPort); - print_P(stream, ", "); - stream->write(cBit); - if ((i+1) != nPin) { - print_P(stream, "}, // "); - } else { - print_P(stream, "} // "); - } - stream->write(cPort); - stream->write(cBit); - stream->write(' '); - if (i < 10) stream->write(' '); - stream->println(i, DEC); - } - println_P(stream, "};"); -} -//------------------------------------------------------------------------------ -void printLine(Print* stream) { - print_P(stream, "//"); - for (uint8_t i = 0; i < 78; i++) stream->write('-'); - stream->println(); -} -//------------------------------------------------------------------------------ -void printI2C(Print* stream, char (*list)[3], uint8_t* i2c) { - println_P(stream, "// Two Wire (aka I2C) ports"); - print_P(stream, "uint8_t const SDA_PIN = "); - stream->print(i2c[0], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[i2c[0]]); - print_P(stream, "uint8_t const SCL_PIN = "); - stream->print(i2c[1], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[i2c[1]]); - stream->println(); -} -//------------------------------------------------------------------------------ -void printSPI(Print* stream, char (*list)[3], uint8_t* spi) { - println_P(stream, "// SPI port"); - print_P(stream, "uint8_t const SS_PIN = "); - stream->print(spi[0], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[spi[0]]); - print_P(stream, "uint8_t const MOSI_PIN = "); - stream->print(spi[1], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[spi[1]]); - print_P(stream, "uint8_t const MISO_PIN = "); - stream->print(spi[2], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[spi[2]]); - print_P(stream, "uint8_t const SCK_PIN = "); - stream->print(spi[3], DEC); - print_P(stream, "; // "); - printlnPGM(stream, list[spi[3]]); - stream->println(); -} -//----------------------------------------------- -void printType(Print* stream) { - printLine(stream); - print_P(stream, - "/** struct for mapping digital pins */\r\n" - "struct pin_map_t {\r\n" - " volatile uint8_t* ddr;\r\n" - " volatile uint8_t* pin;\r\n" - " volatile uint8_t* port;\r\n" - " uint8_t bit;\r\n" - "};\r\n"); -} -//------------------------------------------------------------------------------ -void printSection(Print* stream, uint8_t* i2c, - uint8_t* spi, char (*list)[3], uint8_t digitalPinCount) { - stream->println(); - printI2C(stream, list, i2c); - printSPI(stream, list, spi); - printMap(stream, list, digitalPinCount); -} -//------------------------------------------------------------------------------ -void printFile(Print* stream) { - printGNU(stream); - println_P(stream, "#ifndef " INCLUDE_GUARD); - println_P(stream, "#define " INCLUDE_GUARD); - println_P(stream, "#include "); - - printType(stream); - printLine(stream); - print_P(stream, - "#if defined(__AVR_ATmega1280__)\\\r\n" - "|| defined(__AVR_ATmega2560__)\r\n"); - println_P(stream, "// Mega"); - printSection(stream, i2c1280, spi1280, pins1280, nPin1280); - - printLine(stream); - print_P(stream, - "#elif defined(__AVR_ATmega644P__)\\\r\n" - "|| defined(__AVR_ATmega644__)\\\r\n" - "|| defined(__AVR_ATmega1284P__)\r\n"); - println_P(stream, "// Sanguino"); - printSection(stream, i2c644, spi644, pins644, nPin644); - - printLine(stream); - println_P(stream, "#elif defined(__AVR_ATmega32U4__)"); - println_P(stream, "// Teensy 2.0"); - printSection(stream, i2c32U4, spi32U4, pins32U4, nPin32U4); - - printLine(stream); - print_P(stream, - "#elif defined(__AVR_AT90USB646__)\\\r\n" - "|| defined(__AVR_AT90USB1286__)\r\n"); - println_P(stream, "// Teensy++ 1.0 & 2.0"); - printSection(stream, i2c1286, spi1286, pins1286, nPin1286); - - printLine(stream); - print_P(stream, - "#elif defined(__AVR_ATmega168__)\\\r\n" - "||defined(__AVR_ATmega168P__)\\\r\n" - "||defined(__AVR_ATmega328P__)\r\n"); - println_P(stream, "// 168 and 328 Arduinos"); - printSection(stream, i2c328, spi328, pins328, nPin328); - - print_P(stream, - "#else // defined(__AVR_ATmega1280__)\r\n" - "#error unknown chip\r\n" - "#endif // defined(__AVR_ATmega1280__)\r\n"); - printLine(stream); - printFunctions(stream); - println_P(stream, "#endif // " INCLUDE_GUARD); -} -//------------------------------------------------------------------------------ -#define error(x) errorPGM(PSTR(x)) -void errorPGM(PGM_P msg) { - print_P(&Serial, "Error: "); - printlnPGM(&Serial, msg); - while (1); -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - Serial.println(FreeRam()); -// printFile(&Serial); - println_P(&Serial, "Type any character to make PIN_MAP.H"); - while (!Serial.available()); - if (!sd.init()) sd.initErrorHalt(); - if (!file.open("PIN_MAP.H", O_WRITE | O_CREAT | O_TRUNC)) { - error("file.open"); - } - printFile(&file); - file.close(); - println_P(&Serial, "Done"); -} -//------------------------------------------------------------------------------ -void loop(void) {} diff --git a/libs/SdFatBeta20120108/extra/makePinInclude/readme.txt b/libs/SdFatBeta20120108/extra/makePinInclude/readme.txt deleted file mode 100755 index c62f291..0000000 --- a/libs/SdFatBeta20120108/extra/makePinInclude/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This sketch is used to make Sd2PinMap.h \ No newline at end of file diff --git a/libs/SdFatBeta20120108/html/_arduino_stream_8h.html b/libs/SdFatBeta20120108/html/_arduino_stream_8h.html deleted file mode 100755 index 6a30729..0000000 --- a/libs/SdFatBeta20120108/html/_arduino_stream_8h.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/ArduinoStream.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/ArduinoStream.h File Reference
-
-
- -

ArduinoInStream and ArduinoOutStream classes. -More...

-
#include <bufstream.h>
-
-Include dependency graph for ArduinoStream.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - -

-Classes

class  ArduinoInStream
 Input stream for Arduino Stream objects. More...
class  ArduinoOutStream
 Output stream for Arduino Print objects. More...
-

Detailed Description

-
- - - diff --git a/libs/SdFatBeta20120108/html/_arduino_stream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_arduino_stream_8h__dep__incl.png deleted file mode 100755 index ae149dbd69ea7fa901363f568162789348104774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1875 zcmcIlX*Ao568~F^NKvHJ9`Dd4<*GKSs4ZHmH&sg$G}KmG!^O?@EU~oc5?iY+Cq-0M zt+7;)gm_m8rAlofQMpBmMCwVOed*)A5AU7({mq;+GiT<*%$emk4_%O#!E(ps0000x zIU-yEKn%2R{~{y3FJ*f?=Ju7ezw>1T@Z*3>+TY{>z#$nYgsuDE3x%IMav%s6ZVp*Oq~iv+fVc7$yK_3Uo>iXJm?^@bQ$vjcc!nuO89i$4ck&PAp6_u zOPUV0G>lF!$m)3G@gOlf2bNUo~H2Z1Kqti@?79;T<2t+IEG4kUt#=g&+H!4i9!dX3}P8SVX_9#8lGmSjW$Q(l+y%dLToTU z-YWPyBl7f*(2*4nXYOkTg>LZ4u0=hp(d}&#ayGCc3T5V}5l^yL+l6=GJTb-pSZN=} z{pb(EG)-P3u?1lfF&e|a)_tZh%Y`>h*YVw&hD38hIh<2GqB*Tr)G;_C;`N`}yf)fH zyQ5=Yg?FMDEm&?xc3oQA?YCoG~8Jzb%p%FKsn*t3agviO3^)+CRNOy+S%3$ zA8>|3$B`dN7jQhsC1UR3PVsB%0fQR)ImLjfxiN$V>iRm`7HgB2no4t3I>n(-SCu>vbo_a~=c(_T zJ5&Y#v9u;dNN!Ql?knh;m6B;~TVUU0WhC3#^Nif`e{n z#`$#ZEyt>;q+4osz=8MdsVVD&{=w@W;@)9p0M-9FN;@>*qW70k{a?e%4MH=AxuZ(v zM;fHvuNoNlChk45Ox#FVa{XnZ4l0VTVFouGgFI%To4XRWxzwu{ZjuLcKr| zjQgj(!pCN86V`e(ssdETAG^V6-o7JXqaNYXr!Tux)1`_RP2c&LJ!XA%jjN!hGDzBG zUa0Z?Oohk^mwX~VvaShb!uEcV%U(M@M!SJT4thRaR_IS=7uJ{C=2tT)EGvm4RRayh zsgAG7g*|z0*(eCM)u_65hC<%

B#ByElQpkiKda?7cy5;{|yO=ea8R* diff --git a/libs/SdFatBeta20120108/html/_arduino_stream_8h__incl.png b/libs/SdFatBeta20120108/html/_arduino_stream_8h__incl.png deleted file mode 100755 index 3f1b8b643cca59f79088a38fbea9e8a88cc3c358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25729 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 - - - -SdFat: Arduino/libraries/SdFat/Sd2Card.h File Reference - - - - - - -
- -
-
Arduino/libraries/SdFat/Sd2Card.h File Reference
-
-
- -

Sd2Card class for V2 SD/SDHC cards. -More...

-
#include <SdFatConfig.h>
-#include <SdInfo.h>
-#include <Sd2PinMap.h>
-
-Include dependency graph for Sd2Card.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

class  Sd2Card
 Raw access to SD and SDHC flash memory cards. More...

-Variables

uint8_t const SD_CARD_ERROR_ACMD23 = 0X9
uint8_t const SD_CARD_ERROR_ACMD41 = 0XA
uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB
uint8_t const SD_CARD_ERROR_CMD0 = 0X1
uint8_t const SD_CARD_ERROR_CMD12 = 0X3
uint8_t const SD_CARD_ERROR_CMD17 = 0X4
uint8_t const SD_CARD_ERROR_CMD18 = 0X5
uint8_t const SD_CARD_ERROR_CMD24 = 0X6
uint8_t const SD_CARD_ERROR_CMD25 = 0X7
uint8_t const SD_CARD_ERROR_CMD58 = 0X8
uint8_t const SD_CARD_ERROR_CMD8 = 0X2
uint8_t const SD_CARD_ERROR_ERASE = 0XC
uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD
uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19
uint8_t const SD_CARD_ERROR_READ = 0XF
uint8_t const SD_CARD_ERROR_READ_REG = 0X10
uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11
uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18
uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12
uint8_t const SD_CARD_ERROR_WRITE = 0X13
uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14
uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15
uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16
uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17
uint8_t const SD_CARD_TYPE_SD1 = 1
uint8_t const SD_CARD_TYPE_SD2 = 2
uint8_t const SD_CARD_TYPE_SDHC = 3
uint8_t const SD_CHIP_SELECT_PIN = SS_PIN
uint16_t const SD_ERASE_TIMEOUT = 10000
uint16_t const SD_INIT_TIMEOUT = 2000
uint16_t const SD_READ_TIMEOUT = 300
uint16_t const SD_WRITE_TIMEOUT = 600
uint8_t const SPI_EIGHTH_SPEED = 3
uint8_t const SPI_FULL_SPEED = 0
uint8_t const SPI_HALF_SPEED = 1
uint8_t const SPI_MISO_PIN = MISO_PIN
uint8_t const SPI_MOSI_PIN = MOSI_PIN
uint8_t const SPI_QUARTER_SPEED = 2
uint8_t const SPI_SCK_PIN = SCK_PIN
uint8_t const SPI_SIXTEENTH_SPEED = 4
-

Detailed Description

-

Sd2Card class for V2 SD/SDHC cards.

-

Variable Documentation

- -
-
- - - - -
uint8_t const SD_CARD_ERROR_ACMD23 = 0X9
-
-
-

SET_WR_BLK_ERASE_COUNT failed

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_ACMD41 = 0XA
-
-
-

ACMD41 initialization process timeout

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB
-
-
-

card returned a bad CSR version field

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD0 = 0X1
-
-
-

timeout error for command CMD0 (initialize card in SPI mode)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD12 = 0X3
-
-
-

card returned an error response for CMD12 (write stop)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD17 = 0X4
-
-
-

card returned an error response for CMD17 (read block)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD18 = 0X5
-
-
-

card returned an error response for CMD18 (read multiple block)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD24 = 0X6
-
-
-

card returned an error response for CMD24 (write block)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD25 = 0X7
-
-
-

WRITE_MULTIPLE_BLOCKS command failed

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD58 = 0X8
-
-
-

card returned an error response for CMD58 (read OCR)

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_CMD8 = 0X2
-
-
-

CMD8 was not accepted - not a valid SD card

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_ERASE = 0XC
-
-
-

erase block group command failed

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD
-
-
-

card not capable of single block erase

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE
-
-
-

Erase sequence timed out

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19
-
-
-

init() not called

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_READ = 0XF
-
-
-

card returned an error token instead of read data

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_READ_REG = 0X10
-
-
-

read CID or CSD failed

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11
-
-
-

timeout while waiting for start of read data

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18
-
-
-

incorrect rate selected

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12
-
-
-

card did not accept STOP_TRAN_TOKEN

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_WRITE = 0X13
-
-
-

card returned an error token as a response to a write operation

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14
-
-
-

attempt to write protected block zero

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15
-
-
-

card did not go ready for a multiple block write

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16
-
-
-

card returned an error to a CMD13 status check after a write

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17
-
-
-

timeout occurred during write programming

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_TYPE_SD1 = 1
-
-
-

Standard capacity V1 SD card

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_TYPE_SD2 = 2
-
-
-

Standard capacity V2 SD card

- -
-
- -
-
- - - - -
uint8_t const SD_CARD_TYPE_SDHC = 3
-
-
-

High Capacity SD card

- -
-
- -
-
- - - - -
uint8_t const SD_CHIP_SELECT_PIN = SS_PIN
-
-
-

define SOFTWARE_SPI to use bit-bang SPI The default chip select pin for the SD card is SS.

- -
-
- -
-
- - - - -
uint16_t const SD_ERASE_TIMEOUT = 10000
-
-
-

erase timeout ms

- -
-
- -
-
- - - - -
uint16_t const SD_INIT_TIMEOUT = 2000
-
-
-

init timeout ms

- -
-
- -
-
- - - - -
uint16_t const SD_READ_TIMEOUT = 300
-
-
-

read timeout ms

- -
-
- -
-
- - - - -
uint16_t const SD_WRITE_TIMEOUT = 600
-
-
-

write time out ms

- -
-
- -
-
- - - - -
uint8_t const SPI_EIGHTH_SPEED = 3
-
-
-

Set SCK rate to F_CPU/16. See Sd2Card::setSckRate().

- -
-
- -
-
- - - - -
uint8_t const SPI_FULL_SPEED = 0
-
-
-

Set SCK to max rate of F_CPU/2. See Sd2Card::setSckRate().

- -
-
- -
-
- - - - -
uint8_t const SPI_HALF_SPEED = 1
-
-
-

Set SCK rate to F_CPU/4. See Sd2Card::setSckRate().

- -
-
- -
-
- - - - -
uint8_t const SPI_MISO_PIN = MISO_PIN
-
-
-

SPI Master In Slave Out pin

- -
-
- -
-
- - - - -
uint8_t const SPI_MOSI_PIN = MOSI_PIN
-
-
-

SPI Master Out Slave In pin

- -
-
- -
-
- - - - -
uint8_t const SPI_QUARTER_SPEED = 2
-
-
-

Set SCK rate to F_CPU/8. See Sd2Card::setSckRate().

- -
-
- -
-
- - - - -
uint8_t const SPI_SCK_PIN = SCK_PIN
-
-
-

SPI Clock pin

- -
-
- -
-
- - - - -
uint8_t const SPI_SIXTEENTH_SPEED = 4
-
-
-

Set SCK rate to F_CPU/32. See Sd2Card::setSckRate().

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd2_card_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd2_card_8h__dep__incl.png deleted file mode 100755 index 586a59acc712cefdeb86dbd0ae607cd9c15b9130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31734 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 Cga9o7 diff --git a/libs/SdFatBeta20120108/html/_sd2_card_8h__incl.png b/libs/SdFatBeta20120108/html/_sd2_card_8h__incl.png deleted file mode 100755 index b5e7cbeb7cf863761b3f1fd639e72fd454240789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4376 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 diff --git a/libs/SdFatBeta20120108/html/_sd_base_file_8h.html b/libs/SdFatBeta20120108/html/_sd_base_file_8h.html deleted file mode 100755 index 10bd151..0000000 --- a/libs/SdFatBeta20120108/html/_sd_base_file_8h.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdBaseFile.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdBaseFile.h File Reference
-
-
- -

SdBaseFile class. -More...

-
#include <avr/pgmspace.h>
-#include <WProgram.h>
-#include <SdFatConfig.h>
-#include <SdVolume.h>
-
-Include dependency graph for SdBaseFile.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

struct  fpos_t
 internal type for istream do not use in user apps More...
class  SdBaseFile
 Base class for SdFile with Print and C++ streams. More...

-Functions

static uint16_t FAT_DATE (uint16_t year, uint8_t month, uint8_t day)
static uint8_t FAT_DAY (uint16_t fatDate)
static uint8_t FAT_HOUR (uint16_t fatTime)
static uint8_t FAT_MINUTE (uint16_t fatTime)
static uint8_t FAT_MONTH (uint16_t fatDate)
static uint8_t FAT_SECOND (uint16_t fatTime)
static uint16_t FAT_TIME (uint8_t hour, uint8_t minute, uint8_t second)
static uint16_t FAT_YEAR (uint16_t fatDate)

-Variables

uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1
uint16_t const FAT_DEFAULT_TIME = (1 << 11)
uint8_t const FAT_FILE_TYPE_CLOSED = 0
uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED
uint8_t const FAT_FILE_TYPE_NORMAL = 1
uint8_t const FAT_FILE_TYPE_ROOT32 = 3
uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2
uint8_t const FAT_FILE_TYPE_SUBDIR = 4
uint8_t const LS_DATE = 1
uint8_t const LS_R = 4
uint8_t const LS_SIZE = 2
uint8_t const O_ACCMODE = (O_READ | O_WRITE)
uint8_t const O_APPEND = 0X04
uint8_t const O_AT_END = 0X20
uint8_t const O_CREAT = 0X40
uint8_t const O_EXCL = 0X80
uint8_t const O_RDONLY = O_READ
uint8_t const O_RDWR = (O_READ | O_WRITE)
uint8_t const O_READ = 0X01
uint8_t const O_SYNC = 0X08
uint8_t const O_TRUNC = 0X10
uint8_t const O_WRITE = 0X02
uint8_t const O_WRONLY = O_WRITE
uint8_t const T_ACCESS = 1
uint8_t const T_CREATE = 2
uint8_t const T_WRITE = 4
-

Detailed Description

-

SdBaseFile class.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
static uint16_t FAT_DATE (uint16_t year,
uint8_t month,
uint8_t day 
) [inline, static]
-
-
-

date field for FAT directory entry

-
Parameters:
- - - - -
[in]year[1980,2107]
[in]month[1,12]
[in]day[1,31]
-
-
-
Returns:
Packed date for dir_t entry.
- -
-
- -
-
- - - - - - - - -
static uint8_t FAT_DAY (uint16_t fatDate) [inline, static]
-
-
-

day part of FAT directory date field

-
Parameters:
- - -
[in]fatDateDate in packed dir format.
-
-
-
Returns:
Extracted day [1,31]
- -
-
- -
-
- - - - - - - - -
static uint8_t FAT_HOUR (uint16_t fatTime) [inline, static]
-
-
-

hour part of FAT directory time field

-
Parameters:
- - -
[in]fatTimeTime in packed dir format.
-
-
-
Returns:
Extracted hour [0,23]
- -
-
- -
-
- - - - - - - - -
static uint8_t FAT_MINUTE (uint16_t fatTime) [inline, static]
-
-
-

minute part of FAT directory time field

-
Parameters:
- - -
[in]fatTimeTime in packed dir format.
-
-
-
Returns:
Extracted minute [0,59]
- -
-
- -
-
- - - - - - - - -
static uint8_t FAT_MONTH (uint16_t fatDate) [inline, static]
-
-
-

month part of FAT directory date field

-
Parameters:
- - -
[in]fatDateDate in packed dir format.
-
-
-
Returns:
Extracted month [1,12]
- -
-
- -
-
- - - - - - - - -
static uint8_t FAT_SECOND (uint16_t fatTime) [inline, static]
-
-
-

second part of FAT directory time field Note second/2 is stored in packed time.

-
Parameters:
- - -
[in]fatTimeTime in packed dir format.
-
-
-
Returns:
Extracted second [0,58]
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
static uint16_t FAT_TIME (uint8_t hour,
uint8_t minute,
uint8_t second 
) [inline, static]
-
-
-

time field for FAT directory entry

-
Parameters:
- - - - -
[in]hour[0,23]
[in]minute[0,59]
[in]second[0,59]
-
-
-
Returns:
Packed time for dir_t entry.
- -
-
- -
-
- - - - - - - - -
static uint16_t FAT_YEAR (uint16_t fatDate) [inline, static]
-
-
-

year part of FAT directory date field

-
Parameters:
- - -
[in]fatDateDate in packed dir format.
-
-
-
Returns:
Extracted year [1980,2107]
- -
-
-

Variable Documentation

- -
-
- - - - -
uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1
-
-
-

Default date for file timestamps is 1 Jan 2000

- -
-
- -
-
- - - - -
uint16_t const FAT_DEFAULT_TIME = (1 << 11)
-
-
-

Default time for file timestamp is 1 am

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_CLOSED = 0
-
-
-

This file has not been opened.

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED
-
-
-

Test value for directory type

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_NORMAL = 1
-
-
-

A normal file

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_ROOT32 = 3
-
-
-

A FAT32 root directory

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2
-
-
-

A FAT12 or FAT16 root directory

- -
-
- -
-
- - - - -
uint8_t const FAT_FILE_TYPE_SUBDIR = 4
-
-
-

A subdirectory file

- -
-
- -
-
- - - - -
uint8_t const LS_DATE = 1
-
-
-

ls() flag to print modify date

- -
-
- -
-
- - - - -
uint8_t const LS_R = 4
-
-
-

ls() flag for recursive list of subdirectories

- -
-
- -
-
- - - - -
uint8_t const LS_SIZE = 2
-
-
-

ls() flag to print file size

- -
-
- -
-
- - - - -
uint8_t const O_ACCMODE = (O_READ | O_WRITE)
-
-
-

open() oflag mask for access modes

- -
-
- -
-
- - - - -
uint8_t const O_APPEND = 0X04
-
-
-

The file offset shall be set to the end of the file prior to each write.

- -
-
- -
-
- - - - -
uint8_t const O_AT_END = 0X20
-
-
-

set the initial position at the end of the file

- -
-
- -
-
- - - - -
uint8_t const O_CREAT = 0X40
-
-
-

create the file if nonexistent

- -
-
- -
-
- - - - -
uint8_t const O_EXCL = 0X80
-
-
-

If O_CREAT and O_EXCL are set, open() shall fail if the file exists

- -
-
- -
-
- - - - -
uint8_t const O_RDONLY = O_READ
-
-
-

open() oflag - same as O_IN

- -
-
- -
-
- - - - -
uint8_t const O_RDWR = (O_READ | O_WRITE)
-
-
-

open() oflag for reading and writing

- -
-
- -
-
- - - - -
uint8_t const O_READ = 0X01
-
-
-

open() oflag for reading

- -
-
- -
-
- - - - -
uint8_t const O_SYNC = 0X08
-
-
-

synchronous writes - call sync() after each write

- -
-
- -
-
- - - - -
uint8_t const O_TRUNC = 0X10
-
-
-

truncate the file to zero length

- -
-
- -
-
- - - - -
uint8_t const O_WRITE = 0X02
-
-
-

open() oflag for write

- -
-
- -
-
- - - - -
uint8_t const O_WRONLY = O_WRITE
-
-
-

open() oflag - same as O_WRITE

- -
-
- -
-
- - - - -
uint8_t const T_ACCESS = 1
-
-
-

set the file's last access date

- -
-
- -
-
- - - - -
uint8_t const T_CREATE = 2
-
-
-

set the file's creation date and time

- -
-
- -
-
- - - - -
uint8_t const T_WRITE = 4
-
-
-

Set the file's write date and time

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_base_file_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_base_file_8h__dep__incl.png deleted file mode 100755 index 1a0a56f0bfde540fd4664a689be2a6fc62181e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28986 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 MhAx_N?OxFT0tUassQ>@~ diff --git a/libs/SdFatBeta20120108/html/_sd_base_file_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_base_file_8h__incl.png deleted file mode 100755 index dea7d07aa8b21dcb558042660ed4a20ed083c0d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17225 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 diff --git a/libs/SdFatBeta20120108/html/_sd_fat_8h.html b/libs/SdFatBeta20120108/html/_sd_fat_8h.html deleted file mode 100755 index 47a0405..0000000 --- a/libs/SdFatBeta20120108/html/_sd_fat_8h.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdFat.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdFat.h File Reference
-
-
- -

SdFat class. -More...

-
#include <SdFile.h>
-#include <SdStream.h>
-#include <ArduinoStream.h>
-
-Include dependency graph for SdFat.h:
-
-
- - -
-
- - - - - -

-Classes

class  SdFat
 Integration class for the SdFat library. More...

-Defines

#define SD_FAT_VERSION   20120108
-

Detailed Description

-

SdFat class.

-

Define Documentation

- -
-
- - - - -
#define SD_FAT_VERSION   20120108
-
-
-

SdFat version YYYYMMDD

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_fat_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_fat_8h__incl.png deleted file mode 100755 index a1cd04a28cadeb00499f1eadf2ead9bd7e674203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37703 zcmZsDcR1C3{P)*h8OKUi95XX}WabzVA_v(~lo63VQ|b^QAzLT&*a_JpdsiHik?6>= zWv}ORx_`gt`RA$Yy1OpEpZ%V%_v?K}-!RgprDmswAc*#w9>NrYi1i?dgn^PA{N%@n z^vB>Iaz_JQ1awCDo7-HN1VKE|HH4;FK<3JHaEOg>mij67NG8d^+CcKdU}h4ey?nRq z{0$8lLL(QB3b-UZe|LHsuAh;YyR_!%|E_V?7N*ZABI1jsfnV*1qbXy&ZwiZ0ixl0f zVM(taxsvaZK5)46y&-ACpcL z9%8lDB+n`(bGefp|i*}dmKCZk=KN8vP zvL8~@XL;tGb7kgNd-@C1Jy}-%m^}TK$>gBz(nSu}{9U=Nn%9Tved5$(!fv+*v=L_1 zG>k~IVukk6IueSRC4DXy;oWCShqdh|u`@ZQaf;fhT;KBvYCeiAx`?{qy|im-Zx7Q2a?H3*PI37mwVMPSJqi{_qyGvb%Wl6e zrsGNp{($*$yHP)V3ClWegFyWH8JJK6*BRbpJCRCMDBhg8_s$hF*{!U5Gk^D1i4Sv> zfW>QjV}u!pN+e>4nM0br`AgBa(4^_p9*-oc#MSEpN0w5!wDh@ns5k$i{maoV) zNr}fY685zC|DG6uK$u04MgPxN;Q396Soy*8qlr~a_~ZTnNov7UBHr$OW-|WxQUigI z^OlW(BDUV`UX1>%sqEC1Nc{#kJu`CI*kwrNcHdNvYH+ks#x6C^-X&9wG5WK;CZg(7 zbqixu0?yZlriUtRpwxoM)^B0g46|(mYrd59C#}78x;ziJdMp-UOuQe)uoPviKAn*f zE^dp$&~t&Lt*1C&iIU?m6bk)pR5j~bM5~&4Q1RcUfeFJH-@8&!11XQe@1%0r8FmU zBQI%grR6YRA9ik3zk6o&srcsI8XBsK zXQB$E zubE!sh14ez?5(a>gS+J<119huq5$FK@hONB%>SZrNTHD2~t z?;Z0K@vJo^BvOKP^o6SD;c&>=tJKCJU=r?&=^^OyO|Q(7%~857w%WR+L4$W1u$H0~ z&#!0U*=2HJ5E2}B7jyT>{Um- zEN0zv=EspW_F94KLVF!%EB`IcZ0+pB9^UgugxL&P!E7Wgvth&$Ovs(H`XSRx!>t=- zO^P|jYHNY3=Rbmj$X*~Eq^M8*#gb~h&HAvdOYw)FG_%}PJ-!h(xT7pLYisqeN<2_T zCSbzNoU-fYeW4*}ARNplP9YIeVqmtT=#~_J5Qdww#Q}4C9>`W)G{3~n&O;z0-R0G0 z*2>et*pVpDMR{cN;I?vkhQfN14B=aLdhji6zG=VxTg;_hTp{wmx2ecJ`)L-!LNzM^g9>~D{Bs$cD z)e|qhFW>%ndAYp~NA%vzw@XsBV*4IJB&dN5jp;e@nG^Tqe+_Q^qx`~c(tTYS7MzE2 zCbG@Z_YHfnIbW_r_*4gYnz6R_D6VSc!?ze4+R_V;vV_ik`7qmd3`=Q*(Zn1)ypwPFzkm6J!FL%!+4J&O(Dsl6+z z=A;%-L*KUYn!AVX%x`d^W9M1<(IQ(Xwl2g0(Nb0lLeENL<(~X`WSm;_n-ro!G7-#* zG`1L36b3E;nTQFy%2HSOwb}UN5Tkbe4`y1s+)TAjF@MG`F&_kf<^KoF8`lX%u7|WdAM`z!BQxp}wep>&) z#H{a!;l69pH{W|nn8}zh)8!__2`9|vkFr5#Y|BO&CR;^u;_p2-d`uldY&ScAFp_CH zNDyrx1Z9rQvA5>$eT(u8_b99H2O{Qizy8rP!c-T*R4nr0r$VNX+PQn4&33PAS*ayM z+^(P2Wn&Kn!6OTE1L+bGOJuVocc|-WX=oMp5a;~3Audl8WGpgvP_O+WMS&%_blqNB zGI=?GzOwXfmsGT{BVkYxFsSJ$8?i{YFMs5MZE?lt-${fVNx_-}hO<9+w6ty&wRhj* z2tktKO^Yv_{e%m_v?;*TlaW1chDOpf6OPe%G2f+nnpxrrs)?MVFkNg_dV;2mX*0DvM`$$ zxN^K8#&tY!M&P*;tpVa~C%7cu;%`F&kR7J)#g_&J@1NG&&d7ml{0rvDYq3EQQaTyP zZ3SZ6YcAkS9|&hckY+(^eT(H`1HP>6ulj9w5>Th{BI(*2P0^E>dkl$ADxTQZ#y(xd zPr~FxWo4rFBy+MF0e^)NA+0BOFDYi*~LY|Oh|#W8IB$w<(6-cB$#1Vi8bsf z90rth;FmFPCPyO9I(?EpMi~P97aVckyF(E{4Il2#^53Lh? z&wmU3u~w~kSM7Iz5*`4@E6620nTVPo9Q$CRGN=`=@<>CzF~~rEs#zuJPhhd0V+$sm zzQ-3je0K5G#Zxvx;yLQsb;Xw5`_aPgADfczQJ0SG(dV#jv14x)eRvc!W)9(>spr+y z{F2kmEsXBD4;hh;koItExIjU_GL=%By}Mub`zz5JB8&*T%`QS~vCRIC=I!>Cji7*J z8|a83;H8H{C0-$%-aYT?>Ts5o6Gv!ueDXNjoqqrIc9ZZSJ#_Y4nbbspF#Z*;CWmg0 z1#@VJy#=4^WE0WFHPD&r$;F=><+Puk7~kGo%i&E_EV@LwdoF@$t-pq`t>5-J4+ccI z=xa$vkowPPUZFc#c<2{Zq>GI%Dm}lPgaJuH!#K*ne<~npL2GnA(f{MnRRkirI}#y# z=@T{bSRg6Qw-L_|!mmJ^-^Q|jXcRz$?=OpT!Nvlagt6%)W4NaLE0` zQC`geGw~(7WzUzVloGY9SdZz$gX!|GBOgC9dbl5-G9-hTU6!b2J%?&8;m((GzpVV1 z-{uXQ7>`Ea7n5fwU}Ka*_n8bMFk%#5*x!Q|XMsN`Zoa<01Fx}iD+GBC(?D(NAsiV$?yrq3)Fx1-+IqjEXP*=GQHH%jr@`3;Ot&uP&}`y?vELQY@nL zb<&ffH7`0wlMBBG>fKW?Aq;Ibb2hK6E{RbvsRqg1N}62LYpMFpgLG79nzXB*a=8E( ziPTL%^92{peF@}s!e^t9?8M7 zf)aT>6kfUaSZ0h6$aX$G#IKDe+d>k>t8#O`Sl2?vl6KcX*#fI=zpg_yv!D!wEXYqr zKdyMgeq{8Po;Kt8WeXfjhCjp}2{xW2PIZ0HW)4vsR}*@F(z_sprUJ18yOtZiFV)Iz z_(rmSdYKi+1B?4) z6%6CakWL!}ZWzc(4Z#k#|ETY$C*Gik?^-$7&Jko{j1Jg2DnrBHDp1_GmBgwL93ulP zu|Tgnv1P_!`OLgB75E5*Cnm6LY@lp}Q<;I?aDE-MjtM7zNBcG9u)& zZ_1l%Bmp^ih8kJ_wLo0VQeAeaUoZY~c@tg*AuE;n1R)!Psb@&AzbidW-#B#D#6^Kv zul9qx>Std@c)B9cx!WEdSw2K!WR+dMtTAd%uQ;Bo8E~)3Q^5?$!HZS$jL;La4dC`> z=agx*?UkEdMI&4osqSjRV|a$ZBf+(BYOg#!C$~CXY@fdkxX~%70ZbSiMHWq|Au<*S z&y`f@YQln<>0$1q0i@BwF^ZpcNHq|Wq#OM$EhS;UlxaHqbYM*rzLfvAg9#QFPnCc+ z9>AK%!Km}F>7qVfd9<*jCb~gLdY@Ng7dmQL1%u)yDIFfKOJ=NrS26@q)mXiRQ>=|J zS|RVN+iruA)+QtACmqOf^&Gc0Jcf;xALG{2if2Z0!bsbH%3&hA;vloJ_dGCd!caN4 zor^@r@KpS17G8{5z5YjXFywxXUy(jq*cBwC4{B<|jvZi`d~kcetf+YdQVwMOx19fe zb!#esDB?sj!4ePllv>k}DD;9qh8ryBba-21oR$S#CPBYs}yFnLpettk{P^UUBR8V!EuxSpUTv5TxiJWZ84jmz6Zfp)@M5l%?dtbu$m(^MavgXcGEEoI53i59+UnIJrFWuovMGwDG2PaM7rj}2AKbc-E8NJ6<1awj5zpU;boQGz{q? zhJ^?o@WpyvPOgZ$To>mg)_=^?2A39VhWQn)?X~jQ`i>w(KcXHNmWc_I&sep!_!S^q zAn_~k$}GjwPmK3Rseovamt-R-lGb1(%Yl2XCwrxY7h4L7dV`X&Geu;Eey*x0g%4u* z^bk5-YZF)A>J_Eo-g}=Og?_((`m)+=F-U_PlEPT6?3JB+AMpl%-)rUHm^}HE_dQb}&p-Os4(Y@ zN)ZPsV31RbINHgE$PUTU+6U6uGQYGUPC~v+^1*`TNj~>G%r&>g)Ea`fF#u~Z0icdd@;P^8eXnmy zUjiN)W890b`4m?(sI|zh7V}ND%OtOPa^+Ka>3w0i2n`Kmr;%EP3-O!mVTI3VMYbg2 z24zE*$0BQk&K91oVa_k1)&#@?+<-V99*1i6EqxdIS+XM_-}JkovO*W?dH+rVz1CB)vtR0sRe1 zO}po~yXw|Nt#Jm##!WeN?B)p@zs*AuGDSoUgzCW~TL^Aqx zW#Zw11S~f5d@p7hB;RoK7sBTV@>%lS`(Blsz@}i{Rz2L!f_CXn3|p)3-?TV;W1Ktk zXWg@bSj#6dmU6stNDGm_Y30t$0pFs7@IsfH{DdRw%%x1VJ-&a7I@lgQGnB5M`#9Yg z-a^tQjZG8Gz1T+E_A%8ktuzU0`k+5m{)X#{ME8&S^`?sAKb126>vpZs=;4Kz0mN;g zQ^wa zCGM8sJ`psycw#A-Pt_L4yRY1RQt8*aGSh5lwmnpReg0R|&viMI74QJpC;Xv(!*3PM zItav15J^7d8Shhq@0SC-8Np01rpFvuY=)D9Z)kg!;Kly;NAO*)2=^5{KJc3_D;yp} z0bZZThc5Rvm)%V)QGxLC!HcwItZb0B#cPDPWa3RQ%Y7PFF?He*i=y-?*AM-U{n?^B zHZ6~%a^|B-w)ItCqTsPYF?o6h{I6Vy8pJa~mrvPO9xM!2{g?vZ!QmJwu!5qh7IK|< zoQzH@Rzi_U)%)_6jrhLLf|~f|NAF$RfLY5a(ZV^FsRyrFj?!aT#@pAYm)36;doWL_ zg{J_|!z&+Cda$j&3qNP;I8WDYqQgwrdVOI~SLfu`zO(JhI^V@8Prv*%(U2C_gW!65 z3(jZpg4=Q|r?L7TPt*<2Y;!RF7%?YyBjOQg!ipu&)Khqo`E9RC-IudQ$sZsn4O0CMC2DtT|007^yv;7u-r?n_6&NfA9Asq z-SOA(E8%&d6t56o7?Cx<%BJw9pD(KfhmHKQP3!lJ@60Z$)lQtE)fR5{=KM4hbl!Hk z#_Y)H_>R(QJQw3>o*Zl=#0y6U0K3(5|9;>o9vYDC`T@cm7_5^C?DwVAt~exL__gG8 z>Hqxi9$G=x>UCX$ew0R%)9Y%;0iV&dqx zNBg(oid1b4y(;1TDIDVf9D4uzcZUT4EUeWkaOwbVDt~_|D`3PoVsjv4Z-xf(IY;W( zK*h?`-af#!Q1{$zI&~7?#@vL8@dvtHZBXUSNgctj&EyHckc%6LtK7RMES{w|RM?Yl zp<^fj8m7|!4+}6MB&FLB=Owgn=qVqPA8~n+=C3n|wK-(G&gHfu<@OH3j_%Gy8I)Xu zRB7AjZ7F!sTOcCiFCrHr9_iBgfmeRvq~q(Vo1pV|$F^EL>5nQ+f&tM%Jn-$~1hC0S zpw@60cO)85Isyk_9y1F#KWxhxYMuO0>{5v5mnb$0MU{Ca0Z_aGlkIx$OvhhP{TMX83uNUlvxjn%``$?$g;cew9 z(dPJ|0*nE40E0i$r$PsT9Q&<;%h26ws7arN{^QVmHf3(IO61>6f(l+QSU(4==Nu_f zso2f{f%{NVSIcs5Q(#Ue)m&V};s*P_=yS<1Lw+L&5~O4g`wf6hOnT8b&b;|?G6I+< zwfjiJSjKtdXG#i7Md{4xd_~p64StALGolfQEqV)xBr_*{PnWoLc~1i!Be70iI@x_a z``IydDM3Z{%TsYu_|VqvW7l<=mPb^%@m&icHxa&1$fBOm)ib3c*rMf~Z0ti@YiryGtCcH8rJal#YmYz$LGT$ERxWx8?FkUlh(soBa~C?( zhqfSII=TtpGJ-tmiI3VM$@=4qrcd8_e2QGuML8s5yiQ>zpTUC`9h?qXki5AqPQ!Rv zmZF$d%RTDLpS5*C#$8Jdet?N9C%f8P;m?`ex$aFB;qrb`^=&INHB9v)4P(^wCgk_q zyPDgdi=RK%)#KR&wZ}}zPEJO;^F@jttoDN7Fn+}r#9E`;DN7>)n2+ZzWtRRY>xue4 za?BS>xr8||N%DHdPG6-uTVQB=0)*j8?nTnS7i&Fd530>DPH#(8ZvR)3Fd|oM(qYyH zQsfF(B+3l`%Ly~geed!m`!$e+pv2FkP(k!uD!?7hv1#qjQ?<6;L~n|f1D*pfCHoMJ zvI3BqaD@37Da{um9Yof-Di-}hixa7wi;8q@wh^a1|Ed+TKb0*kQA>)Mdb$?FBU5adZEs(hnq{NgYn9l_i1R()o( z%S;i*0JA#q(xTJTyIyqfBON203g+*Vpx^5pT*35-3a-eX#(8Y`ALP1VYS5og195g9 z=pse|^!GNuj|stQ8b#DD_1RoFYwf@{Jbc3n+Ou|B1CfG6Ziz&AH(QcAZJP!I{~Ac` zP=bXL;ejUmTpu;c-t)vsKSJy6C4DfMYzf_w0i~Pz2pj6ToX~Kr|I~M7T*J^}8zU?< zL03JRP%yh%Twi}C2QhZd;Q;&{Ey4)@nfAmi5}1PK@jfcdA%hlbBdLaQ^~GRUJh5A7$N%bB15&P8h6t4MEw)LavZVvAjO;O!E8p@Aj+8W;I32jL08k z8iahN7bKn|7wq88H=g3uMfiz@&X<%ub>GDVGgA4;Mif4Q)c2Zp!@aYLzx*CNTDT5* zE&!$f3$%6#HSvz9NQ$#7|J3<^xd4u$?UrtQGM~-wfihmpb?4n)xVI9I{ch7sd`S4@ zBW%4${y*)%)^^-OkQsKcXD+9eD$IWW@4@LQTNf%`rZGM}ibso}v>^dgqDZJVD^$}tjc$0ZESdV8Qdcl-`+mWZ0;%tI5@F?xbe`%$XiJnyWh`mk?7 z@q1PSsQIfe9Xwqb4B%BFXJE~P$3~Bf)NX=A+}J4Rfidxd8^-$`sNpmcN_u#kq$-C` zTYQL0RO)$NLWoA44D^dP;sBmPR*ZW4Voc|kir(V)%G*1q*9#iC+8VXJW_DK_x!v#A z?|WhE1^eE7{sW&#?j5jN2QJu<3+R6=Hwh2@%25rTpO+;{=Dx8$c*z$iC36Hv+_h8b zWUB*t5D;G_H86WfKavcRZB)TaAOW3hKCvQUIYt$ecx3~(#H2|bzmYisOal2PHwDsf!h`4RJPrhlEC+lc15K(%} z@8FJ-@fqql<4N~n!R}2|5lF6kE+8|79F1YH5?98-!LQ6CSrIK?_pabD^P?eZ2TLj9 z7I$o2XkktsDmWgNuUPE%67V)59@0u1EE;PYCoj*g7rKPAE_v^&-l&n$MnHj4s21k7 zyAi*Un+n7D<08yVFB-ud%IV1WeBdG^L&+oc*B_?w8}eq)%^~~y@{afAB>l4e;6kYm z0rURj{we}6=Tfb@PPX8L+5fP<-sJWvayO;Ddyo(&4deIUulr})4XQ*xU18h7CZ639 z)ZTE^sDORa8O8^E*;Y0;m!W_mL71iF6nlCNncrheg_PwC$ox}ryYvP}gQZ6kjwkt5 z@1qK$g#e_IN@BwE(C|(U-Pzf1cUtJ?uC~oA9irfZ=+U6~Pq$ccG3|Kcm@taY%UQ3!=Q>9(s>*zYiNwVaL91H~p`vSCi^3s@i z>*ZVB-WR2V;bm4AB6I6w4d#~A#*Twak{_cm0MpDgF+9D$awNd(C{d2gMqM7)x23IO zS;jXyTMH(saU={E_l4)1a@AqxTcwVVuCvg>z0Co}_dsq}-OW6_m`|_6Ogm3C^{Bne zbtMPo3cPS;?;U3~GKcW0BQq(=iL+IFOBO$!JhkT&*`Brupu$#Cvqc2UB-Wte z&W$L)ByVvaBkyk6e6dZV>IiWMx?ETARrT!VpA$wC55kdcS=$O2{nspN&P+Qln{V3-9H0FS&q}mvc5n$!_zRul2GqWMb z@Tt|Mx};7qn%NP48NQ?XS-ySSO8s4o!prOtb>LCu1N}wDHna8Dtr7mL&9^pSEf1mz zEEmqN>M;&p-)J9Wj>VHE8^7PmW8kpr?Bdfa{??a7bntg1t+N{~5-G_Qw507LQXlTN z7|2xf+^*wr>`}vBt^V3`)Q{Vm@Itd4<8ifhN)6&RYKK9GV%#?cL(6_8y)IH3voTCN z-Jpf2HiD&^oFb#5+?_adO*m0xYaBiN{n>8c+7pxwsI?ZFF@>`$QC~jR*?Z?+i}UNQ zx_bS(s^s>?M5Dc#*Vp?ryLy!1K}->EtpBypAGZnylAs@lYE#awDRoP#4^s5&uJ2%U-rt=C(R%@Adzt< zrFhYEA9I-hb4$7jy`sc=+5TF7%5cTN%-!dhA`xj1eUzHG9PSE$>2& zBiP-X0>x`ZAp?egTlh+Exs0TsTI~A2+*Xb(|N+~?>oRZ(H)Uc3l6U{3gE9MdmOs(ntYd9^2#q&_BG}-dq%{vQNEkkUeF={Z zk;HiaUew=edMSj=SIAhkTU0iPx)kvoQb9J`qWF`lGqw-7jtW}xyPisY<%o1}nJ8xp zpo~z6Xq}2Kh}BJ4wzx;F8Ggo8&R6Qo)>HIqv=}8BS`bc-#g#S zvuNf7vAn2xz$+3qmE~pZ=aq+}Z~Wxg>C^-4G>&b+D#w00Yd3BtG(}zl_2#Mqb~*CEJusBL#Felt$*)+JF$6XBRFPR;h2Fc zZh5fZz=xIs-djn(Iqmh4pv<__zMz~Gm0OgSd&o3{Npcm>s99`SQu@k9o8@B3w-$Ym z!XMo_Y|kg2#f44B?pR&gZ5UzPyC2;hS2yjr7gwX&k`fIETNin2*_+lE5@QO02WOK2 z``G8kpHadfgmh{)*Kd}fUjHh^ZS89Rt6A*@%SZ2L$@rz3>&y=T9Q<I11ORay08A{JR{^Nj^i$iqk}UU;mpLE;l3g;WN(nPB9TA zu`OwxZ!eTzt1x!phhV-6%3q6Yo^+;FZ)1y(=OuSTxJ}wKe@1@3d-@I>_<|eCqY1l& zsOv{-G0PCXeFeXmzowh0-u?YS@o@Kdi>l%72JtOciN8!*IS*Ml1b3}2`5gu989r)s zY8LDdJsBT#OB1Fh6ipl*csw8;N>Cs{n0bIo6iiC-%>n}l%p?xfDYX%5>M}$SAd|uouSA?*HWy11Ta>#(l2Cv++ zP4%kxRu9geziby9DB1s)^Ans@kjxZ~p6`6E$@o7%d9Ne@WIJF7^qM=y^sSgT#^=dDd`pt~WQ ze7F=9QJOBrrx?)jZ0ty=ns)f8`^l5spTXNW$&fV4A)~@z?xIIVa10%QphqZ)tLYM0 zXFab>`leid@28%6fE}NN!c-=`NkP#X>waZ_Zc>OSs8D1L1etpl65KE(z*C}hB(NtI z8ewG^0}xZbOXSn*`s|GoHzNe08b;)QcZ(n3H@h3jrPBaTurUj@{5j&Xy=koXPru&6 z(QZUdG?wFY$_5j%va()j;e!JKG!ef)X&!_{$rll_T9jYWy#3AMp|Q3vh^Sga1QH;C zyzdl<6(_a}vgVbqO~i6)&P$&y-yD-6I@lR6Q%%!042Zbn32ku`u1QWFv; zx2uJ?2{53yPGzMe8|9rZ8ri`?na21*a6nR4##I4(?78|4cQKhjo?rmPt3+wRsun;y zFsa$qMkM_k8Cy#BXt&m5ICELq;0=Egr(+43+m0AAuX=Lkc}aZ^NZIHQLOM9iszfPQ zj8#3!jJNcd;UJ+={__`UO!R(+Ew~&nb{ie@6X_1d3c@lk!Tq5T*LAo46w&tw$88xz zfuxuB@=Zl&%~wMiO#*?M<~_<1nW-XFxv4^;>3sw766E^#XtQKZXFvILp1a2HP7HDj*9&%Xfem`A&#*Dq z3WHlj(Ce&;+bW*8)$QM*-Ualsl^DOI1T`N_a zre;D#-$A?}9EgD-(umyaj#fvTv6YnsC{{C>G=uub$oKb)F=7!p-fuj59wXhw^u`>@ z0M4>$vqr;V>p~O(aEkNeeGegLjwJip?+sh|s~9qC@) zS`miCYNV*&YE2B_U!A!Q%sq^_Q&vNN7}mW>7(@dG)z3LYgPIQb)8orsOBIi_DzVvYB zx#V~(Fjz;?im!KPwKXt=dt%AbuCHsu4<+Fry8z{q2!%I8JS055kmCcQ5n;wmK$J7! zbNOP#ulU*g8qImX0rHK4%XAeiNk)5iX$fn>z?yddD%y?O%fWIP zQd&tLIM|6<^Qf2CQ@^6+;aGn{%liXab6R6Z&ZgP2{-VSGpu z{yO3zFhGe?AzylA{?S74Vh?&YTCoz~s8y^k7)LGn#>2hx>g%0^G}~o>(un0#JW;b~ z@^b0anH~cYP&c%7d}JPQ9agtW7{68sLF=Ww>r*yBgv}`<1l$2hDO|bvAQZlT5!U<( zkV^f)M*F}PcZ_HEm5 z=7ZO5i)wI069VQftvC@Nnk%1!tp*%XIi%DagLNm{6B(i(JNv(ENdV7NOYm!ObB&@F zX(8>om3_^Vp=rK!U}9rlmszW~awJ@gSu(}ma`gzH1GYn?Z7%ANu$26Z-wrJ}ny;cnmcd$_cwA3NQS}5dcF$XeYu?S&&7Xdx`Q@qV0@*xy{;g z_p9Dx4rl?WSWT@T=O3Ud%)pE+oTFQ7HDn1KTTm*m{zh2PB_Lq+r_EYlA=rIXVfNwG zhPSuRdg1%kH6MkNmlb<~+yM?Xx@YqJ;)`M8k6OrO*Eb&f*S~W*W+)Rah#}*4Hmu$X zMzpQ@@SOw?J)4sDhCqy&wBG`dOC z<&}1Z2%On{2W`v2NM_fUs?A&8xw;T9830%PFl!h#2*}`zfms)j&4A#EyCYq#9Qe!+ zjr#>EKY5RW2JK)!?2NI_H?^-OYq>MMOO=7!=OQEjD*GM!Z7FT0GceI-GkRiTD3A~1wTa^*Q81qg+kq@wvm~O{T z+j`w(gv>^vxiXApk{(Zze$6bMhAa0-6>wp!P7BN$Mjys!RzaT4Q4av{S*kalMSZQC z#2?M#fe62kojf9ej$#x20fCDKller}r0b1~!L(2$IYb4SBiM=V4Ms-k+1n2Xjm;sD zo5&|es_U;hLRz=YkhV0IL<~jWCAVJ*n0f9;7WU{DVpqsER1*)`oPTw?3O(5Vts149 zKz&QYuZY~Y87-P&dlHOnx&R>}Da>{n;UW=~5l>M~D#_n>h`ObsU4ajQ8;uhwZvMk( zgo@>nKfx^SgSjH)2D24#G>(weev`PV2&iHij8sa)R!#TrQJONoTVvHwpZ((f=bQ^s zv@1Xl;bq15$GPAWT%^%KU@IcEy_44SyG@kk`h~&knEUAoRv#;!{1_a{C<|!m)n5w2 zr7iedzg$yPnIPz`COD)7J*MBbq+EsJ^?mE3G z+#AMYd~TZWz=Ym_SWyZnbBDGL+KNDH=yA?zrfH+&38=%1jiE)zFRMh#-hR&!LF`&8 zcX8rhl?QRVF7#;G1;lxBpy{I%{+@JXiii}h)!~V$gg3+p#pfyhdXeGi2t?sQ-1arT z=SIxEN_tEJ=wV_84YkxkJKuP`%IKH7U;nIKyeqAW<7f1KQ?oCLTtGNL2UliicX+W> z(WrZz+1QrP+sf`DV^t%*DXtq$FOe;?Ei=9^iNo7QRFX%+uIHTUXUX7Jso8M1pcRUZ zhTgF1ey_h9YM6aFHjf8tS8+q3g+@6o6FYm=>=(n|eDlwC6aqHGB>#@IPuP6ml{(@E z<~Ek{ZL`NFw9^bz{X~yQD6Jm`56v{k-(H{Tw&`Z8Vr_##VaWW|_{{F27+q8G!=tmv z)6-Tn&+}`X6uDo0DX9r{@x*eK5hdvX*2c)Zn5TNe&nLKvD~Eh3gSbys1a$$)ZUeNt z#3cVr(&3&SAFuE6P0^Qm=JG`lj$r|VlOF|bt3uhe@+m@b3)10mG&^{QH@5(@>IEil z+EpIO=BA}U5seZ~0n+Mc#^gq%gemjrGypGMSqWHg@E9&IOP2d??hzt^ikPY7ogU^g z^n8NT1WRU=S(V5k7nRy5M0`w!-q zR{t@dIz@DUQM524SS&?4O-Y?(gn~b%VaQZdM{Y~Y-D;zrwZ3d3w3FLnFyj@Cvec6W~pQgX9$Lp$fx@@FASv~$=+XZS{S^pb8<l1_NBu+YD(1q zXh%(@CkHl0xVW-M4LD6esS@N)szEyWqI*Vl$pyDtk9+B6ZyfB)pc?@G@UQ?nHAW8m zaOGW%t*N@;NKzorY^sQm86TlDbTyAmjEfXHP}vR^GF z_#PbMd`a9fzXu$x2ZH6G_vXmi7fW>27u=kx2Xaut-w1R=e#QpYHeTSA?bnt2`8#i? zsl!b8`E4n9Fv)`%!QuEouJFrU5@Z_*com@HRAV<-^Umno)B!tm*vCRnK3#9X^<1Pa z$=HOS-iMEL8b1lVIc>yv@v?42xiMsWTZ}`XI0mLU@oYkZV#5*3OFfvr^E-8YYOk>6 z@#BF9*jv;;DCb;|KTe0A?Ijj1=x7(n4Ww<4zhmcUHj~(^xmdK;Z{dB!`<|qY-sX9( z7dS_Qqxg8t+-yiV?%^L{Teu9k06{r>1r(Vp_IG7P}yHiQe%;NpzS~rnOIeVvD_5G_)`;Uv|33)l_-ZK9j zb}?b<@aPG4cW0-P(`1^k^1B${2-WkJR-?C3%Snp1r72ejK&dQW`By45Qx@YRla@_W z=V^Zu3mPqIK7)(sW^0Beyv7}LHx5a|;GpO~RxA4xr1udgO1a_vI1anC!QCG#$}EXA zfII6el(iNLPhQ?Hlk%1Tb#vUMR1wf-X>4GCdlC0Z0lA~6Au)8Pp_Nzzv(+O8;6^eMKqBJ&C<4*VjS+Ys%I=He=>%FhaM?LbhtOJyFnO zOm=GTqi_d8zd-$vHnR>mN1b=Qq&w+`C=#)lmq-pcRE9dKng2ye?+zLR*MP(jO%OaOYoqCH_Ua z4bIo+bs!&A&+nJYt7CN$w32dHnSO${up&WjrqRIh@9$*N*6h3v)J$#>n5_9} z?GeAeyE{SvAKLtf#D}!{i1W-=nz#J;CVNC%|6?qkuz3Nn`8~5LbJBGJk8#vDT$_4FH|qz?L={tXOF4ffnu;DLjcwZ5W1uk zKZIQLC)vM$lgTdG$p35t?7xV>StfMp$?)Lgs@`%tGnvp;nV5KZtX9mlgyJfo5QlpQ zVZ&q@@;fV_$B>XQp`Mi@JFgHJunWq1mzpfan@2{rPI%geiQGxfrLHp}ft`UxeA2X~ znagbsPAUX4Ob(8T`%vRs8#FU?5!2`LJY{`YO(5ykjsoZ#ng_I3$~J&6U4ZDH9_1yv zf=hw7?OmBUPkQ)9gw;~Cqkpe)|2q$c2VjP`;SH=K{$MI2pR9bvpA6Pn)*uY51pZ0z?!NJS`1tjTAPi> zLxwR+)<6RRl>;Dv+<-1#d$*tE7Nk!0s2DFM;DsuqBi!8^(9TAe&`5Mrqc`94s3CO` zRYbT89g|Kg$ffRsjWWojiHS8z7a6QofoP?A%(iS3!A{;_!uXT^gj#?Mz65CZ4uF}L z0wXhsWTO{`y|NY#QrIDo{!KFsWGm>ohrsrPSI=HRZoch-xd834kvFnqE?X3B-1cH1o| z_oGyUbxzB?=}a>Z!n&0XLbgnx=f%rZpwPM4rpztJ?+tcT6oIPOCZz>`TpEU?{~^2) zLNT$0|0r|7rWvu+L0hYct1tVUgF$8fyooBIZ6v{{;yWg$5ovhu*(5o+v(Phj5ahlA zXJ>lV+cjG}FCLMd*!!psG*&hb14$#0bj+Tj%1Ktz{(~o2Axh#4*?EJ!wfmOi3E+B- zkZVL696XBBNq0?IIsp`^L^P4(L;-lvU^M8RC6JTTb@#Ne#N6b6xd1Q)PrK*1KrVmO5{p*6Lx-!M$QRm$RY4%AA$m)@Qqyl}GjNfV-Uj%^A3 zJ&>YGi05zM-64<$x|Ga|LVmYIh3-_Vwt6K#LG^V5mbZZW_ixoVS=1R}xDIzPV}Rf) zBgoKh0xh4?4TmC72g^%Sek&6PUS-u>mMxOAWD8x0t9D6)e$|{XZ3qzb<1`Ui;(b@Z z8Tv7p(OB2m2P2K6YV$^w2_K2^#Jt6iC5I$nR!Wg@2-KhfV=M#yy;Q{Ij`Xzuxc3=C zR*uj^^X${7f^`f$XBa;z;ZsB>zCDan`n-F!mqTjk;H?=E>?lrubrc|Jz`ySu0(`+P zV7+H6^hXIO&1!DxrSPGbK=F{hW4tV9mUiwr+)H`Dc{Pj#>SCj-Vqt4&Xg+0Yvz*Py ztui^SU_5ej!`tLx?8&^~4xUiMz~dwHrq6qYXJ!aVZouI2@gs2Ok|!kp^|y>FA}Y;E z3u_5o4i*>K+1a02fXaa>6_&*6?_Qe77PR&QWFdW8Kui4PesAwyf$I@7AUSb?jcQ~N zAQ^Cz{x$*3H%46_V23||+C-d_m)Be{rl&-3_+j$xJE%CoX{oOLc?H@%-)KxqrBPn- zISgF)P7Zv_8!3Bk_BHfZ-L&{+2GmU5mP&x1^Z=!(it&gK?houhSJmDA^EqS-6qq&h zYOXg=J|o>b7rZUjOyp*nJ~<>d9>q;=pA@fk>|HTN)}*2x9=;G^Zp(-p^}i#nnhLdqF#kRxRl z-TvHiYbAGhskb?s*5UIi)1<#nG!HJclAK>&+=&%^T51XAgMi4_GS0Qb#{i) z8Vtp=NyH;v`QVZGg7?z|I0hah*rn>3iNPFKfR0X2kt04d2(sWJNtkk$(Ii%}d!EH7 zEuTQ0tJ3@d!v%I{4tBdFj>qN4cj~Yp*U=-j|2!e|mUHqvG=Qw35o%P2Q_}Vg@(mt3uG*6ypLgO1~QUB{<5w+ZE#us z_G@%{x`n(gitoPD{O7tg`kuQ>911sAr(gBDpSl?vcZ2_dK+b6}L(>PEHXrEJw5cz; z=+$N5FC5xQ&wgfI;gdWHTQ~k^qZYi`ECwub3OsFeIVxN~G<3jX@)F@v*lg z`(*2lg>qXtSOPm#s6}Qv<%4*2bgRFJn6qD-)Xl__wXERcc)KWiW|z z)Brw)GKEC3p!m|LWx3i>h2skZy5=&W^0>(cy4GYpzQ4{PdOx`5`=I`Cr8P#Ju{c@= z6c1VAiK2@%LTMOh==COvP5I%WcpkEI;1_q>A`r5~nhq%>L9adR51&c<-iJV(7(`bE zgC!G@Fpg5@eVqy?a(LnD<*al_Lkw&d3@Zjl-zCSmN0Qt2)y@O6rRJN5+8n+K zxM$RAQSJr^CkC)hVN?&b2EC`N{)&BH*#DvHE5o9Ux^|zT4Prnf1sp^Xqyz*-N(V$x z$)Q6eB?Y8w1d;A;B?JZ;N;(zklJ1c1MjF07zVCOg^W&VkE`BkypB-zjxYxbbb4(LJ z(Bvk;@k^n>ma&L6?Iv!rUaO_~1iv+orC1vw1(sH{K>0bpB;y0tG)3HmqN!_1Hej+M zL08eoC}MBBO+G|CPfB#o99_%k6je*1||MMFn`nj2pG$OU(^PGCy-FkfZXYap-;&l)Cx(* ztqPj$&Mp)};XSlXXru}OLLD36&1HU`DA!ZV#|wZEL|TzPIB~r0#2s2R8H*AocLW@= zUz;B|O!f#Ex(d0Mr1U*Shh3>@2bXWw0PCdomnmQj!#5}-w7%;whIs?c(}8jBKhcll z3Rv=`@{O50&}kp--L?UXCO_DV&QwX;qy<96u_zn>=9)ZG4o?K&iX-4mqPuo#rC0;` zI#hSd=nKCc8ew`lyf}4)O4!$20D~RKA4j+hG8TWB^SahyNKfg2BgjpY32La$(8KTH z?eSyBTr7w8Dd4!FWL#ZW-a_5<%286R=6hF_dWBz|O2cbZkYX#&If)HeKR=S!V7wgg zz(u@P#j|fYgENd7hW({w9(pM8y9kqVtM+w$H6*ehrxHGTLG3Vshh2l|(tRO(^f`I_ zGP^7H%vVDpHyOblu^~%mmbCysKZjRd=g*hv z4}m*`+em*pZxL9b#n?mR49o1a72jcc2A;{{FE@8c&}XpfT=jz-Rs;tjZcMw0emjhl zrr}(JMU%>b(Yfooy+0MfekiVCh2i9~b6)o+9V&Q_0=Oh?5(Moin+5hyBbdL&B_YM{ z@?YFO=9EZBKddd@ZSwTReeWIad-VrrBG9ilg-wp3hMp*-*XQE}7C}KSr*yM|%k@|m zzuG=~8f%g&(0axV7>4K{O~G;(giBOSOXKhdiuP)Sf`Wp~GbamWm?cxwdYk0rA?vIE zzKlC7e?JYfmUxN#noG4KTEQya6k7L6x9Z%cPU-9UF+B%Zt)WW6wFJ;LuCOvw#7Q1n zn&ZFv45?y{TlKeegSR5+0R;Qpq(yjJd`7ZB>BQ;F|6TyDsmoQMZ4=JKT=w|}ZT%Q2 zj-1^Yc~qrf$fmuJ8Z_!KL=JP)MvAXha+Ue&fZCb6;81-&m#M|##|`)O*(-^SF;JZw zofn(jY1SAVbcK$>FiC$Zb50t*`TAu?feAb*aJI`Op5{Zfn#a9FvFd{~#KYaR=c1xI z6UXn=ODN#c_+UvgDus;o#0d$Mv%XWBK{CQmE&9Id@UhY7dCH*3h`j!D z5&9*ODzAWUy?F@_Boqjynp>SMtSElg3^OkF(#VE z32P2K&gSq`4NjUIaXt&_sRdL!vqm)Xnpabk4{Dm5lNx z&{^hU=BKKib#WkaeeQZg_)eX+c!(v!0*}R4jD_~*tAkH;@!^VGvw(GY^WDUtE6kEm zU~yC$BaNEZ!?f5--$A_bP>}JgW!C2KIvzUkeuS#l9~VA-UtSXD=hsAuJ1eKj@7;Ji zRpU2hU`uw0hutje-||y!t!vLZ5(XIY3*LnlD?${6bML}C&Q3PP>uydt`1_gBfy-bT zK{qu-9{5>~I{#s0RPvpS?%bLA31&5^e3A{#GVTh_DczuOAH@A%Znq_n=?G!{lfNy| zKGk@j>lf}Y(}Ee4lbfc!TT<>HlcTczS|OKMl5;y$Jjn{ui+N$}ydyqV3t`GMvj&IW zo16@#(o=3)h9~R3L_fMR4SFR1!{Mq!W1CJlYc^$CF`D}zOmLs`C$Nrm@${uWKIuaLK3FDV< z?N;8=x)(F7hFZv3*?@5>NI{>e!rCjV-0vh?RYVA-vmsn?O7L>eL~?~NiJ|*c<^cjB z7S@s7HUW99eYAYrUM31ZLxd%dWdyvKYLLfw>DpUXJ^;~Ee+-wL9>+Q7O$5dRTx9Au z?J=1=Qt3bLVwPYE%mk8p<$PtVC&kC#R=GV8sinr933aI?VtA%EAiwDY#ExWlqKng` zWX(e3ml3%}RB+M{SEPE?;rLrOpxK|?hQd^Lm?#q;AAR(8TyvVy#x4tSPpqfND z{R-mz$$g8N>Nexd-kuYW(f!0yU{k}7{rE@~r#vgFhD(C$6(LpD6DA5cif}S8xG4d1 z$W~*w*q1)4S3+E?$Cqx}-oTCa%T@pwKKKYg_>`a2yJ0X_cwf$wf;OBm{guZ%sr z^(@g_R80Nih~sVS9lDrK8=3g5PmK@%Y6As4_#ya*H|HQ@#)lJ9 z!NNyVH%q@9w-M*RVnxv7fr&Vi3JC}eE2tKB&uo38fcH><$|yxEpA`MOO&`~vjI#fw z`y4(9L^jfi$e+FJ&jQOlJsAUs;au_5>!%hKW^|o&pWl=LTWAMFnn+07l=jfAwn5)} zU8uj-M@&q6>Bb5T1j)vhH8=68y|2i7N!0*6^2>6KqkAH&61Pks4 z^!V{ntw07|uU#GaMssaW@SMcf5dU#g3>tSKH%KV-Yq;rq`4>rtszJ;bw=Jg5iNRl1 z+O<2BQUZ^tYibgACnw{!x6Wb%doSi%H<1F5sCep5g6|Ky_=ATA0Wp3#bJ)dhb<9kLI3kVX7l>v3nwpMY)-u=pqOFmjzK(u|H1uD6vk6dZ5cw4hMRx?#)KdSZ7nF`GW=?Z>kSY^E%sVW?5Zb# zbPIeZQ>giQ63OcnObS^G8R}jjaxNw$r164X%Cq#w#Y40PC`uGA_}Oie`p_<7U#rx@ z9(IITEct$|>UQ&6vFp5Q*(*6{u`dDnS$#QGVJAejK(>5gpv}rXhY_T~>F$T=J~ZQP zFB6sdrpd|5($2(ut}bLM<8c?k1gDo{rPZo|&l<2)*7(BxyPBc*6rJBC`S`+)AEHE+ zsk1#rr`!1pbwryuAZ{;?#)`BSeP(5u;2Tm?_EaMCGIP?0b~F3CmLz+d)&|H zp^0D1W9Sa_PHL|yg{i`RcR@8@8>OzgOA{RKQ&VG4Y&H6Rf`t2q95~NPU237MzC69V z9zOXd8vdZBfe>v6`$lXSzPNtKRPe2g@eIU`z~u|33$a_i%Ch?$6%Tap<2scABiD_G z>$QUB5u)?o*sfO@G8?3stL)1yzh9{gFEtqJ41^`kIOli=s81Fguhc0KT%=#735)sk z>8?<|R_r*c>k-ffz&ABZ0bT*U-!IfYK6D@LM)TX+8F)nc1BPSURWSGB#Twfd)2>=D z`!T6G@}}v6kdVPUff@#47AL(z(2pl9al|bT;Fd65jg`uFhnTACz^8m8k(SWkA4R)) za>$N$Ml+GMOhFlyRs4&Y*A=!8176|&z~}M{O8U0k+PP#W>M>vwKv#q0m>Lb&#!#pfv{hwaQKhl9#coN zvtw%q9}UpX62u7E*ZpR1y+RETw!EsGM0i=#vQBX?AOad+Yjnm2w!|VkB(YUaPx(gQ zC&`hk?59%qIL6GbRJjQ}(5=ogn{Y#EK&C1vs{o`6c6I5nDNuh%8W}|nW~&KY&1Fdn z?QD)zf-Pw%G{?-WH)Hy|#5`7Y{H0-H0%dS*em7=iADmiyqs3V1ti0dSEVy&!aqA(2 zL3F7T=~(Om721QW9w}kvFYQWWIs7i2!NC%Ve5x;zhUptF-}=o$!cF*|n+1kuhW)tT zt+lgQV9pR=+3ZO$o&D)kj$MFzN$l(|@!WuRQR^&a|Jd;Zu3txWm}3q2+NEjYrbE5u zCG}Az+>jN#EQ--_Y9<=9-PC+nj&JK+Fi2p&NO~4n>8uVGdoL7DF=@a&f)BPBeetOKD&6p54N& zRXw-DRYv%c7m0E13>o|kv-&mVO4S1d0;p_`Na0sAqEG^A{~9!=GC$VCUfVZ0S@d9S z=JLF7XKZ%cez;$CX4Jlx>I?#2BW;+45?!U(Po?{{2tAZQGU3eyVyh1Q3piQR3WLFD zO&#$xF9W0*#4atF0CrZrGN#gLy!>r@uDy?OdxE&~tz$-t@iph1?&zZYHQ7J43AhO?vIcBAQCe&LnR+wc0D+iOL;Xt9&Z@7GCkoUaM9O>mk=_lMsrE=79;rM?QbY z*#eR(ZUn{>40(N|7#5d>$-*B7y)d64Y~`Lc&v<^+(Ygyz7%Hfin&4ckZ#mPG(|XE( z9`k5mS5uzDq%LzoxU(5=;WA2;x;_$fT=M>rJq^e7_4`N_S8zuSkFOIyX8tV?b7DZ( z;T3%^E5lmuE|}|)Rn;oRi;9SqR55hJOn0jXohnYs)_?gzI^nJTf|jH2bt=ctVl@p6 zPV+E3&cGTFc#`7Ph$TB%ob+XNh5cfuNtxi;hX&2kJ_94=!;Ej=jo2 zzTd#=oPW?Nz2}}Yes(ZHA;guYXFJg!VSAv*U8p|u+F;KXT7>N+nH8`nr#Og&b$rxe zfTP5TZgE6Zz}s!RD8ijvCV2;`dl+0@<_0?xwQ34-Ib&y}3#T zhE&uaP~eUcyy!%Pa{@VOA%b%JsraWbzfQJ6P0VYFG{shIP2^DqrUSo#2d#%$DH1(M za+vyuO00777p@eNsk*9nR|O-$N%^#>GR6%MnV&??hxGW5R0 z@1^vAt>Nn0&WYQA0bpjOf7x7TBt_0(j$sfTROTON9XwARcH@o*mcxVHi&dv=pXZM% zztEepS0b-tTy)!qe&%IX|JMpgfM#bAex*?Uy}XoxM*nO|ph+fivAjDoGa+yO=BGkW z{IJoI-19ChR%+}gmghxZR(I<7@7F2#a~|F1XDY+{&`5;>I%V29kJwj74#;u4vH#%} zsrO>&8;J7dXf=AxrsG0c$r>evQ}9WBGopu!KE*B%+masVb#Feeg8C3CT@Fp(Z6wAS9hWk+Z*AH$n}x zp9-L9oAREOxv8VqGFG`TJ36R)44ihFJM+S^OxY{qnH>J_E9bu!td0Z^JGgP7MSyzR z)u*8_CXHtsc z!T8cAoK%q!-NJ(e{vm0$eCS;W37vu*8LgHqZ~{MbY``yt*iW#9`s#E`xC`NVG|@6n zfMD*?nhVGCsV84AaxtmYKT;qMmN)0!|G>HjpwSh6Z`_0YuA-(?&NtT$@8}rZV96sT zJ@z)M>v{W7xU2dShAM?{i=o@RhGor#XjXU|l*HG)%F?3ws3XUgz<)=h&ZxaK6#tkI z;`_gp{#>sgJMyZGLD=lQaZZxGH{sI;=wHY=N$BpYO75W9Uy;yEd{FIM04A6W?_X^y zolV6L+p5kXQ;TOBPkPvTOry8<=ozvWdMysGVBpnzKf!R0vr#G_xHItm|0#S94d5w$ z>*}J>9e4LobWr@cM31U?1VYQ39mk&{b!b{H%KVZ5pe0UTmC_a~5Hql^4|k&r!$;2D zl&HIQKC1c;T@tif=m@+ml}?&Uu*VNg5=`Gk={&X?|31Gu$mZyyqc@)jOeECVK^9dfhL`mQzre%KgnC9Rg8-}3aU_+Ku7{BVg%XogLa<)+%eEp!8N z?gtA=ZPKf(b6N)@q>9T`8Ns$9N;~9x7}^fWt4r+&Nd`n>uk;PmdYV&AUxHu|{!*xy z1k-(@G6t%o;hw^|@B;G=-`QV_xic3Cc%jp3u-871^EM&$4DT?L?+|gPhHBseQAR>U zkf!R8FEWF!o(~!fTzXkkvoAia$-@f#LmE6=Dzxce_%i6>zEyUK>eNxCy_Xp0CdvFF zd{??yGD+niI?x941Vp$1;u+3lT(7Wd$JZZ{LN+#|Rq&71E|cMDv*R(;vm%Oq*^e<} zzS}!vf-Rft*u3Pk(>6-Fv&rKeP-ic2?t$7Cd*=W+%aHHvemO^uhBCpDggQ-j?Kh0V#L+{KG_ zPikXcWo`Uqkp$qb8Uw2oi8_LV1YgOgVEs@MeSTTu9!bZ!_e2+K)!(jP zq0sSN$Qpl3O(N#+-@y{pG0&1&WX+oEszdk(lTh8KFdx6_K6@=@PAwbOu$nJcxAHKl zudaLu#w1`mU-I)%R^NtYRqBtDZ$8a|1a(S2)>j{)Sf9C0lJb1i z5Q3A2z;f_}yS&o9>rb!M6BtlHmA~wjW7lh60_VxS%ps#IKKpP+Cn898AawP zmOR3Yyq@%H&hR}<8pCgXQJ(!`+rbA)r8nvreqTz7eZ;n=X{LBDMtGREhOyomp`OJt z~3Uc9NW~%P+QT z)qBcrjl9R{@s(uMO)rtd*{0nrw&qx|7Fq(O#8+BEPgGYXb)->3#FFpsJ*8Bf=hLU* zjTv!p`-1uI&k`{46XO>m^!4EOn3bC>G6p~HrkA|`+T(hAj{b8+2eaiWfF% zWWOK<*i$4g`+{pr4|j72TcrMNi3Uk@Yn9{i7)_(G?K-?T{%L)}JzuIjM7x-I%8L&c zBIlr90z^rL`a}1x4?D~xqs1N#?~eR=;I25p$Ui*(6u}{$BFRzZY!AZT4R{##rQUkzc#^O)V*i zN{;JtYg%2Sex~oP${5WF@7`7){CEN-`RdmmV3tVn;`LJ6Oh4;XRgw`=z>0Q*p*5x8 zq!nkboOhfIq97M42QdWqfMGKSL555Q?%usR)Z>z8A@eiHLZ;F%)pp<+(%V3SgQ^+y z>0UWRA)I)QJ+{fD2<#DuTe_|~Gf`h2(|_JHW2KfXBdPSNufCJ4d#W&OPyOsZt5=oE z{CELpjy=Lfw|17r|&{q4xYNyVrVsJ zf-oDC_KKjGKYq#J>T~2Dmx){J(VS{bHxVG7a;GI6NXz%wxA~?~ylfvjH1zEEZ;Hl` zmlR*bDfm8*Tq$T~B8?N~JK4NMwX!vJQNy#c>MQz3fE{(#cIi&iR%1`UcoY~+EO4l6 zAm>uq)VYww=y&|o<9>ZwA*DyJmMkiV;2gQZMl7FP}JIPkg4OtLB}3iz6r|7 z5lKw-^e{?QzvMN|4u2k$b_o?N65L}Ke&)kJC;H1&;RL}DvU6Uo(#aCJjQ3k`=|OnQ zoK0)sTegGrsH0dn^|6{kUh2c; z3nRXWAtCTuhnDU8y``T<@1!1cF4PF#Hl_OUmfu8I;4XN2_QVAXW2Z)++us`-FE(Vv zMRGUF@6gK@;`Pd$(~q9<}BGZH3S>0-ByK!zDpBPj6&Bz2WV>F4AjYek(N@ zfQx_jRzr?JZ(LL8K}3M1?br`Fww_(jzPSOO=$!J3crlh9bVQTlS7FU>;=?x+se#8;cA57Atb6iGK6xCAZA^>hA+$rHQYQycSMSMD%K z1e1>Bu>T^1xZDV6KbtcH7D$0Xl#&E}s~*+k8abco?TFL|khNXXf{>3630zT~<1Wj5 zMEB$HFP}zaM}$zRN=!V04ZC0S@CslQDN-QknA;2B{b-&06hD$B(Yp=UkACd;0D2xJ zmq_xrY@N{87dH$oxOYqT+8|DYQm8;*Y+sVrU9y%-M7;PyJ-GF|& zfyvKF?$QXVRdn{@d1(qlNGGP7Kg}cmicI_qW0a20#0}_B&0ybE1!c`?!yE{$Y0Zc& z?N>sNRoci#$Fv4V9cH=_F5LBK0Y4PPv9qgm%gng*I5o1&`eHZXhRFHpPlYj%J_$bo zSrd<(s*@v{XJeZnr&4EhdWcUxTw=anr|WT4xaf9~sgrJ5+?@`|o;geJF<1A;`w5Q?ylV8Z`+Fj zEwPXQ?9k&DLeI+DdYRUJ3_0HbdPoRlS5{6wkhlZ*$M#CYB?{*Y9nXRP9E~`x`STMF zWw%|H5c>@vPVwW(*!{14Ia*orsV)>OyRho+gMDX!zgOd2*L3UD?8o3#OcikP8y={! zsNRhRaS)y zHvnxfQOojw)Q&7Wb89w-81b~~kWTf@R8d@d8&92ZY5a{^v6jLpP1q4eSTNH6yswlh zhmL>7q40#2<2p!b&@1UoV5y;%l@teG(K}Zh zz~Hk+N8mye@VFzU9mm`g%{QVeu=A9_Qub8zm~Lv~2I@59KH8y19s%Z5n%j3eZ)F^R zg@5gd>AR3V0X2dXBw{D}$pP0quNF7Z23dd&j_1Ncan0>-_Ec_zg^Mg) zu3gSk0lYKmoGQx2l|dIbK(R@4R!kKW0{px!kk3>(+EGZ5jlKcvqx%d3sNLjym*pwx zQJD+gL^J14Beo;om%px`Nj^u`adfaFx#W3E-gIVQAP zF^b;cT?q-(%95$O?RQI`haE9s;w$TUuHJsSxd96{vy~U~!rOCu%e!}cb(jaZakEdv ze1|!?8qEI02kN1SG3%%Xii zn<#UElhI`IW5H_rC{C6LWr)z+G(EdNu^*v!*=mO0=~7;Xd}Hej#^$_V%Q6C`L!`lB zg7;Ru4A}ci$aa*p^3gt|&rNE0H!J%AZVr+vJwz=Zf`hj~kagvc8B}Kjun(Hz9yQ;Q zj5M(C%Q!5)iZC-#Wq!9d|EjEj8Bm%kVecR9KZ7o|+_C=GaET{XJTN<=sH3#aRdEZEp2w~Zw%Wt{iu=HiN%Qib?pjL=f9~<=BN8P>{u=eH zIpUdYkB8vZ;`y0MAqxPGU{&@_a@#D?9(h%+oZghwLCjWwJQ_X*TQeFP3%OJkQP@(H zFhw?f4ds@n;;zyMp1Hi&`x4A`40h(?crdsK9$I~IzRU0v8_K~9v_Ex+z4f68`i@lj zZ6#Xd+%9w;_o_@xyUhb*8OIfS{`nd~&&Y@o$KI-l12P34D=d-<}{7ZTRVcyAJVeB?1Pk^S?(H>F%lp%R}&skCN46>JqClmhZ;AJOYd zqnE;bYqCudEMd7S+d-?PlWHrq4=gLWgE^Rt+cU-4{gGtQoCgsb{Z%l{V82!FNocxo z&Crs=7l(MO*xY8(Bm6wSRD2zrh|NSJ!{hwSqk+#Eau%**;zg2gt!}Lyv%BG@`DR2g zd`lAhTAQf}iG{Yx-n+Ev%&!!C#=X3y3_mdDELHQ4V1lMUSSXmeH5DcByjGwe!zssK zLH^$;ew4G&UYr-0=h%;&Of6TSx!bU&x=d$)|MuDV--G*Iy3OAbA*}JXwBScrOCizD z&jJpBd)DJuu|b-M+Lj|Lj!xMmR)Y>>7b`61H?*iZL1rV56r8EEP&EK1QyH zvcd93-jqXU^m2#BR6V98u$|hG;#uVe?hMt&H?eC5SH(EIr0Or%jh_u2R}2Pwb-;FtrvEmxO!(!(YF90rI~RJ6m;#8Ct9F*9d_Ma3R* zCQAz=G;IT~n6R0-Dr`AGPRIc>IC0H^>x_u3xHHMQ=N8Cg8)$5c6t5B} znk+`tRa&)cNV50__~l~6%hnGu>i0aJ43{YC1L@0_Q9VR!kS#s?iOm>YuQ@RJ3X3CW z8Njit09Krgc}zl(_3+i{ogUM(K+KPIL>wpLj*pHO+wz))bCbPRR{(M^4>3dUtvBl6 z7H!1!SZr;ST^y&T1SCPPEV6(`N*o|AxVoH^O71r`vCac*HxwtB`_OpI-?-gOm&?ms zCG!>a1?gud3K)eS3zb81basvC{&zq(GYWe60;wH79d4lzz)a&{DIfqYHAez2n?$@- z&DYjC$|_*cWO6_eZVbOSQDn3%r#}RieeeuX#PqunA|vjH{2;&D%4k!H&ug4+YLOtD zFK^^KxyKG)ru-ob5Nr@BJ_ES)KWo;Qfu4j-yS>}4hUesO*3e2M^T~kV5Au`A;+4)vKe5CR;Ks@~P4hpsG^r1UR6_5NVSk zmb@xv0+diVs%*QXTIsx0f-&?&8StegQ=Ront}K6oW<%y4abxdZuLivd4m!duYKX(@ zk|bJBq$`v7lj5d2-~k||vH~8!MXNTwlXq}#BKguh1i&c3%PUx=GaWC_NrmlcpsF`K z-XSidO~Rxb>|-BqIOlDGyfP*LS_ln^bgH+R0TDtTvs$BW3z^n46(jP2X`A+hi-m$! ztPxH=-XmNX&~zci!RB>ycO!e`q5Eu+IaSJX+0mj%1ZM@W`7+L+_5hZtC`&F(w=*Ub$I(EPKOrdF z<7!e5$NBG=1rK>CCu%Le%)UHwKnx5=9L8|mKH$nKUtUyXmEoFYdZWuLvLRVOQ-0EIWY4{?nS#$VWBrsnB{b&GUM=o=gOjolnVZTp3;<2I=^ zJB{?Wa@NbLH?jcL|7v*cH;>6BnMW|eDDy_ySp;N zN*b2TBHnVKkuJ#sxT3Be3jofG%I(r@l6&W$ZRp~1>Pk>$|_#Hp|0yt-!5xVOw)p8rLEihOLV znHNb;w3StQ61SD%0L+_t28n5=m3op)v$B~nKrED!w~B}n;jQj^$`t-DKFQoDwQ{Gx zBwbfU_rb>NPVgTC@)}#TjsT@)v9Vw?E|LLgdFHz$tTJl;v&^p~wR$U3_lvx2aVx;P zL#$Cszj>&8<`MG*A59H)aiEAXV)x_oS`15LFoA_n!e_tT1MkLCd>+go1iblS{h%Z| z2d-!&3QPIp>5UtKsh0se#YGgS0(0zFBfv^If98%H3qIg>B1f~j>(x;@a3P~W#S}a` z2~!FaPT)K@&PnLTKeRV7SvdesF0uk=JX)P6zdwU41f;vks$vQr0+=3U>HJ2t@(L>63dqOmDj;I$LuRN^#~h`$YXxDoqecQvwl}4uBTd!)^N&pNI@BQqqJ2} z8w7igRfZpl&Ho1E5eOcCWeM@|;)=<^=EZB1E1z6K--j*kzEvZBEI$7C=>YHbF75eU z(HpP6Y&O0YygDv6bncz}mJt*4WAxI#IxhMs@<(Qn*4GxQ?}h_oY6ZA1WYf;wb|A@X zBvjEwdrhv^Bvo3exqjVT^cF1LHJ`|p$FP3)=sW+rlMkEo3Pi4?_+wmiXIvwNfUJl# z>MLWPp*Lt6G_)M6-6KUD(tZ|#INO{re9!f08{;?yhBeZ|2dNj%qfNhWqWC5k!}}FN z4&G#o$qtI+4laHYwlq>dE;Ae*6`HEh*yK;;z3Kb=$aFDk?;_&f9u54?I~uHtUD##P z$NJrp^tAm?aDj*sHNk>|#GByYzcyeEWPtu%3~7_R-u~y)V6!BAuBKis)hqPf$mSh5 z*8M2?f>pfxsiIgg$<)VigO+)WN9s4 z`Cr{Rt(Oq!cZ<@tTpZhYXRq3>5%Pw9-8I^}3jZJy)=i3Ps9(Rb&ZBm6)DLgl{C9fo=JakP5Sr$aS3Htl>QVJdQdtyu1yIgQ;P(B6skw%Uo z=V|~ME~vo#Zi?Zx`e=+xB8WLC90ZX9_km%&mZrv}AXNsc@P?zW14uY)IfsOLeJ3|U& z2#3B9Io=^JTE>4g_HCb-(@MFGwQzo!<1Wtw>)Q309)SloGdGLxynJ-rmnbx~ec|T0 z%Gt;PUSzEIvos&?o#&;oteI`tV}Y$7ni?s|ewa8*p}H$!Q`yIMy?}Car79&HfEYYd z0xQmW0G@A`!O_tJrRN<`j8|IRy3I8nj6N^`1Pr>!Wr97!Zn?8>wDy$IS3uD^`}-6j zOKLP}6S51$58>~U2%iNmxgzJx!Cp~@P>J8B3>VL76O(xNo)4g8dt4Dm)qYVs-{=*e z;|wQ=_YuIJ15erTmRG$tY&sM>wzCV4F$|OwP=f|bpXC|)b{%jOHpD@pCN*FY+2dqS z>3hx_@v&EoaEF^de!w3N1aCU6Wpd#18Ft<5egUGJ8nhc>So>oh@RE^cA>Dfp;uv)< zFGuM4dF>a>Py84^4p7l}P8e4ArEL&-|8_ZLJ$<)%h0vPj4gd{VU0oScpm!fJDND{= zcdK0ln7#WSIDoDxX~d6MCEJxyErHy2QW zk$Hi)bqB6;%9}VVu*sFiOcTz4ruG0t3byN7Th|R-E(oTP240ccWr7-$3HBu<_>?Fb za6d5umgtUTK-pk+xcO8u8cFfG@0Wl4CJ+GyTRt+GxF$7!qp%3$LS=>5(@rw#~W+F#!@KYs!3LK@W$>%B^o*f+lbyh8xcPw*^4e}fZPZP$z0d(pE(I1fPNj=7}B0m1rva4jEW*N4Mv*nQ0=upbuhIqQH+sLzpu7P|Ei(!oP2+fam#ZQ^7sSFrrRdv2MYzly4|)$TybMHc?)pRhzE`A`P&msOpsZGAPKY+u(K&ky zwp_tcNQ@P4eS;|$$n!*JeB`&Xb)+nEgJAB2lvH_Y9Yp>V4mxM$uWz9kn6i;7HiP*W z#<6~z~<}_rgi|o`S~rQ(B_Bh%F0#-$zMvo<_rLTH+;*YXnHM(d+a6L zI@PgNvsqB38?%XzhVQH}NWe2o)G_H&KL`9FLyEXmJg4_V+!vNO=H=GPT}Ip^|H-z6 z1`o>tM8CkBNbtdpsa_PD=)xU@heLgDn2fnYVxTM?AQOYQVvoz|F+EQ9KV-;?73Xn! zJ>V;cB{Vq+oEkLmacE=06pxp8Fy95utBWfa?FakMQSNdSOMEFq5qO{V`;~6xqMX?n z0LuhS)^vGqZVFo3a=%CdzXaJ3$YZpp@G!^rU|qOVjh5>4`fou*co~k(8B_J?jdG(I zwAs?Nioj_16kK6J&}-g@5@HW@I{(hw{k(b*(V1i?u zPfQ$&qSIAu(pJA-|04YpzLiSI3V5E3#_0h#9GN=b+H{$DKIz-UFs=CIdVc^rYP*j* z?E2J(PT>#J`p2>ME)VL(=5Fq^a?`dl3@K&eHVngpaLitLIA1yPmSVaXI-hgSNsX@L zX^t2AQ94_Ox5EY3m~&PRwFY?+cKbSg#pr?Rh+qy}aEH1Ca6ukWjqoDJ6$en@3*Y!{ zE;|ux)ahBg@=+Y-<66&VJ@nF6BNC?c1wB3EOUi4tN;)CgjH9 z#rlM0koJIk^Y+w57gobsrr_;tGTn+8;AuepUD++BX|I3^+hys^H%g9}I3?r?77?ZAjh(fdW)G!a`!O{7E~Jh?#K8~ zGlx1uf@951!3O3-`E|QqZI&ZzmYdOQWo*G0OV6t0OSG3F0(oi$Q`<>5BTt1U&V~XT zw=IduHxkU%F5aToo$&1*8^8Ol#0ih_4zYX79M5CpkD4$0v@S+qDRLQLmn1GX$|sHt z*;Vw^B`5Y>=MTLVc!l0ek!aP%!a zN^}%0-N+Glu@6H>ntats$wmraUx{(i?aHz5dv^65h6|~-L!aZZEsNq8f1dpL;Hkbb z?dGwTzEQj1pR;qLIb{9(`Ft%YLuu&Ms~utsSiQ(KM-$_wx(THFSxeE#$i@4i?u56J zML|`mDGU0Ta_0CEjK&UB6No1Gycirbetxrfhu_%YLse{tz~`^FJqZ5p%2d%w9q)*1 z%^oEhdv0RlmGV10)R!a0NkTgp9Z$cjjIxd#?{>9UtM!ta90cnwV?{SgS(e-0*qmm5 z4O|oFK9V#3TiaK+sd+y>lHk^@kmsY2(&xRHc=G2vjqm!a<#=k=A3JKPSxzn2&Z-ZU zuev5a2(C@nVQluiIdUY&oZoF+<|!F5zdN@1e(2zq=fi*no;!>+%D0t|MIDoW?_7D8 zBK&^o$Ls{=Qnn9n6*t6A>+56(V@g6N-THPl^$%NLELhcfZcYEPnE&hMagx<>I!n#U z5*|O1+!-RaZslq5HUD~`kNgXH&skFuvvr}qzA0g|uRQmLnqIh{u+_-WfKyRX*H-DN zyM5OxGnJiwyxf+PAu&F_yv(-!6Y1Eqnc-Ttqlf9t8{GVs{st4;>@UXIL=~+vYdzH1 zUz}ECEKZatSk_h5_0C72F(fjOQo6eKg>Qs-nQ&{_L*q*Js}DaEzOiw;KOWaQER-(O z5RuG(Y-k)F|0zwTt^xDg-p27HX+&gG+_?6&asF+^YZM3;m`u3N_Vn~=)~tHpz%v$$ zMxNMU1D#t^C3u4&Z*1Nm#^XAz>J)niH6sHj1edU!b``-@s*l7o;^VhHBTt#0{}`%3 z7XD(eSRy631?AW-{q}C|+$(HU%rJW9g}EQdQ^fJGZNfoS%g}bVsqjkYTB4@Mo5C1r z?jfrv7m${0!soXV`B&lzzOx+U@MHmA2>nQ03Su3e4{6;kRpQ@!^} zjB_M1qBC_O;b>}(1F!4N7a1rAbq{-yu5I=AGQZ9rtl&N)m6S(MuXn|8NAne*R-J*- z;Gnf}mgox=rF&f1Lkr{GjoPM;(8fZhV8oOb`!(I^&XR@rk@b!3=2)?qD?SI;sJKYf ze*(>VZ45=v_;~-hhbh0`CT3?8#9!n*2lsh;~=;D17| zQrz~-RjizpoEXj`GejQsY}dM$Dpw}@whxzSeB2sz{4^}KxC*R z(e}o>!VL19rx%@*b)FY5jsKQs+YM;22H8Oh^=z3 z&*!Q*Zvqwp?zh&xQUYdH*jmE43HiYRtjbDGK7Q46rRF=HRCtqb&CEFLJ!yV3bx7ht z5D7&X1VMN}P9Zb|y97Zj5)yd7U)F3%tFuX8e_q0oWFl88-~88jlTS! z=B_lT=_8JA6v0#w1U!m}af~`bfl-SZz%kYal2UQFl5m7Whd>D$kw7&zger9eIa5In zK~NY7DS?zjZYqLQDg{DJAT>aX$fYpK{~shF(#^Nlso%RFcX!^r-*4Z0yWh5=h&ISl zway+p9KBVoNLT#%XwlbYAxfUk8heErI;X>&@UK4~gpLj<b?rB30yVQOVDaK4^RAV$u=R&Hc314kwC;Ddrtgl*kDzG=v>E zZVXexQ#j>Cx370gn#J0pGPCQY*}waozKhChtlUm3QJ2d2w(XzV2c>O5NDX z%xg4qayWkG@v`R4_2;woY()$Oz3G<-DQqsxzt**#+*X~q@g(Aj`TaFrK4C{{~6^9{CTza||A*?Y6pQjTI5Q2>a1Aqa{001y>5)fel0GNde z4kr${E5oCub0E|6xbm=-k6v_1u zqk7iV&X}c=l)i;P&E;vt@KAxv<%@lNJsJGhJ*p}*qS6@80H7}F(mPpymqaX*Xm#bQ z4^>XCtu-_6VstegWf<~)w@iTi5FL*s<~cCLX?YthKe1Q{5t{%qY}3Gzl`u+Kz?Hr_ zvmS2a&2<>^0jQ>Svz|Bi1qbWZEi7F6Zy9kCJlO9BwXk*c(%Gd|vZmxkaQFj{_x&E{ zKqv{ikJn`*u%wN61uKm}+%6nudi#bA?e6fO-0#i|c3!nvNFV{J-Z^Y*!a=WFD@KCe zhzHye2EU`x6wIE4z_h1G4JY18(Bf~|-P&eYyh{%n9y%`bnWqv=g{{oAW7+f*z&ja& zR9ibE<1tT);%HA8dnoDV2ZziEDI6k%f5oU33$I)he+ z{lh^K(S`#0I%pzp_YBb@p&>M6cphn>YNB7zfe1kFA(in-SyT5(8;Re%NG{I1V4=o>2$-jcVDjo$+j6N& zT2(bSU9?08yj1t-56p|h{kNxgz=m+1$z-xv%GRt*Q?e#ON&=A^VWO40=5R1rZF|e{ ge9k6__Q6Qj@*UsDC%KgQUDK~nNSh($ diff --git a/libs/SdFatBeta20120108/html/_sd_fat_config_8h.html b/libs/SdFatBeta20120108/html/_sd_fat_config_8h.html deleted file mode 100755 index 5ad1916..0000000 --- a/libs/SdFatBeta20120108/html/_sd_fat_config_8h.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdFatConfig.h File Reference - - - - - - -
- -
-
Arduino/libraries/SdFat/SdFatConfig.h File Reference
-
-
- -

configuration definitions -More...

-
#include <stdint.h>
-
-Include dependency graph for SdFatConfig.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - - - - - - - -

-Defines

#define ALLOW_DEPRECATED_FUNCTIONS   1
#define ENDL_CALLS_FLUSH   0
#define FAT12_SUPPORT   0
#define MEGA_SOFT_SPI   1
#define SET_SPI_SS_HIGH   1
#define SPI_SD_INIT_RATE   5
#define USE_CXA_PURE_VIRTUAL   1
#define USE_MULTIPLE_CARDS   0
#define USE_SERIAL_FOR_STD_OUT   0
#define USE_SOFTWARE_SPI   0

-Variables

uint8_t const SOFT_SPI_CS_PIN = 10
uint8_t const SOFT_SPI_MISO_PIN = 12
uint8_t const SOFT_SPI_MOSI_PIN = 11
uint8_t const SOFT_SPI_SCK_PIN = 13
-

Detailed Description

-

configuration definitions

-

Define Documentation

- -
-
- - - - -
#define ALLOW_DEPRECATED_FUNCTIONS   1
-
-
-

Allow use of deprecated functions if ALLOW_DEPRECATED_FUNCTIONS is nonzero

- -
-
- -
-
- - - - -
#define ENDL_CALLS_FLUSH   0
-
-
-

Call flush for endl if ENDL_CALLS_FLUSH is nonzero

-

The standard for iostreams is to call flush. This is very costly for SdFat. Each call to flush causes 2048 bytes of I/O to the SD.

-

SdFat has a single 512 byte buffer for SD I/O so it must write the current data block to the SD, read the directory block from the SD, update the directory entry, write the directory block to the SD and read the data block back into the buffer.

-

The SD flash memory controller is not designed for this many rewrites so performance may be reduced by more than a factor of 100.

-

If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force all data to be written to the SD.

- -
-
- -
-
- - - - -
#define FAT12_SUPPORT   0
-
-
-

Allow FAT12 volumes if FAT12_SUPPORT is nonzero. FAT12 has not been well tested.

- -
-
- -
-
- - - - -
#define MEGA_SOFT_SPI   1
-
-
-

Define MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos. Pins used are SS 10, MOSI 11, MISO 12, and SCK 13.

-

MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used on Mega Arduinos. Software SPI works well with GPS Shield V1.1 but many SD cards will fail with GPS Shield V1.0.

- -
-
- -
-
- - - - -
#define SET_SPI_SS_HIGH   1
-
-
-

Set the SS pin high for hardware SPI. If SS is chip select for another SPI device this will disable that device during the SD init phase.

- -
-
- -
-
- - - - -
#define SPI_SD_INIT_RATE   5
-
-
-

SPI init rate for SD initialization commands. Must be 5 (F_CPU/64) or 6 (F_CPU/128).

- -
-
- -
-
- - - - -
#define USE_CXA_PURE_VIRTUAL   1
-
-
-

The __cxa_pure_virtual function is an error handler that is invoked when a pure virtual function is called.

- -
-
- -
-
- - - - -
#define USE_MULTIPLE_CARDS   0
-
-
-

To use multiple SD cards set USE_MULTIPLE_CARDS nonzero.

-

Using multiple cards costs 400 - 500 bytes of flash.

-

Each card requires about 550 bytes of SRAM so use of a Mega is recommended.

- -
-
- -
-
- - - - -
#define USE_SERIAL_FOR_STD_OUT   0
-
-
-

Set nonzero to use Serial (the HardwareSerial class) for error messages and output from print functions like ls().

-

If USE_SERIAL_FOR_STD_OUT is zero, a small non-interrupt driven class is used to output messages to serial port zero. This allows an alternate Serial library like SerialPort to be used with SdFat.

-

You can redirect stdOut with SdFat::setStdOut(Print* stream) and get the current stream with SdFat::stdOut().

- -
-
- -
-
- - - - -
#define USE_SOFTWARE_SPI   0
-
-
-

Set USE_SOFTWARE_SPI nonzero to always use software SPI.

- -
-
-

Variable Documentation

- -
-
- - - - -
uint8_t const SOFT_SPI_CS_PIN = 10
-
-
-

Software SPI chip select pin for the SD

- -
-
- -
-
- - - - -
uint8_t const SOFT_SPI_MISO_PIN = 12
-
-
-

Software SPI Master In Slave Out pin

- -
-
- -
-
- - - - -
uint8_t const SOFT_SPI_MOSI_PIN = 11
-
-
-

Software SPI Master Out Slave In pin

- -
-
- -
-
- - - - -
uint8_t const SOFT_SPI_SCK_PIN = 13
-
-
-

Software SPI Clock pin

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_fat_config_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_fat_config_8h__dep__incl.png deleted file mode 100755 index 83f7060832466c1a5f593258f1f7f6e6792bc23e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40752 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 diff --git a/libs/SdFatBeta20120108/html/_sd_fat_config_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_fat_config_8h__incl.png deleted file mode 100755 index 7d2ac665153fb493e6cba8e581e45640b07ffafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1576 zcmcIkZ8Q@K7+xvl<|0B^s-cswRJ14`X+D-nAL7sqAzYTQ`B+ktT_tsWbr);Nu4Fb} zG28C!M!1V8!=!z5nPxU5%*Uo(oqNtb_x`v)@B5zjdCqy?AJ32HId7i7pO>bFkp=(& z(1dzJ&aSh3eG=7G*KuUCDr22gBYeCd0OhxS!gy8$0Bq(#A;-_Bl~41Sb$S7YU2`I7 z(v|#sz(nIqlko_TirXw+R`zRGcO!H?=%sfINn6i7B7b*qSdfPAt^*BjI+nV=`WrV@ zUdZ7&UkL1CVc%nMheW+I@-;KCuqh*=u+alh{K*WPt2ThK zW#|BABCnzzUzjre@#B-(Yydp4BQElRSPTfi=dw-SrU8qc3BkVtzN&w zw8>m}A2|6WcED@sjo=+)we!b0xS$9e zLlURe{9XtdBH(G$;w1B_##!PNk)EXWoE$Liz<66b^{fZAn0{2-T-urKZp`OAu#mkR zYPsLC);+3)REu1hVzUX<`h4TXB0>> z$Y9&OqK!&LH3_kxt~ryt)VkIxqtGh5!Gs-guoLe@U;nTo1EkLP1XWgj{*R(%}yn)9{?u91Y?0?$fL zbC9BhuD1|*Y^Sm%$l6axR>1;YudfdB`D!kyK=1oRaM-4BwftSu8#*~ayX<-u&wr$7 zUEzN^=Jdb-tId?uRS=7L?&pPE0@$2qWh*Lo1((5Eu`iC8AAG6 zHs$>U8KD?B90XY6eu9t{mF6x4muA6P`AUnkr4~b4^>AEP|g4$T_AiFD-l1 z=lVd=UwAF1Z3!{Mpcl7VN4kw@ehz*3D`$^=zoRRv4-SRt4uGVp`JUs%zLl$C!vpBG zBW18<=kzn)1@*>uWtj@h(o6v%Dz?=0-mw#DAayzrzb{eHcG0#js(SMdZ4}6}a&B>K zmM_0e5RZ2o;G-?K9&;_;Q}f znt;A^K9H<<+H_gKo`wpYnz}g)$A@C99C-Om3A=tpO?1zWrjJ!5pxv6K!Vs-q+3 wR}^v_4o56(TuZgauI&?-aXtR}wE(xX%8h%}zINcRL#@B9pdNk@vU^zepGlMuNB{r; diff --git a/libs/SdFatBeta20120108/html/_sd_fat_structs_8h.html b/libs/SdFatBeta20120108/html/_sd_fat_structs_8h.html deleted file mode 100755 index 1471306..0000000 --- a/libs/SdFatBeta20120108/html/_sd_fat_structs_8h.html +++ /dev/null @@ -1,658 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdFatStructs.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdFatStructs.h File Reference
-
-
- -

FAT file structures. -More...

-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

struct  directoryEntry
 FAT short directory entry. More...
struct  fat32_boot
 Boot sector for a FAT32 volume. More...
struct  fat32_fsinfo
 FSINFO sector for a FAT32 volume. More...
struct  fat_boot
 Boot sector for a FAT12/FAT16 volume. More...
struct  masterBootRecord
 Master Boot Record. More...
struct  partitionTable
 MBR partition table entry. More...

-Typedefs

typedef struct directoryEntry dir_t
typedef struct fat32_boot fat32_boot_t
typedef struct fat32_fsinfo fat32_fsinfo_t
typedef struct fat_boot fat_boot_t
typedef struct masterBootRecord mbr_t
typedef struct partitionTable part_t

-Functions

static uint8_t DIR_IS_FILE (const dir_t *dir)
static uint8_t DIR_IS_FILE_OR_SUBDIR (const dir_t *dir)
static uint8_t DIR_IS_LONG_NAME (const dir_t *dir)
static uint8_t DIR_IS_SUBDIR (const dir_t *dir)

-Variables

uint8_t const BOOTSIG0 = 0X55
uint8_t const BOOTSIG1 = 0XAA
uint8_t const DIR_ATT_ARCHIVE = 0X20
uint8_t const DIR_ATT_DEFINED_BITS = 0X3F
uint8_t const DIR_ATT_DIRECTORY = 0X10
uint8_t const DIR_ATT_FILE_TYPE_MASK = (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY)
uint8_t const DIR_ATT_HIDDEN = 0X02
uint8_t const DIR_ATT_LONG_NAME = 0X0F
uint8_t const DIR_ATT_LONG_NAME_MASK = 0X3F
uint8_t const DIR_ATT_READ_ONLY = 0X01
uint8_t const DIR_ATT_SYSTEM = 0X04
uint8_t const DIR_ATT_VOLUME_ID = 0X08
uint8_t const DIR_NAME_0XE5 = 0X05
uint8_t const DIR_NAME_DELETED = 0XE5
uint8_t const DIR_NAME_FREE = 0X00
uint8_t const EXTENDED_BOOT_SIG = 0X29
uint16_t const FAT12EOC = 0XFFF
uint16_t const FAT12EOC_MIN = 0XFF8
uint16_t const FAT16EOC = 0XFFFF
uint16_t const FAT16EOC_MIN = 0XFFF8
uint32_t const FAT32EOC = 0X0FFFFFFF
uint32_t const FAT32EOC_MIN = 0X0FFFFFF8
uint32_t const FAT32MASK = 0X0FFFFFFF
uint32_t const FSINFO_LEAD_SIG = 0x41615252
uint32_t const FSINFO_STRUCT_SIG = 0x61417272
-

Detailed Description

-

FAT file structures.

-

Typedef Documentation

- -
-
- - - - -
typedef struct directoryEntry dir_t
-
-
-

Type name for directoryEntry

- -
-
- -
-
- - - - -
typedef struct fat32_boot fat32_boot_t
-
-
-

Type name for FAT32 Boot Sector

- -
-
- -
-
- - - - -
typedef struct fat32_fsinfo fat32_fsinfo_t
-
-
-

Type name for FAT32 FSINFO Sector

- -
-
- -
-
- - - - -
typedef struct fat_boot fat_boot_t
-
-
-

Type name for FAT Boot Sector

- -
-
- -
-
- - - - -
typedef struct masterBootRecord mbr_t
-
-
-

Type name for masterBootRecord

- -
-
- -
-
- - - - -
typedef struct partitionTable part_t
-
-
-

Type name for partitionTable

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
static uint8_t DIR_IS_FILE (const dir_tdir) [inline, static]
-
-
-

Directory entry is for a file

-
Parameters:
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns:
true if the entry is for a normal file else false.
- -
-
- -
-
- - - - - - - - -
static uint8_t DIR_IS_FILE_OR_SUBDIR (const dir_tdir) [inline, static]
-
-
-

Directory entry is for a file or subdirectory

-
Parameters:
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns:
true if the entry is for a normal file or subdirectory else false.
- -
-
- -
-
- - - - - - - - -
static uint8_t DIR_IS_LONG_NAME (const dir_tdir) [inline, static]
-
-
-

Directory entry is part of a long name

-
Parameters:
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns:
true if the entry is for part of a long name else false.
- -
-
- -
-
- - - - - - - - -
static uint8_t DIR_IS_SUBDIR (const dir_tdir) [inline, static]
-
-
-

Directory entry is for a subdirectory

-
Parameters:
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns:
true if the entry is for a subdirectory else false.
- -
-
-

Variable Documentation

- -
-
- - - - -
uint8_t const BOOTSIG0 = 0X55
-
-
-

Value for byte 510 of boot block or MBR

- -
-
- -
-
- - - - -
uint8_t const BOOTSIG1 = 0XAA
-
-
-

Value for byte 511 of boot block or MBR

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_ARCHIVE = 0X20
-
-
-

Old DOS archive bit for backup support

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_DEFINED_BITS = 0X3F
-
-
-

defined attribute bits

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_DIRECTORY = 0X10
-
-
-

Entry is for a directory

- -
-
- -
- -
-

Mask for file/subdirectory tests

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_HIDDEN = 0X02
-
-
-

File should hidden in directory listings

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_LONG_NAME = 0X0F
-
-
-

Test value for long name entry. Test is (d->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME.

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_LONG_NAME_MASK = 0X3F
-
-
-

Test mask for long name entry

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_READ_ONLY = 0X01
-
-
-

file is read-only

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_SYSTEM = 0X04
-
-
-

Entry is for a system file

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_VOLUME_ID = 0X08
-
-
-

Directory entry contains the volume label

- -
-
- -
-
- - - - -
uint8_t const DIR_NAME_0XE5 = 0X05
-
-
-

escape for name[0] = 0XE5

- -
-
- -
-
- - - - -
uint8_t const DIR_NAME_DELETED = 0XE5
-
-
-

name[0] value for entry that is free after being "deleted"

- -
-
- -
-
- - - - -
uint8_t const DIR_NAME_FREE = 0X00
-
-
-

name[0] value for entry that is free and no allocated entries follow

- -
-
- -
-
- - - - -
uint8_t const EXTENDED_BOOT_SIG = 0X29
-
-
-

Value for bootSignature field int FAT/FAT32 boot sector

- -
-
- -
-
- - - - -
uint16_t const FAT12EOC = 0XFFF
-
-
-

FAT12 end of chain value used by Microsoft.

- -
-
- -
-
- - - - -
uint16_t const FAT12EOC_MIN = 0XFF8
-
-
-

Minimum value for FAT12 EOC. Use to test for EOC.

- -
-
- -
-
- - - - -
uint16_t const FAT16EOC = 0XFFFF
-
-
-

FAT16 end of chain value used by Microsoft.

- -
-
- -
-
- - - - -
uint16_t const FAT16EOC_MIN = 0XFFF8
-
-
-

Minimum value for FAT16 EOC. Use to test for EOC.

- -
-
- -
-
- - - - -
uint32_t const FAT32EOC = 0X0FFFFFFF
-
-
-

FAT32 end of chain value used by Microsoft.

- -
-
- -
-
- - - - -
uint32_t const FAT32EOC_MIN = 0X0FFFFFF8
-
-
-

Minimum value for FAT32 EOC. Use to test for EOC.

- -
-
- -
-
- - - - -
uint32_t const FAT32MASK = 0X0FFFFFFF
-
-
-

Mask a for FAT32 entry. Entries are 28 bits.

- -
-
- -
-
- - - - -
uint32_t const FSINFO_LEAD_SIG = 0x41615252
-
-
-

Lead signature for a FSINFO sector

- -
-
- -
-
- - - - -
uint32_t const FSINFO_STRUCT_SIG = 0x61417272
-
-
-

Struct signature for a FSINFO sector

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_fat_structs_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_fat_structs_8h__dep__incl.png deleted file mode 100755 index c36cd1bd6ce5a8b4b6259ba1ad760a4ff8030c56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31757 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

)%jtR&^d2U=TY#ieqM%b?b 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 P23^ - - - -SdFat: Arduino/libraries/SdFat/SdFatUtil.h File Reference - - - - - -

-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdFatUtil.h File Reference
-
-
- -

Useful utility functions. -More...

-
#include <avr/pgmspace.h>
-#include <WProgram.h>
-
-Include dependency graph for SdFatUtil.h:
-
-
- - -
-
- - - - - - - - - -

-Defines

#define PgmPrint(x)   SerialPrint_P(PSTR(x))
#define PgmPrintln(x)   SerialPrintln_P(PSTR(x))

-Functions

int SdFatUtil::FreeRam ()
void SdFatUtil::print_P (Print *pr, PGM_P str)
void SdFatUtil::println_P (Print *pr, PGM_P str)
void SdFatUtil::SerialPrint_P (PGM_P str)
void SdFatUtil::SerialPrintln_P (PGM_P str)
-

Detailed Description

-

Useful utility functions.

-

Define Documentation

- -
-
- - - - - - - - -
#define PgmPrint( x)   SerialPrint_P(PSTR(x))
-
-
-

Store and print a string in flash memory.

- -
-
- -
-
- - - - - - - - -
#define PgmPrintln( x)   SerialPrintln_P(PSTR(x))
-
-
-

Store and print a string in flash memory followed by a CR/LF.

- -
-
-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_fat_util_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_fat_util_8h__incl.png deleted file mode 100755 index f948a842521eddb4e6556a0290393fd8540e7c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3690 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 diff --git a/libs/SdFatBeta20120108/html/_sd_file_8h.html b/libs/SdFatBeta20120108/html/_sd_file_8h.html deleted file mode 100755 index 1272d84..0000000 --- a/libs/SdFatBeta20120108/html/_sd_file_8h.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdFile.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdFile.h File Reference
-
-
- -

SdFile class. -More...

-
#include <SdBaseFile.h>
-
-Include dependency graph for SdFile.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - -

-Classes

class  SdFile
 SdBaseFile with Print. More...
-

Detailed Description

-

SdFile class.

-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_file_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_file_8h__dep__incl.png deleted file mode 100755 index d154486ee3b38d1a0e958a6c106640c909cc3950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1755 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 diff --git a/libs/SdFatBeta20120108/html/_sd_stream_8h.html b/libs/SdFatBeta20120108/html/_sd_stream_8h.html deleted file mode 100755 index 6db25f6..0000000 --- a/libs/SdFatBeta20120108/html/_sd_stream_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdStream.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdStream.h File Reference
-
-
- -

fstream, ifstream, and ofstream classes -More...

-
#include <SdBaseFile.h>
-#include <iostream.h>
-
-Include dependency graph for SdStream.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - -

-Classes

class  fstream
 SD file input/output stream. More...
class  ifstream
 SD file input stream. More...
class  ofstream
 SD card output stream. More...
class  SdStreamBase
 Base class for SD streams. More...
-

Detailed Description

-

fstream, ifstream, and ofstream classes

-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_stream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_stream_8h__dep__incl.png deleted file mode 100755 index c203ea75c1a0140332c5b20579ba0ad0096e12e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1798 zcmcIldo&wp7RR)ep-fxTV2Y8dN0$c2qNSoz)&xZnL7Fi$skbDW5sy@uZ9Uqk(wM`p zN|7o>9vgYkkm`0#ty1rVcy>_Fh6<7n5*ssTchBtqd%ttPd(OS*+S2LqkIk_LX;t+Dg@$0yv_+Wjw_RwK?*gzpuB({=umh)|aXsZ7^@Iu#8ISq_EHw zZt`kladN7)`Yhk!TLtt?BDv(XUni7P-3bL8LVz5@6G48oguDnHAW&tvQT&yg&)9e$ zH2B!92s@B{`Z_y>)pvgrAG^@o`^%eb&tnwov+w)XdwZQ&=@y#m;%fOMf7 z8n=l3N4aLTE>zd(a=a!QaPFIc6E#y3i7{`6rs`^JVDPu)9(`e}E6A#CLx=|!9T(@D zzCK+fnylSj;;?8`%i7{*s$Hr?(9dJoUYCGcB6VnaX#hvp07h^z zWO7L$77+qMKeyz@oU(RD?cnNd+#3xsciwZeJSAx|WvsKL)d&6076UhCN&o0MWcXzR z_^MTyXskKMwSnc2iczu_@~{s}GT~C^XD{y%N|u!YNZ|Zl+;=>r;hqucN1ieM#iz^l zi5F3Q4k$4xk_3+%s#$r>S{xu@of+7ivu>??36ss#cPnu5{FwDE3H7pb8df16cTmBM7`m7dZrxo?_N`|756w+psF@{M(9GaH&82`C397M6U>i80Lh-mEuQX zzHRk98cW*R!EoEb${($ofFX5Pd zL16SplcoW!&`ZBf_h`-Gdm!!)j(O3{v5ARcl}a_h(*S(vut(4t3?)7#<-?xQPv*e- zH*fsMXZB%*KUJX(Z)3|SUzc%R(?Cmua(U4xzXi9$V4RvMLg~)VJxZ%!`VA%5B@H3= zcHVU!8^3!YeT}2H9*3~(zS;7Ow>|n0J(}AJkak|oaA=#a^gIjeOZd5xS%fl}JhW0%u7P9K3^5#!JHIHFZB`Dy-$0{` zAA=7Pyxe`~PU)$NK~yRPka({py&5WDU8zm6pLpcd-I2Y}Tfga52(<@D5A`laSKjFB zppm7^LZltgI!)V7*8{{gc&o%C@IL#Tg^tQi>oXglXKH=?dgV~Yx>;YWs^xL$6l`62 zd69d5FLHWS^+BWwkoDt!$x^M25zHar;$IQ=?-}F*9r6dXULA{iVf0`4{Xc@&a$T~^ zQXx?HJMrkb3m%#H=$?1C+5UgOT5Ku&Ljnu)$?9?PdHZD~%+otw_rXQt*6NsL^_VHl zK5>4)Z>X5^ym$oogU;me?|P-@i;E|5SNGAPk?;xPuG!+q3K=XOo^xrRZMTN#leQ#? z!9JrQUrC^eAbDyrgprhr&OacAOOhj|c#HoKL%W(7Lg=<<(Ruvjx$E_|POSG!k=)~) zVVUy!M7N@el1U)HD#2N&UISIJkbHW+RipUI(?)j8J~kv;hd@BJP@iPfozumuoY>A6DNm1{?cqufIVI-(GJ_5OQ{$|MYh3G*?6sdMAPo0FP)^v-tmfqfTPb?vvW$ z)4apg(0g6dXn!II>i*(JiurO`?MxT=&~K~c>6WWm@M$e`izclD2h1nXn+g5q*1rJm CSB6Fa diff --git a/libs/SdFatBeta20120108/html/_sd_stream_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_stream_8h__incl.png deleted file mode 100755 index 51c7b930e7f9231b54eab290b9b9edd5bcb5db7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27731 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 MHC;66n$@HK0aNhkfdBvi diff --git a/libs/SdFatBeta20120108/html/_sd_volume_8h.html b/libs/SdFatBeta20120108/html/_sd_volume_8h.html deleted file mode 100755 index 3e00b17..0000000 --- a/libs/SdFatBeta20120108/html/_sd_volume_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/SdVolume.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/SdVolume.h File Reference
-
-
- -

SdVolume class. -More...

-
#include <SdFatConfig.h>
-#include <Sd2Card.h>
-#include <SdFatStructs.h>
-
-Include dependency graph for SdVolume.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - -

-Classes

union  cache_t
 Cache for an SD data block. More...
class  SdVolume
 Access FAT16 and FAT32 volumes on SD and SDHC cards. More...
-

Detailed Description

-

SdVolume class.

-
- - - diff --git a/libs/SdFatBeta20120108/html/_sd_volume_8h__dep__incl.png b/libs/SdFatBeta20120108/html/_sd_volume_8h__dep__incl.png deleted file mode 100755 index 85b0ee40fa24487dafe7070b2c28d56b41f905c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30551 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 diff --git a/libs/SdFatBeta20120108/html/_sd_volume_8h__incl.png b/libs/SdFatBeta20120108/html/_sd_volume_8h__incl.png deleted file mode 100755 index 7bbc630fb2ca8679144039a397a695a6873c2e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8596 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 F_z%t~u{r<% diff --git a/libs/SdFatBeta20120108/html/annotated.html b/libs/SdFatBeta20120108/html/annotated.html deleted file mode 100755 index f2a684c..0000000 --- a/libs/SdFatBeta20120108/html/annotated.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - -SdFat: Class List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ArduinoInStreamInput stream for Arduino Stream objects
ArduinoOutStreamOutput stream for Arduino Print objects
cache_tCache for an SD data block
directoryEntryFAT short directory entry
fat32_bootBoot sector for a FAT32 volume
fat32_fsinfoFSINFO sector for a FAT32 volume
fat_bootBoot sector for a FAT12/FAT16 volume
fpos_tInternal type for istream do not use in user apps
fstreamSD file input/output stream
ibufstreamParse a char string
ifstreamSD file input stream
iosError and state information for all streams
ios_baseBase class for all streams
iostreamInput/Output stream
istreamInput Stream
masterBootRecordMaster Boot Record
obufstreamFormat a char string
ofstreamSD card output stream
ostreamOutput Stream
partitionTableMBR partition table entry
pgmType for string in flash
PrintThe Arduino core Print class
Sd2CardRaw access to SD and SDHC flash memory cards
SdBaseFileBase class for SdFile with Print and C++ streams
SdFatIntegration class for the SdFat library
SdFileSdBaseFile with Print
SdStreamBaseBase class for SD streams
SdVolumeAccess FAT16 and FAT32 volumes on SD and SDHC cards
setfillType for setfill manipulator
setprecisionType for setprecision manipulator
setwType for setw manipulator
-
- - - diff --git a/libs/SdFatBeta20120108/html/bufstream_8h.html b/libs/SdFatBeta20120108/html/bufstream_8h.html deleted file mode 100755 index ad271f7..0000000 --- a/libs/SdFatBeta20120108/html/bufstream_8h.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/bufstream.h File Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Arduino/libraries/SdFat/bufstream.h File Reference
-
-
- -

ibufstream and obufstream classes -More...

-
#include <iostream.h>
-
-Include dependency graph for bufstream.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - -

-Classes

class  ibufstream
 parse a char string More...
class  obufstream
 format a char string More...
-

Detailed Description

-

ibufstream and obufstream classes

-
- - - diff --git a/libs/SdFatBeta20120108/html/bufstream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/bufstream_8h__dep__incl.png deleted file mode 100755 index 52feee97de1026c765f760bb93dd8eed11b9cf5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3009 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 - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
ArduinoInStream Member List
-
-
-This is the complete list of members for ArduinoInStream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
adjustfieldios_base [static]
appios_base [static]
ArduinoInStream(Stream &hws, char *buf, uint16_t size)ArduinoInStream [inline]
ateios_base [static]
bad() const ios [inline]
badbitios_base [static]
basefieldios_base [static]
beg enum valueios_base
binaryios_base [static]
boolalphaios_base [static]
clear(iostate state=goodbit)ios [inline]
cur enum valueios_base
decios_base [static]
end enum valueios_base
eof() const ios [inline]
eofbitios_base [static]
fail() const ios [inline]
failbitios_base [static]
fill()ios_base [inline]
fill(char c)ios_base [inline]
flags() const ios_base [inline]
flags(fmtflags fl)ios_base [inline]
flagsToBase()ios_base [inline, protected]
fmtflags typedefios_base
gcount() const istream [inline]
get()istream
get(char &ch)istream
get(char *str, streamsize n, char delim= '\n')istream
getline(char *str, streamsize count, char delim= '\n')istream
good() const ios [inline]
goodbitios_base [static]
hexios_base [static]
ibufstream()ibufstream [inline]
ibufstream(const char *str)ibufstream [inline, explicit]
ignore(streamsize n=1, int delim=-1)istream
inios_base [static]
init(const char *str)ibufstream [inline]
internalios_base [static]
ios()ios [inline]
ios_base() (defined in ios_base)ios_base [inline]
iostate typedefios_base
istream() (defined in istream)istream [inline]
leftios_base [static]
octios_base [static]
off_type typedefios_base
openmode typedefios_base
operator const void *() const ios [inline]
operator!() const ios [inline]
operator>>(istream &(*pf)(istream &str))istream [inline]
operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
operator>>(ios &(*pf)(ios &str))istream [inline]
operator>>(char *str)istream [inline]
operator>>(char &ch)istream [inline]
operator>>(signed char *str)istream [inline]
operator>>(signed char &ch)istream [inline]
operator>>(unsigned char *str)istream [inline]
operator>>(unsigned char &ch)istream [inline]
operator>>(bool &arg)istream [inline]
operator>>(short &arg)istream [inline]
operator>>(unsigned short &arg)istream [inline]
operator>>(int16_t &arg)istream [inline]
operator>>(uint16_t &arg)istream [inline]
operator>>(int32_t &arg)istream [inline]
operator>>(uint32_t &arg)istream [inline]
operator>>(double &arg)istream [inline]
operator>>(float &arg)istream [inline]
operator>>(void *&arg)istream [inline]
outios_base [static]
peek()istream
pos_type typedefios_base
precision() const ios_base [inline]
precision(unsigned int n)ios_base [inline]
rdstate() const ios [inline]
readline()ArduinoInStream [inline]
rightios_base [static]
seekdir enum nameios_base
seekg(pos_type pos)istream [inline]
seekg(off_type off, seekdir way)istream [inline]
seekoff(off_type off, seekdir way)ArduinoInStream [inline, protected]
seekpos(pos_type pos)ArduinoInStream [inline, protected]
setf(fmtflags fl)ios_base [inline]
setf(fmtflags fl, fmtflags mask)ios_base [inline]
setstate(iostate state)ios [inline]
showbaseios_base [static]
showpointios_base [static]
showposios_base [static]
skipWhite()istream
skipwsios_base [static]
streamsize typedefios_base
tellg()istream [inline]
truncios_base [static]
unsetf(fmtflags fl)ios_base [inline]
uppercaseios_base [static]
width()ios_base [inline]
width(unsigned n)ios_base [inline]
- - - diff --git a/libs/SdFatBeta20120108/html/class_arduino_in_stream.html b/libs/SdFatBeta20120108/html/class_arduino_in_stream.html deleted file mode 100755 index b2fda64..0000000 --- a/libs/SdFatBeta20120108/html/class_arduino_in_stream.html +++ /dev/null @@ -1,1992 +0,0 @@ - - - - -SdFat: ArduinoInStream Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
- -
- -

Input stream for Arduino Stream objects. - More...

- -

#include <ArduinoStream.h>

-
-Inheritance diagram for ArduinoInStream:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for ArduinoInStream:
-
-
Collaboration graph
- - -
[legend]
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Types

typedef unsigned int fmtflags
typedef unsigned char iostate
typedef int32_t off_type
typedef uint8_t openmode
typedef uint32_t pos_type
enum  seekdir { beg, -cur, -end - }
typedef uint32_t streamsize

-Public Member Functions

 ArduinoInStream (Stream &hws, char *buf, uint16_t size)
bool bad () const
void clear (iostate state=goodbit)
bool eof () const
bool fail () const
char fill ()
char fill (char c)
fmtflags flags () const
fmtflags flags (fmtflags fl)
streamsize gcount () const
int get ()
istreamget (char &ch)
istreamget (char *str, streamsize n, char delim= '\n')
istreamgetline (char *str, streamsize count, char delim= '\n')
bool good () const
istreamignore (streamsize n=1, int delim=-1)
void init (const char *str)
 operator const void * () const
bool operator! () const
istreamoperator>> (char &ch)
istreamoperator>> (uint16_t &arg)
istreamoperator>> (int16_t &arg)
istreamoperator>> (signed char *str)
istreamoperator>> (int32_t &arg)
istreamoperator>> (uint32_t &arg)
istreamoperator>> (istream &(*pf)(istream &str))
istreamoperator>> (double &arg)
istreamoperator>> (signed char &ch)
istreamoperator>> (float &arg)
istreamoperator>> (void *&arg)
istreamoperator>> (ios_base &(*pf)(ios_base &str))
istreamoperator>> (unsigned char *str)
istreamoperator>> (unsigned char &ch)
istreamoperator>> (ios &(*pf)(ios &str))
istreamoperator>> (bool &arg)
istreamoperator>> (char *str)
istreamoperator>> (short &arg)
istreamoperator>> (unsigned short &arg)
int peek ()
int precision (unsigned int n)
int precision () const
iostate rdstate () const
void readline ()
istreamseekg (off_type off, seekdir way)
istreamseekg (pos_type pos)
fmtflags setf (fmtflags fl, fmtflags mask)
fmtflags setf (fmtflags fl)
void setstate (iostate state)
void skipWhite ()
pos_type tellg ()
void unsetf (fmtflags fl)
unsigned width ()
unsigned width (unsigned n)

-Static Public Attributes

static const fmtflags adjustfield = left | right | internal
static const openmode app = 0X4
static const openmode ate = 0X8
static const iostate badbit = 0X01
static const fmtflags basefield = dec | hex | oct
static const openmode binary = 0X10
static const fmtflags boolalpha = 0x0100
static const fmtflags dec = 0x0008
static const iostate eofbit = 0x02
static const iostate failbit = 0X04
static const iostate goodbit = 0x00
static const fmtflags hex = 0x0010
static const openmode in = 0X20
static const fmtflags internal = 0x0004
static const fmtflags left = 0x0001
static const fmtflags oct = 0x0020
static const openmode out = 0X40
static const fmtflags right = 0x0002
static const fmtflags showbase = 0x0200
static const fmtflags showpoint = 0x0400
static const fmtflags showpos = 0x0800
static const fmtflags skipws = 0x1000
static const openmode trunc = 0X80
static const fmtflags uppercase = 0x4000

-Protected Member Functions

uint8_t flagsToBase ()
bool seekoff (off_type off, seekdir way)
bool seekpos (pos_type pos)
-

Detailed Description

-

Input stream for Arduino Stream objects.

-

Member Typedef Documentation

- -
-
- - - - -
typedef unsigned int ios_base::fmtflags [inherited]
-
-
-

type for format flags

- -
-
- -
-
- - - - -
typedef unsigned char ios_base::iostate [inherited]
-
-
-

typedef for iostate bitmask

- -
-
- -
-
- - - - -
typedef int32_t ios_base::off_type [inherited]
-
-
-

type for relative seek offset

- -
-
- -
-
- - - - -
typedef uint8_t ios_base::openmode [inherited]
-
-
-

typedef for iostream open mode

- -
-
- -
-
- - - - -
typedef uint32_t ios_base::pos_type [inherited]
-
-
-

type for absolute seek position

- -
-
- -
-
- - - - -
typedef uint32_t ios_base::streamsize [inherited]
-
-
-

unsigned size that can represent maximum file size. (violates spec - should be signed)

- -
-
-

Member Enumeration Documentation

- -
-
- - - - -
enum ios_base::seekdir [inherited]
-
-
-

enumerated type for the direction of relative seeks

-
Enumerator:
- - - -
beg  -

seek relative to the beginning of the stream

-
cur  -

seek relative to the current stream position

-
end  -

seek relative to the end of the stream

-
-
-
- -
-
-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
ArduinoInStream::ArduinoInStream (Stream & hws,
char * buf,
uint16_t size 
) [inline]
-
-
-

Constructor

-
Parameters:
- - - - -
[in]hwshardware stream
[in]bufbuffer for input line
[in]sizesize of input buffer
-
-
- -
-
-

Member Function Documentation

- -
-
- - - - - - - -
bool ios::bad () const [inline, inherited]
-
-
-
Returns:
true if bad bit is set else false.
- -
-
- -
-
- - - - - - - - -
void ios::clear (iostate state = goodbit) [inline, inherited]
-
-
-

Clear iostate bits.

-
Parameters:
- - -
[in]stateThe flags you want to set after clearing all flags.
-
-
- -

Reimplemented in fstream, and ofstream.

- -
-
- -
-
- - - - - - - -
bool ios::eof () const [inline, inherited]
-
-
-
Returns:
true if end of file has been reached else false.
-

Warning: An empty file returns false before the first read.

-

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

- -
-
- -
-
- - - - - - - -
bool ios::fail () const [inline, inherited]
-
-
-
Returns:
true if any iostate bit other than eof are set else false.
- -
-
- -
-
- - - - - - - -
char ios_base::fill () [inline, inherited]
-
-
-
Returns:
fill character
- -
-
- -
-
- - - - - - - - -
char ios_base::fill (char c) [inline, inherited]
-
-
-

Set fill character

-
Parameters:
- - -
[in]cnew fill character
-
-
-
Returns:
old fill character
- -
-
- -
-
- - - - - - - -
fmtflags ios_base::flags () const [inline, inherited]
-
-
-
Returns:
format flags
- -
-
- -
-
- - - - - - - - -
fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
-
-
-

set format flags

-
Parameters:
- - -
[in]flnew flag
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - -
uint8_t ios_base::flagsToBase () [inline, protected, inherited]
-
-
-
Returns:
current number base
- -
-
- -
-
- - - - - - - -
streamsize istream::gcount () const [inline, inherited]
-
-
-
Returns:
The number of characters extracted by the last unformatted input function.
- -
-
- -
-
- - - - - - - -
int istream::get () [inherited]
-
-
-

Extract a character if one is available.

-
Returns:
The character or -1 if a failure occurs. A failure is indicated by the stream state.
- -
-
- -
-
- - - - - - - - -
istream & istream::get (char & c) [inherited]
-
-
-

Extract a character if one is available.

-
Parameters:
- - -
[out]clocation to receive the extracted character.
-
-
-
Returns:
always returns *this. A failure is indicated by the stream state.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
istream & istream::get (char * str,
streamsize n,
char delim = '\n' 
) [inherited]
-
-
-

Extract characters.

-
Parameters:
- - - - -
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
-
-
-

Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

-
Returns:
always returns *this. A failure is indicated by the stream state.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
istream & istream::getline (char * str,
streamsize n,
char delim = '\n' 
) [inherited]
-
-
-

Extract characters

-
Parameters:
- - - - -
[out]strLocation to receive extracted characters.
[in]nSize of str.
[in]delimDelimiter
-
-
-

Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

-

The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

-
Returns:
always returns *this. A failure is indicated by the stream state.
- -
-
- -
-
- - - - - - - -
bool ios::good () const [inline, inherited]
-
-
-
Returns:
True if no iostate flags are set else false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
istream & istream::ignore (streamsize n = 1,
int delim = -1 
) [inherited]
-
-
-

Extract characters and discard them.

-
Parameters:
- - - -
[in]nmaximum number of characters to ignore.
[in]delimDelimiter.
-
-
-

Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

-

Failures are indicated by the state of the stream.

-
Returns:
*this
- -
-
- -
-
- - - - - - - - -
void ibufstream::init (const char * str) [inline, inherited]
-
-
-

Initialize an ibufstream

-
Parameters:
- - -
[in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
-
-
- -
-
- -
-
- - - - - - - -
ios::operator const void * () const [inline, inherited]
-
-
-
Returns:
null pointer if fail() is true.
- -
-
- -
-
- - - - - - - -
bool ios::operator! () const [inline, inherited]
-
-
-
Returns:
true if fail() else false.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (istream &(*)(istream &str) pf) [inline, inherited]
-
-
-

call manipulator

-
Parameters:
- - -
[in]pffunction to call
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (char * str) [inline, inherited]
-
-
-

Extract a character string

-
Parameters:
- - -
[out]strlocation to store the string.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (unsigned short & arg) [inline, inherited]
-
-
-

Extract a value of type unsigned short.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (int16_t & arg) [inline, inherited]
-
-
-

Extract a value of type int16_t.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (char & ch) [inline, inherited]
-
-
-

Extract a character

-
Parameters:
- - -
[out]chlocation to store the character.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (uint16_t & arg) [inline, inherited]
-
-
-

Extract a value of type uint16_t.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (int32_t & arg) [inline, inherited]
-
-
-

Extract a value of type int32_t.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (signed char * str) [inline, inherited]
-
-
-

Extract a character string

-
Parameters:
- - -
[out]strlocation to store the string.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (uint32_t & arg) [inline, inherited]
-
-
-

Extract a value of type uint32_t.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (double & arg) [inline, inherited]
-
-
-

Extract a value of type double.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (float & arg) [inline, inherited]
-
-
-

Extract a value of type float.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (signed char & ch) [inline, inherited]
-
-
-

Extract a character

-
Parameters:
- - -
[out]chlocation to store the character.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (void *& arg) [inline, inherited]
-
-
-

Extract a value of type void*.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline, inherited]
-
-
-

call manipulator

-
Parameters:
- - -
[in]pffunction to call
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (unsigned char * str) [inline, inherited]
-
-
-

Extract a character string

-
Parameters:
- - -
[out]strlocation to store the string.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (unsigned char & ch) [inline, inherited]
-
-
-

Extract a character

-
Parameters:
- - -
[out]chlocation to store the character.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (bool & arg) [inline, inherited]
-
-
-

Extract a value of type bool.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (ios &(*)(ios &str) pf) [inline, inherited]
-
-
-

call manipulator

-
Parameters:
- - -
[in]pffunction to call
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
istream& istream::operator>> (short & arg) [inline, inherited]
-
-
-

Extract a value of type short.

-
Parameters:
- - -
[out]arglocation to store the value.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - -
int istream::peek () [inherited]
-
-
-

Return the next available character without consuming it.

-
Returns:
The character if the stream state is good else -1;
- -
-
- -
-
- - - - - - - - -
int ios_base::precision (unsigned int n) [inline, inherited]
-
-
-

set precision

-
Parameters:
- - -
[in]nnew precision
-
-
-
Returns:
old precision
- -
-
- -
-
- - - - - - - -
int ios_base::precision () const [inline, inherited]
-
-
-
Returns:
precision
- -
-
- -
-
- - - - - - - -
iostate ios::rdstate () const [inline, inherited]
-
-
-
Returns:
The iostate flags for this file.
- -
-
- -
-
- - - - - - - -
void ArduinoInStream::readline () [inline]
-
-
-

read a line.

- -
-
- -
-
- - - - - - - - -
istream& istream::seekg (pos_type pos) [inline, inherited]
-
-
-

Set the stream position

-
Parameters:
- - -
[in]posThe absolute position in which to move the read pointer.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
istream& istream::seekg (off_type off,
seekdir way 
) [inline, inherited]
-
-
-

Set the stream position.

-
Parameters:
- - - -
[in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool ArduinoInStream::seekoff (off_type off,
seekdir way 
) [inline, protected]
-
-
-

Internal - do not use.

-
Parameters:
- - - -
[in]off
[in]way
-
-
-
Returns:
true/false.
- -
-
- -
-
- - - - - - - - -
bool ArduinoInStream::seekpos (pos_type pos) [inline, protected]
-
-
-

Internal - do not use.

-
Parameters:
- - -
[in]pos
-
-
-
Returns:
true/false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
) [inline, inherited]
-
-
-

modify format flags

-
Parameters:
- - - -
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - - -
fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
-
-
-

set format flags

-
Parameters:
- - -
[in]flnew flags to be or'ed in
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - - -
void ios::setstate (iostate state) [inline, inherited]
-
-
-

Set iostate bits.

-
Parameters:
- - -
[in]stateBitts to set.
-
-
- -
-
- -
-
- - - - - - - -
void istream::skipWhite () [inherited]
-
-
-

used to implement ws()

- -
-
- -
-
- - - - - - - -
pos_type istream::tellg () [inline, inherited]
-
-
-
Returns:
the stream position
- -
-
- -
-
- - - - - - - - -
void ios_base::unsetf (fmtflags fl) [inline, inherited]
-
-
-

clear format flags

-
Parameters:
- - -
[in]flflags to be cleared
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - -
unsigned ios_base::width () [inline, inherited]
-
-
-
Returns:
width
- -
-
- -
-
- - - - - - - - -
unsigned ios_base::width (unsigned n) [inline, inherited]
-
-
-

set width

-
Parameters:
- - -
[in]nnew width
-
-
-
Returns:
old width
- -
-
-

Member Data Documentation

- -
-
- - - - -
const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
-
-
-

mask for adjustfield

- -
-
- -
-
- - - - -
const openmode ios_base::app = 0X4 [static, inherited]
-
-
-

seek to end before each write

- -
-
- -
-
- - - - -
const openmode ios_base::ate = 0X8 [static, inherited]
-
-
-

open and seek to end immediately after opening

- -
-
- -
-
- - - - -
const iostate ios_base::badbit = 0X01 [static, inherited]
-
-
-

iostate bad bit for a nonrecoverable error.

- -
-
- -
-
- - - - -
const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
-
-
-

mask for basefield

- -
-
- -
-
- - - - -
const openmode ios_base::binary = 0X10 [static, inherited]
-
-
-

perform input and output in binary mode (as opposed to text mode)

- -
-
- -
-
- - - - -
const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
-
-
-

use strings true/false for bool

- -
-
- -
-
- - - - -
const fmtflags ios_base::dec = 0x0008 [static, inherited]
-
-
-

base 10 flag

- -
-
- -
-
- - - - -
const iostate ios_base::eofbit = 0x02 [static, inherited]
-
-
-

iostate bit for end of file reached

- -
-
- -
-
- - - - -
const iostate ios_base::failbit = 0X04 [static, inherited]
-
-
-

iostate fail bit for nonfatal error

- -
-
- -
-
- - - - -
const iostate ios_base::goodbit = 0x00 [static, inherited]
-
-
-

iostate for no flags

- -
-
- -
-
- - - - -
const fmtflags ios_base::hex = 0x0010 [static, inherited]
-
-
-

base 16 flag

- -
-
- -
-
- - - - -
const openmode ios_base::in = 0X20 [static, inherited]
-
-
-

open for input

- -
-
- -
-
- - - - -
const fmtflags ios_base::internal = 0x0004 [static, inherited]
-
-
-

fill between sign/base prefix and number

- -
-
- -
-
- - - - -
const fmtflags ios_base::left = 0x0001 [static, inherited]
-
-
-

left adjust fields

- -
-
- -
-
- - - - -
const fmtflags ios_base::oct = 0x0020 [static, inherited]
-
-
-

base 8 flag

- -
-
- -
-
- - - - -
const openmode ios_base::out = 0X40 [static, inherited]
-
-
-

open for output

- -
-
- -
-
- - - - -
const fmtflags ios_base::right = 0x0002 [static, inherited]
-
-
-

right adjust fields

- -
-
- -
-
- - - - -
const fmtflags ios_base::showbase = 0x0200 [static, inherited]
-
-
-

use prefix 0X for hex and 0 for oct

- -
-
- -
-
- - - - -
const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
-
-
-

always show '.' for floating numbers

- -
-
- -
-
- - - - -
const fmtflags ios_base::showpos = 0x0800 [static, inherited]
-
-
-

show + sign for nonnegative numbers

- -
-
- -
-
- - - - -
const fmtflags ios_base::skipws = 0x1000 [static, inherited]
-
-
-

skip initial white space

- -
-
- -
-
- - - - -
const openmode ios_base::trunc = 0X80 [static, inherited]
-
-
-

truncate an existing stream when opening

- -
-
- -
-
- - - - -
const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
-
-
-

use uppercase letters in number representations

- -
-
-
The documentation for this class was generated from the following file: -
- - - diff --git a/libs/SdFatBeta20120108/html/class_arduino_in_stream__coll__graph.png b/libs/SdFatBeta20120108/html/class_arduino_in_stream__coll__graph.png deleted file mode 100755 index 3fdb2d35a6c785120452ae8c49b83dbcf590fc24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3475 zcmcJSc{J4PAIHDnF_;N(Qnni1k*&*Q%`}!G4a$~n6eiPVOH8ydOxA3X zYhQ+vh_aL+%9dq>X^62T{M_IDoqPKIet&nK*LgmlKc4fP&w0-Kvpi9F3u6()E(8Do zBBmxdt1U|b01yuo*z$sdgYa8M;GDTJ4%qx_G3s+^TPICSafUV_sT_Kz&+ZF5TN*k$ z_Rid7^o+b*divhX&Lcs|Ofi(C?ji*5;mf*JWgGGGfR(Ku`U?tItyGP?`$)iILTqHj zWViV7v)GQx5M<)AQPSH~l|rD=tjZ`?(7Vc0=Uh;GyM* zoys%Yb=i}z>vk1R zvhcTwVkK^G*n=)gT!FZAXCZf8|4q|=N{uK3cFz!)c_NIa0_5QW#*5}K3O(aPqP*@d zlPn@J^cZhBzj(N!hGT8gCXc;U0_!d#IT8EAr-gmEWkufeQppETg0+u_X=x|ek~P#T zr*e=C8M>uQ$dzKn14nDiZEN^v7%*Vg8)1U-IKpMweK|ojdY{uP(_@iIwF0o| ze7+aDb5#uW;zVoEE+H$d-^&N4TTrFysZaBZ%F7=&wYRg621=y}O`V_+F0I3n{Xw5l zR(UMD_}bgAl>#8Zk%#wwLq(CP2$rPpcx&FNPMVTp40nyG?LAcItI%0RJbnmbQ}Dou zG%roHQ}IU?heQKOfT8?lpl)1Z8YCXRLCT?ouJ?rH`|}&bJJ`OgjqvzVUO;|1@yKv9 zvrBJ<$+cBs6`;;2P^Kr}$|DQCv!l3cGZ^-bN1^pP&c%l>M_|q*FbI4*KK}E{zs8Au zH!r8%AnxB;>=}qFU?td0do~QUFScqiV#T7Y05(`Rp?en=50Wz6*ky%czlX{+8uc0C zlx2~(ik?4Y0q3)5Jb8NnMj%e(joEh=i#UR!%n0Fd4FB0<&Osez-rSGwyd7zwl($)gAkj?LSi zj`{Hy0r}q}RiNU?=kdfXWwxPR&Smt^t&gb4bH?m>b#2|v%?o>~uT>KOh>SDX=u@{u+pcp)IttHukktfHgLA{=FboKIE8M=R%~Qv~)z0fYpy750c!AU*^!8fsOl3T{L&{L7k?_e&%ktGUuao&j zqlbtd^Wh6NDk$H$#%6VV8Qk1CM_=k}0I~agTwRlVlJ8X&ke_pXg91kIW>wcho}X|wIdn58>Y)u z12Dv`Oh(a9WoRow&?&$`t%>vbSnc!MDC>!ufo)5LF3ri%QOi)wfk(OUiHx;nT3-?K z9h{&I>Rva3`3O~*C)#M|F}=y%oFhmxCByz4iee3Yu}n{q;GCzcZ{}c3nbY{xKLj7# z9&HoTT8aP`<$Bi!51)Lus8Mn+5Mfeloj5Hs)gjoX2MI`lWRUBZM7VqGxma_&Hkcth zXjx643_df?BLK#eLfFWZ&t_-Y(+9CSCpTI5e}SeUJ?zkaK)HU-@wqxbz1prGk+>m%8w z3ob9AuMpY06i|kXyg+<8E|I?mi0RMya~3)a_QXuxANyuI(I6=1y_YroUB9Lt(Y}WAALtnkPj^2zAMc zxh2{rY=#ATd*2r#-sCQge(gP-z@R2rZF zYebq}W|sXqVzGN>GXR;Mpv4Ql%yjbUsJ+vqgt4X|ScB4`#&*Mn94nEs$lxAY0Ar7GTo=X#K263R%j zemt+^)l(bmKQ4tq?#j{Y2uD2n}O!FEPUcTu)@@V)B^pf{x-p zA>}=iWDgha3&d8U86U$-r$M|>nt=Yj01j0lc=|<`KP!2|S zDu*&UYA?p}+!A#w)3+wSqPO>^sJeRkT955THHHl6SDGMV}e5N2?NXIyZf2kwSg+~!izZlF@HD zp!mVMor;mHBFubP1bwm&Z(V$tJ;R%j)}UM`?f@%QZc>-Il6WSum2*woqvpIYSW z6wg2?Q1Z;L-A{3KggkV9c$xcMBECv+@0Z!x{W&=~{)qNgYVdHFw6wYt6cr}7rjeDG zhdya($reu@-F1fVKcn(ixYjVx-QAsd3v2EfkE1_)_&nSE{=0lNn)Ztfp0#D_gVFVG zM0PIDd3~s{82@dv52XlEk@nxP478d zKOLnID%>4*Mb@jqZ%H@U!}P%_?5?6w*+~L#DUoz|z8QJR%iTSP>&nUEMQafvLek4l zWEcpE8!$*N4kGtGSSdD^0d7;dgJtoD2+rHtr8ZuaI#XAXu1f)`FIbkIUVuVccy5{n zVQ6+MU+vnA)~~yj4{(DzhG$%{_5a4)3MX< z<(IgiMf%Z84We=yLsu96NHw^!{q`dHH*bEKuNwc|@wS>?RK1vnj!x9*=;$Y^W~nQg zyi-U>2)k!f+SmK+*|P`lKZ&h#@Rg;U-Enh^Q^1B;T+91c<;q0?TfZ#8)W`z&^temp FzW_MQ9cusp diff --git a/libs/SdFatBeta20120108/html/class_arduino_in_stream__inherit__graph.png b/libs/SdFatBeta20120108/html/class_arduino_in_stream__inherit__graph.png deleted file mode 100755 index 3fdb2d35a6c785120452ae8c49b83dbcf590fc24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3475 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 FzW_MQ9cusp diff --git a/libs/SdFatBeta20120108/html/class_arduino_out_stream-members.html b/libs/SdFatBeta20120108/html/class_arduino_out_stream-members.html deleted file mode 100755 index 731d2cb..0000000 --- a/libs/SdFatBeta20120108/html/class_arduino_out_stream-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
ArduinoOutStream Member List
-
-
-This is the complete list of members for ArduinoOutStream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
adjustfieldios_base [static]
appios_base [static]
ArduinoOutStream(Print &pr)ArduinoOutStream [inline, explicit]
ateios_base [static]
bad() const ios [inline]
badbitios_base [static]
basefieldios_base [static]
beg enum valueios_base
binaryios_base [static]
boolalphaios_base [static]
clear(iostate state=goodbit)ios [inline]
cur enum valueios_base
decios_base [static]
end enum valueios_base
eof() const ios [inline]
eofbitios_base [static]
fail() const ios [inline]
failbitios_base [static]
fill()ios_base [inline]
fill(char c)ios_base [inline]
flags() const ios_base [inline]
flags(fmtflags fl)ios_base [inline]
flagsToBase()ios_base [inline, protected]
flush()ostream [inline]
fmtflags typedefios_base
good() const ios [inline]
goodbitios_base [static]
hexios_base [static]
inios_base [static]
internalios_base [static]
ios()ios [inline]
ios_base() (defined in ios_base)ios_base [inline]
iostate typedefios_base
leftios_base [static]
octios_base [static]
off_type typedefios_base
openmode typedefios_base
operator const void *() const ios [inline]
operator!() const ios [inline]
operator<<(ostream &(*pf)(ostream &str))ostream [inline]
operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
operator<<(bool arg)ostream [inline]
operator<<(const char *arg)ostream [inline]
operator<<(const signed char *arg)ostream [inline]
operator<<(const unsigned char *arg)ostream [inline]
operator<<(char arg)ostream [inline]
operator<<(signed char arg)ostream [inline]
operator<<(unsigned char arg)ostream [inline]
operator<<(double arg)ostream [inline]
operator<<(int16_t arg)ostream [inline]
operator<<(uint16_t arg)ostream [inline]
operator<<(int32_t arg)ostream [inline]
operator<<(uint32_t arg)ostream [inline]
operator<<(const void *arg)ostream [inline]
operator<<(pgm arg)ostream [inline]
ostream() (defined in ostream)ostream [inline]
outios_base [static]
pos_type typedefios_base
precision() const ios_base [inline]
precision(unsigned int n)ios_base [inline]
put(char ch)ostream [inline]
rdstate() const ios [inline]
rightios_base [static]
seekdir enum nameios_base
seekp(pos_type pos)ostream [inline]
seekp(off_type off, seekdir way)ostream [inline]
setf(fmtflags fl)ios_base [inline]
setf(fmtflags fl, fmtflags mask)ios_base [inline]
setstate(iostate state)ios [inline]
showbaseios_base [static]
showpointios_base [static]
showposios_base [static]
skipwsios_base [static]
streamsize typedefios_base
tellp()ostream [inline]
truncios_base [static]
unsetf(fmtflags fl)ios_base [inline]
uppercaseios_base [static]
width()ios_base [inline]
width(unsigned n)ios_base [inline]
- - - diff --git a/libs/SdFatBeta20120108/html/class_arduino_out_stream.html b/libs/SdFatBeta20120108/html/class_arduino_out_stream.html deleted file mode 100755 index 2683bfb..0000000 --- a/libs/SdFatBeta20120108/html/class_arduino_out_stream.html +++ /dev/null @@ -1,1606 +0,0 @@ - - - - -SdFat: ArduinoOutStream Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
- -
- -

Output stream for Arduino Print objects. - More...

- -

#include <ArduinoStream.h>

-
-Inheritance diagram for ArduinoOutStream:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for ArduinoOutStream:
-
-
Collaboration graph
- - -
[legend]
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Types

typedef unsigned int fmtflags
typedef unsigned char iostate
typedef int32_t off_type
typedef uint8_t openmode
typedef uint32_t pos_type
enum  seekdir { beg, -cur, -end - }
typedef uint32_t streamsize

-Public Member Functions

 ArduinoOutStream (Print &pr)
bool bad () const
void clear (iostate state=goodbit)
bool eof () const
bool fail () const
char fill ()
char fill (char c)
fmtflags flags () const
fmtflags flags (fmtflags fl)
ostreamflush ()
bool good () const
 operator const void * () const
bool operator! () const
ostreamoperator<< (ostream &(*pf)(ostream &str))
ostreamoperator<< (const void *arg)
ostreamoperator<< (char arg)
ostreamoperator<< (ios_base &(*pf)(ios_base &str))
ostreamoperator<< (pgm arg)
ostreamoperator<< (bool arg)
ostreamoperator<< (signed char arg)
ostreamoperator<< (unsigned char arg)
ostreamoperator<< (const char *arg)
ostreamoperator<< (double arg)
ostreamoperator<< (const signed char *arg)
ostreamoperator<< (int16_t arg)
ostreamoperator<< (uint16_t arg)
ostreamoperator<< (int32_t arg)
ostreamoperator<< (const unsigned char *arg)
ostreamoperator<< (uint32_t arg)
int precision () const
int precision (unsigned int n)
ostreamput (char ch)
iostate rdstate () const
ostreamseekp (pos_type pos)
ostreamseekp (off_type off, seekdir way)
fmtflags setf (fmtflags fl, fmtflags mask)
fmtflags setf (fmtflags fl)
void setstate (iostate state)
pos_type tellp ()
void unsetf (fmtflags fl)
unsigned width ()
unsigned width (unsigned n)

-Static Public Attributes

static const fmtflags adjustfield = left | right | internal
static const openmode app = 0X4
static const openmode ate = 0X8
static const iostate badbit = 0X01
static const fmtflags basefield = dec | hex | oct
static const openmode binary = 0X10
static const fmtflags boolalpha = 0x0100
static const fmtflags dec = 0x0008
static const iostate eofbit = 0x02
static const iostate failbit = 0X04
static const iostate goodbit = 0x00
static const fmtflags hex = 0x0010
static const openmode in = 0X20
static const fmtflags internal = 0x0004
static const fmtflags left = 0x0001
static const fmtflags oct = 0x0020
static const openmode out = 0X40
static const fmtflags right = 0x0002
static const fmtflags showbase = 0x0200
static const fmtflags showpoint = 0x0400
static const fmtflags showpos = 0x0800
static const fmtflags skipws = 0x1000
static const openmode trunc = 0X80
static const fmtflags uppercase = 0x4000

-Protected Member Functions

uint8_t flagsToBase ()
-

Detailed Description

-

Output stream for Arduino Print objects.

-

Member Typedef Documentation

- -
-
- - - - -
typedef unsigned int ios_base::fmtflags [inherited]
-
-
-

type for format flags

- -
-
- -
-
- - - - -
typedef unsigned char ios_base::iostate [inherited]
-
-
-

typedef for iostate bitmask

- -
-
- -
-
- - - - -
typedef int32_t ios_base::off_type [inherited]
-
-
-

type for relative seek offset

- -
-
- -
-
- - - - -
typedef uint8_t ios_base::openmode [inherited]
-
-
-

typedef for iostream open mode

- -
-
- -
-
- - - - -
typedef uint32_t ios_base::pos_type [inherited]
-
-
-

type for absolute seek position

- -
-
- -
-
- - - - -
typedef uint32_t ios_base::streamsize [inherited]
-
-
-

unsigned size that can represent maximum file size. (violates spec - should be signed)

- -
-
-

Member Enumeration Documentation

- -
-
- - - - -
enum ios_base::seekdir [inherited]
-
-
-

enumerated type for the direction of relative seeks

-
Enumerator:
- - - -
beg  -

seek relative to the beginning of the stream

-
cur  -

seek relative to the current stream position

-
end  -

seek relative to the end of the stream

-
-
-
- -
-
-

Constructor & Destructor Documentation

- -
-
- - - - - - - - -
ArduinoOutStream::ArduinoOutStream (Printpr) [inline, explicit]
-
-
-

constructor

-
Parameters:
- - -
[in]prPrint object for this ArduinoOutStream.
-
-
- -
-
-

Member Function Documentation

- -
-
- - - - - - - -
bool ios::bad () const [inline, inherited]
-
-
-
Returns:
true if bad bit is set else false.
- -
-
- -
-
- - - - - - - - -
void ios::clear (iostate state = goodbit) [inline, inherited]
-
-
-

Clear iostate bits.

-
Parameters:
- - -
[in]stateThe flags you want to set after clearing all flags.
-
-
- -

Reimplemented in fstream, and ofstream.

- -
-
- -
-
- - - - - - - -
bool ios::eof () const [inline, inherited]
-
-
-
Returns:
true if end of file has been reached else false.
-

Warning: An empty file returns false before the first read.

-

Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

- -
-
- -
-
- - - - - - - -
bool ios::fail () const [inline, inherited]
-
-
-
Returns:
true if any iostate bit other than eof are set else false.
- -
-
- -
-
- - - - - - - - -
char ios_base::fill (char c) [inline, inherited]
-
-
-

Set fill character

-
Parameters:
- - -
[in]cnew fill character
-
-
-
Returns:
old fill character
- -
-
- -
-
- - - - - - - -
char ios_base::fill () [inline, inherited]
-
-
-
Returns:
fill character
- -
-
- -
-
- - - - - - - -
fmtflags ios_base::flags () const [inline, inherited]
-
-
-
Returns:
format flags
- -
-
- -
-
- - - - - - - - -
fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
-
-
-

set format flags

-
Parameters:
- - -
[in]flnew flag
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - -
uint8_t ios_base::flagsToBase () [inline, protected, inherited]
-
-
-
Returns:
current number base
- -
-
- -
-
- - - - - - - -
ostream& ostream::flush () [inline, inherited]
-
-
-

Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

-
Returns:
A reference to the ostream object.
- -
-
- -
-
- - - - - - - -
bool ios::good () const [inline, inherited]
-
-
-
Returns:
True if no iostate flags are set else false.
- -
-
- -
-
- - - - - - - -
ios::operator const void * () const [inline, inherited]
-
-
-
Returns:
null pointer if fail() is true.
- -
-
- -
-
- - - - - - - -
bool ios::operator! () const [inline, inherited]
-
-
-
Returns:
true if fail() else false.
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline, inherited]
-
-
-

call manipulator

-
Parameters:
- - -
[in]pffunction to call
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (pgm arg) [inline, inherited]
-
-
-

Output a string from flash

-
Parameters:
- - -
[in]argpgm struct pointing to string
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (signed char arg) [inline, inherited]
-
-
-

Output character

-
Parameters:
- - -
[in]argcharacter to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (bool arg) [inline, inherited]
-
-
-

Output bool

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (const char * arg) [inline, inherited]
-
-
-

Output string

-
Parameters:
- - -
[in]argstring to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (unsigned char arg) [inline, inherited]
-
-
-

Output character

-
Parameters:
- - -
[in]argcharacter to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (double arg) [inline, inherited]
-
-
-

Output double

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline, inherited]
-
-
-

call manipulator

-
Parameters:
- - -
[in]pffunction to call
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (int16_t arg) [inline, inherited]
-
-
-

Output signed int

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (const signed char * arg) [inline, inherited]
-
-
-

Output string

-
Parameters:
- - -
[in]argstring to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (const unsigned char * arg) [inline, inherited]
-
-
-

Output string

-
Parameters:
- - -
[in]argstring to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (uint16_t arg) [inline, inherited]
-
-
-

Output unsigned int

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (int32_t arg) [inline, inherited]
-
-
-

Output signed long

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (uint32_t arg) [inline, inherited]
-
-
-

Output uint32_t

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (char arg) [inline, inherited]
-
-
-

Output character

-
Parameters:
- - -
[in]argcharacter to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - - -
ostream& ostream::operator<< (const void * arg) [inline, inherited]
-
-
-

Output pointer

-
Parameters:
- - -
[in]argvalue to output
-
-
-
Returns:
the stream
- -
-
- -
-
- - - - - - - -
int ios_base::precision () const [inline, inherited]
-
-
-
Returns:
precision
- -
-
- -
-
- - - - - - - - -
int ios_base::precision (unsigned int n) [inline, inherited]
-
-
-

set precision

-
Parameters:
- - -
[in]nnew precision
-
-
-
Returns:
old precision
- -
-
- -
-
- - - - - - - - -
ostream& ostream::put (char ch) [inline, inherited]
-
-
-

Puts a character in a stream.

-

The unformatted output function inserts the element ch. It returns *this.

-
Parameters:
- - -
[in]chThe character
-
-
-
Returns:
A reference to the ostream object.
- -
-
- -
-
- - - - - - - -
iostate ios::rdstate () const [inline, inherited]
-
-
-
Returns:
The iostate flags for this file.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
ostream& ostream::seekp (off_type off,
seekdir way 
) [inline, inherited]
-
-
-

Set the stream position.

-
Parameters:
- - - -
[in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
[in]wayOne of ios::beg, ios::cur, or ios::end.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
ostream& ostream::seekp (pos_type pos) [inline, inherited]
-
-
-

Set the stream position

-
Parameters:
- - -
[in]posThe absolute position in which to move the write pointer.
-
-
-
Returns:
Is always *this. Failure is indicated by the state of *this.
- -
-
- -
-
- - - - - - - - -
fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
-
-
-

set format flags

-
Parameters:
- - -
[in]flnew flags to be or'ed in
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fmtflags ios_base::setf (fmtflags fl,
fmtflags mask 
) [inline, inherited]
-
-
-

modify format flags

-
Parameters:
- - - -
[in]maskflags to be removed
[in]flflags to be set after mask bits have been cleared
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - - -
void ios::setstate (iostate state) [inline, inherited]
-
-
-

Set iostate bits.

-
Parameters:
- - -
[in]stateBitts to set.
-
-
- -
-
- -
-
- - - - - - - -
pos_type ostream::tellp () [inline, inherited]
-
-
-
Returns:
the stream position
- -
-
- -
-
- - - - - - - - -
void ios_base::unsetf (fmtflags fl) [inline, inherited]
-
-
-

clear format flags

-
Parameters:
- - -
[in]flflags to be cleared
-
-
-
Returns:
old flags
- -
-
- -
-
- - - - - - - - -
unsigned ios_base::width (unsigned n) [inline, inherited]
-
-
-

set width

-
Parameters:
- - -
[in]nnew width
-
-
-
Returns:
old width
- -
-
- -
-
- - - - - - - -
unsigned ios_base::width () [inline, inherited]
-
-
-
Returns:
width
- -
-
-

Member Data Documentation

- -
-
- - - - -
const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
-
-
-

mask for adjustfield

- -
-
- -
-
- - - - -
const openmode ios_base::app = 0X4 [static, inherited]
-
-
-

seek to end before each write

- -
-
- -
-
- - - - -
const openmode ios_base::ate = 0X8 [static, inherited]
-
-
-

open and seek to end immediately after opening

- -
-
- -
-
- - - - -
const iostate ios_base::badbit = 0X01 [static, inherited]
-
-
-

iostate bad bit for a nonrecoverable error.

- -
-
- -
-
- - - - -
const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
-
-
-

mask for basefield

- -
-
- -
-
- - - - -
const openmode ios_base::binary = 0X10 [static, inherited]
-
-
-

perform input and output in binary mode (as opposed to text mode)

- -
-
- -
-
- - - - -
const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
-
-
-

use strings true/false for bool

- -
-
- -
-
- - - - -
const fmtflags ios_base::dec = 0x0008 [static, inherited]
-
-
-

base 10 flag

- -
-
- -
-
- - - - -
const iostate ios_base::eofbit = 0x02 [static, inherited]
-
-
-

iostate bit for end of file reached

- -
-
- -
-
- - - - -
const iostate ios_base::failbit = 0X04 [static, inherited]
-
-
-

iostate fail bit for nonfatal error

- -
-
- -
-
- - - - -
const iostate ios_base::goodbit = 0x00 [static, inherited]
-
-
-

iostate for no flags

- -
-
- -
-
- - - - -
const fmtflags ios_base::hex = 0x0010 [static, inherited]
-
-
-

base 16 flag

- -
-
- -
-
- - - - -
const openmode ios_base::in = 0X20 [static, inherited]
-
-
-

open for input

- -
-
- -
-
- - - - -
const fmtflags ios_base::internal = 0x0004 [static, inherited]
-
-
-

fill between sign/base prefix and number

- -
-
- -
-
- - - - -
const fmtflags ios_base::left = 0x0001 [static, inherited]
-
-
-

left adjust fields

- -
-
- -
-
- - - - -
const fmtflags ios_base::oct = 0x0020 [static, inherited]
-
-
-

base 8 flag

- -
-
- -
-
- - - - -
const openmode ios_base::out = 0X40 [static, inherited]
-
-
-

open for output

- -
-
- -
-
- - - - -
const fmtflags ios_base::right = 0x0002 [static, inherited]
-
-
-

right adjust fields

- -
-
- -
-
- - - - -
const fmtflags ios_base::showbase = 0x0200 [static, inherited]
-
-
-

use prefix 0X for hex and 0 for oct

- -
-
- -
-
- - - - -
const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
-
-
-

always show '.' for floating numbers

- -
-
- -
-
- - - - -
const fmtflags ios_base::showpos = 0x0800 [static, inherited]
-
-
-

show + sign for nonnegative numbers

- -
-
- -
-
- - - - -
const fmtflags ios_base::skipws = 0x1000 [static, inherited]
-
-
-

skip initial white space

- -
-
- -
-
- - - - -
const openmode ios_base::trunc = 0X80 [static, inherited]
-
-
-

truncate an existing stream when opening

- -
-
- -
-
- - - - -
const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
-
-
-

use uppercase letters in number representations

- -
-
-
The documentation for this class was generated from the following file: -
- - - diff --git a/libs/SdFatBeta20120108/html/class_arduino_out_stream__coll__graph.png b/libs/SdFatBeta20120108/html/class_arduino_out_stream__coll__graph.png deleted file mode 100755 index 25187aefa3b02ae8878ee91b82cbbb6ee1b50ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4577 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 Z>5o=O<8l|>gFhR<#K^+1?2=pb-vL*ZpgjNp diff --git a/libs/SdFatBeta20120108/html/class_arduino_out_stream__inherit__graph.png b/libs/SdFatBeta20120108/html/class_arduino_out_stream__inherit__graph.png deleted file mode 100755 index 44307795b280ddabeb102e721cc0edf42b586ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2729 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 diff --git a/libs/SdFatBeta20120108/html/class_print-members.html b/libs/SdFatBeta20120108/html/class_print-members.html deleted file mode 100755 index 7516395..0000000 --- a/libs/SdFatBeta20120108/html/class_print-members.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
Print Member List
-
-
-This is the complete list of members for Print, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - -
print(const String &)Print
print(const char[])Print
print(char, int=BYTE)Print
print(unsigned char, int=BYTE)Print
print(int, int=DEC)Print
print(unsigned int, int=DEC)Print
print(long, int=DEC)Print
print(unsigned long, int=DEC)Print
print(double, int=2)Print
println(const String &s)Print
println(const char[])Print
println(char, int=BYTE)Print
println(unsigned char, int=BYTE)Print
println(int, int=DEC)Print
println(unsigned int, int=DEC)Print
println(long, int=DEC)Print
println(unsigned long, int=DEC)Print
println(double, int=2)Print
println(void)Print
write(uint8_t b)=0Print [pure virtual]
write(const char *str)Print [virtual]
write(const uint8_t *buffer, size_t size)Print [virtual]
- - - diff --git a/libs/SdFatBeta20120108/html/class_print.html b/libs/SdFatBeta20120108/html/class_print.html deleted file mode 100755 index 49a70d6..0000000 --- a/libs/SdFatBeta20120108/html/class_print.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - -SdFat: Print Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Print Class Reference
-
-
- -

The Arduino core Print class. - More...

- -

#include <Print.h>

-
-Inheritance diagram for Print:
-
-
Inheritance graph
- - -
[legend]
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void print (const String &)
void print (const char[])
void print (int, int=DEC)
void print (unsigned int, int=DEC)
void print (long, int=DEC)
void print (unsigned long, int=DEC)
void print (char, int=BYTE)
void print (double, int=2)
void print (unsigned char, int=BYTE)
void println (unsigned int, int=DEC)
void println (const String &s)
void println (double, int=2)
void println (unsigned char, int=BYTE)
void println (unsigned long, int=DEC)
void println (void)
void println (long, int=DEC)
void println (const char[])
void println (int, int=DEC)
void println (char, int=BYTE)
virtual void write (uint8_t b)=0
virtual void write (const uint8_t *buffer, size_t size)
virtual void write (const char *str)
-

Detailed Description

-

The Arduino core Print class.

-

Member Function Documentation

- -
-
- - - - - - - - -
void Print::print (const String & s)
-
-
-

Write a string to the associated device.

-
Parameters:
- - -
[in]sthe string to be printed
-
-
- -
-
- -
-
- - - - - - - - -
void Print::print (const char str[])
-
-
-

Write a string to the associated device.

-
Parameters:
- - -
[in]strthe string to be printed
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (int n,
int base = DEC 
)
-
-
-

Write an signed number to the associated device in ASCII.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (unsigned int n,
int base = DEC 
)
-
-
-

Write an unsigned number to the associated device in ASCII.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (long n,
int base = DEC 
)
-
-
-

Write an signed number to the associated device in ASCII.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (unsigned long n,
int base = DEC 
)
-
-
-

Write an unsigned number to the associated device in ASCII.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (char c,
int base = BYTE 
)
-
-
-

Write an signed byte to the associated device in ASCII.

-
Parameters:
- - - -
[in]cthe byte to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (double n,
int digits = 2 
)
-
-
-

Write the decimal representation of an float or double to the associated device in ASCII.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]digitsthe digits in ftraction to be printed
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::print (unsigned char b,
int base = BYTE 
)
-
-
-

Write an unsigned byte to the associated device in ASCII.

-
Parameters:
- - - -
[in]bthe byte to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (unsigned int n,
int base = DEC 
)
-
-
-

Write an unsigned number to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - -
void Print::println (const String & s)
-
-
-

Write a string to the associated device followed by CR LF.

-
Parameters:
- - -
[in]sthe string to be printed
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (double n,
int digits = 2 
)
-
-
-

Write the decimal representation of an float or double to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]digitsthe digits in ftraction to be printed
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (unsigned char b,
int base = BYTE 
)
-
-
-

Write an unsigned byte to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]bthe byte to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (unsigned long n,
int base = DEC 
)
-
-
-

Write an unsigned number to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - -
void Print::println (void )
-
-
-

Print CR LF

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (long n,
int base = DEC 
)
-
-
-

Write an signed number to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - -
void Print::println (const char c[])
-
-
-

Write a string to the associated device followed by CR LF.

-
Parameters:
- - -
[in]cthe string to be printed
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (int n,
int base = DEC 
)
-
-
-

Write an signed number to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]nthe number to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::println (char c,
int base = BYTE 
)
-
-
-

Write an signed byte to the associated device in ASCII followed by CR LF.

-
Parameters:
- - - -
[in]cthe byte to be printed
[in]baseformat to be used
-
-
- -
-
- -
-
- - - - - - - - -
virtual void Print::write (uint8_t b) [pure virtual]
-
-
-

Virtual function to be implemented by the derived class for the hardware device.

-
Parameters:
- - -
[in]bThe byte to be sent to the device.
-
-
- -

Implemented in SdFile.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void Print::write (const uint8_t * buffer,
size_t size 
) [virtual]
-
-
-

default implementation: may be overridden

-
Parameters:
- - - -
[in]bufferpointer to data
[in]sizecount of bytes to be written
-
-
- -
-
- -
-
- - - - - - - - -
void Print::write (const char * str) [virtual]
-
-
-

default implementation: may be overridden

-
Parameters:
- - -
[in]strstring to be written
-
-
- -

Reimplemented in SdFile.

- -
-
-
The documentation for this class was generated from the following files:
    -
  • SdFatDoc/Print/Print.h
  • -
  • SdFatDoc/Print/Print.cpp
  • -
-
- - - diff --git a/libs/SdFatBeta20120108/html/class_print__inherit__graph.png b/libs/SdFatBeta20120108/html/class_print__inherit__graph.png deleted file mode 100755 index 4825be294b4bb6960441a7259448fe6ca7ccaaa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmeAS@N?(olHy`uVBq!ia0vp^&Olti!3HEg9tw>TMGjt^TI!ju2UziN>aOP zRr>PAR_Cjxzg=}U7%H%)Ca$y+P+SUZVHPdDGcdH?&z zPs?w%>;g_4hT>t1&u}%wGtA+bqpH%+cxSa%i2E^LhW%^Ttuy1D(z182?VC4m7))P9 zMIWoM$(yCkdHeS58+Y!oWL+`kmQOF7z~f}ZaZ*90`Ng)q2W`&x>#p7<^t3WA@>%Vv zv)-?b8Xiwwzv@VP(apZ9Su$H^*_{7>xv9c(y}q{b+OJz3CrmT!UKM7v^WTfl6*h5a zE~k7tQOLSVYx1WlotM&exOQz3n&hZ6rDw69$(5@v+dmv}+S+r$gH2JgB}HJ8BZ%Sh zwtDi~wQDC>Hf`L!`}V7E`&c&cA8_`$`%W`HZl6TTZTH~imn*NWni%lq_iKB8w%2wN zIdi<{sus>K+&??D?sdYx9aGJ`lO+HCyZ`)dt|Y^q&0CGr-_=hs@(+?s+n3g6-u_uV ze&3(hPN!^6rmR_0^Pe*yrr7;`!Nt13A5p7p9GoQQp0l6M@c8ng>^AM?{`JL1q03T? zx|DYF?)Yp}{-tW~($g!AR3{or<<4RHqm(eWGxS|t&0Hnn2_9~NBH?HM+?cFxT*B}> z%VN*(%&r*ElpVKa%e5zdyfCUYwn#&QO1J zX&2M_$LZca`}Y?X8$^76HR<8S$$HR;gU2A5j2^CeN)NgXCI?TeedFyt-}Sb0Wvweu z{^;M1({`G5%HYiX^aT&gqnGzi6I^v(L;1#3)q|(adpWNa&H6X@<34xIBZ0ZOvlssE zIr%m9>FhV}n|I9$X`LC9uX;MYc74vi(2{&7)TDK@_NXw!dFAxZlj00=3y!^4vuFBY oFVdQ&MBb@0I3btegFUf diff --git a/libs/SdFatBeta20120108/html/class_sd2_card-members.html b/libs/SdFatBeta20120108/html/class_sd2_card-members.html deleted file mode 100755 index feae245..0000000 --- a/libs/SdFatBeta20120108/html/class_sd2_card-members.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
Sd2Card Member List
-
-
-This is the complete list of members for Sd2Card, including all inherited members. - - - - - - - - - - - - - - - - - - - - -
cardSize()Sd2Card
erase(uint32_t firstBlock, uint32_t lastBlock)Sd2Card
eraseSingleBlockEnable()Sd2Card
error(uint8_t code)Sd2Card [inline]
errorCode() const Sd2Card [inline]
errorData() const Sd2Card [inline]
init(uint8_t sckRateID=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)Sd2Card
readBlock(uint32_t block, uint8_t *dst)Sd2Card
readCID(cid_t *cid)Sd2Card [inline]
readCSD(csd_t *csd)Sd2Card [inline]
readData(uint8_t *dst)Sd2Card
readStart(uint32_t blockNumber)Sd2Card
readStop()Sd2Card
Sd2Card()Sd2Card [inline]
setSckRate(uint8_t sckRateID)Sd2Card
type() const Sd2Card [inline]
writeBlock(uint32_t blockNumber, const uint8_t *src)Sd2Card
writeData(const uint8_t *src)Sd2Card
writeStart(uint32_t blockNumber, uint32_t eraseCount)Sd2Card
writeStop()Sd2Card
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd2_card.html b/libs/SdFatBeta20120108/html/class_sd2_card.html deleted file mode 100755 index b34d807..0000000 --- a/libs/SdFatBeta20120108/html/class_sd2_card.html +++ /dev/null @@ -1,590 +0,0 @@ - - - - -SdFat: Sd2Card Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
- -
-
Sd2Card Class Reference
-
-
- -

Raw access to SD and SDHC flash memory cards. - More...

- -

#include <Sd2Card.h>

- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

uint32_t cardSize ()
bool erase (uint32_t firstBlock, uint32_t lastBlock)
bool eraseSingleBlockEnable ()
void error (uint8_t code)
int errorCode () const
int errorData () const
bool init (uint8_t sckRateID=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)
bool readBlock (uint32_t block, uint8_t *dst)
bool readCID (cid_t *cid)
bool readCSD (csd_t *csd)
bool readData (uint8_t *dst)
bool readStart (uint32_t blockNumber)
bool readStop ()
 Sd2Card ()
bool setSckRate (uint8_t sckRateID)
int type () const
bool writeBlock (uint32_t blockNumber, const uint8_t *src)
bool writeData (const uint8_t *src)
bool writeStart (uint32_t blockNumber, uint32_t eraseCount)
bool writeStop ()
-

Detailed Description

-

Raw access to SD and SDHC flash memory cards.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - -
Sd2Card::Sd2Card () [inline]
-
-
-

Construct an instance of Sd2Card.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - -
uint32_t Sd2Card::cardSize ()
-
-
-

Determine the size of an SD flash memory card.

-
Returns:
The number of 512 byte data blocks in the card or zero if an error occurs.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::erase (uint32_t firstBlock,
uint32_t lastBlock 
)
-
-
-

Erase a range of blocks.

-
Parameters:
- - - -
[in]firstBlockThe address of the first block in the range.
[in]lastBlockThe address of the last block in the range.
-
-
-
Note:
This function requests the SD card to do a flash erase for a range of blocks. The data on the card after an erase operation is either 0 or 1, depends on the card vendor. The card must support single block erase.
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
bool Sd2Card::eraseSingleBlockEnable ()
-
-
-

Determine if card supports single block erase.

-
Returns:
The value one, true, is returned if single block erase is supported. The value zero, false, is returned if single block erase is not supported.
- -
-
- -
-
- - - - - - - - -
void Sd2Card::error (uint8_t code) [inline]
-
-
-

Set SD error code.

-
Parameters:
- - -
[in]codevalue for error code.
-
-
- -
-
- -
-
- - - - - - - -
int Sd2Card::errorCode () const [inline]
-
-
-
Returns:
error code for last error. See Sd2Card.h for a list of error codes.
- -
-
- -
-
- - - - - - - -
int Sd2Card::errorData () const [inline]
-
-
-
Returns:
error data for last error.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::init (uint8_t sckRateID = SPI_FULL_SPEED,
uint8_t chipSelectPin = SD_CHIP_SELECT_PIN 
)
-
-
-

Initialize an SD flash memory card with default clock rate and chip select pin. See sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin).

-
Returns:
true for success or false for failure.
-

Initialize an SD flash memory card.

-
Parameters:
- - - -
[in]sckRateIDSPI clock rate selector. See setSckRate().
[in]chipSelectPinSD chip select pin number.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. The reason for failure can be determined by calling errorCode() and errorData().
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::readBlock (uint32_t blockNumber,
uint8_t * dst 
)
-
-
-

Read a 512 byte block from an SD card.

-
Parameters:
- - - -
[in]blockNumberLogical block to be read.
[out]dstPointer to the location that will receive the data.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::readCID (cid_t * cid) [inline]
-
-
-

Read a card's CID register. The CID contains card identification information such as Manufacturer ID, Product name, Product serial number and Manufacturing date.

-
Parameters:
- - -
[out]cidpointer to area for returned data.
-
-
-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::readCSD (csd_t * csd) [inline]
-
-
-

Read a card's CSD register. The CSD contains Card-Specific Data that provides information regarding access to the card's contents.

-
Parameters:
- - -
[out]csdpointer to area for returned data.
-
-
-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::readData (uint8_t * dst)
-
-
-

Read one data block in a multiple block read sequence

-
Parameters:
- - -
[in]dstPointer to the location for the data to be read.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::readStart (uint32_t blockNumber)
-
-
-

Start a read multiple blocks sequence.

-
Parameters:
- - -
[in]blockNumberAddress of first block in sequence.
-
-
-
Note:
This function is used with readData() and readStop() for optimized multiple block reads. SPI chipSelect must be low for the entire sequence.
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
bool Sd2Card::readStop ()
-
-
-

End a read multiple blocks sequence.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::setSckRate (uint8_t sckRateID)
-
-
-

Set the SPI clock rate.

-
Parameters:
- - -
[in]sckRateIDA value in the range [0, 6].
-
-
-

The SPI clock will be set to F_CPU/pow(2, 1 + sckRateID). The maximum SPI rate is F_CPU/2 for sckRateID = 0 and the minimum rate is F_CPU/128 for scsRateID = 6.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for an invalid value of sckRateID.
- -
-
- -
-
- - - - - - - -
int Sd2Card::type () const [inline]
-
-
-

Return the card type: SD V1, SD V2 or SDHC

-
Returns:
0 - SD V1, 1 - SD V2, or 3 - SDHC.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::writeBlock (uint32_t blockNumber,
const uint8_t * src 
)
-
-
-

Writes a 512 byte block to an SD card.

-
Parameters:
- - - -
[in]blockNumberLogical block to be written.
[in]srcPointer to the location of the data to be written.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool Sd2Card::writeData (const uint8_t * src)
-
-
-

Write one data block in a multiple block write sequence

-
Parameters:
- - -
[in]srcPointer to the location of the data to be written.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::writeStart (uint32_t blockNumber,
uint32_t eraseCount 
)
-
-
-

Start a write multiple blocks sequence.

-
Parameters:
- - - -
[in]blockNumberAddress of first block in sequence.
[in]eraseCountThe number of blocks to be pre-erased.
-
-
-
Note:
This function is used with writeData() and writeStop() for optimized multiple block writes.
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
bool Sd2Card::writeStop ()
-
-
-

End a write multiple blocks sequence.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/Sd2Card.h
  • -
  • Arduino/libraries/SdFat/Sd2Card.cpp
  • -
-
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd_base_file-members.html b/libs/SdFatBeta20120108/html/class_sd_base_file-members.html deleted file mode 100755 index af46f87..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_base_file-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
SdBaseFile Member List
-
-
-This is the complete list of members for SdBaseFile, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
close()SdBaseFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile
createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile
curCluster() const SdBaseFile [inline]
curPosition() const SdBaseFile [inline]
cwd()SdBaseFile [inline, static]
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, static]
dateTimeCallbackCancel()SdBaseFile [inline, static]
dirEntry(dir_t *dir)SdBaseFile
dirName(const dir_t &dir, char *name)SdBaseFile [static]
exists(const char *name)SdBaseFile
fgets(char *str, int16_t num, char *delim=0)SdBaseFile
fileSize() const SdBaseFile [inline]
firstCluster() const SdBaseFile [inline]
getFilename(char *name)SdBaseFile
getpos(fpos_t *pos)SdBaseFile
isDir() const SdBaseFile [inline]
isFile() const SdBaseFile [inline]
isOpen() const SdBaseFile [inline]
isRoot() const SdBaseFile [inline]
isSubDir() const SdBaseFile [inline]
ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile
ls(uint8_t flags=0)SdBaseFile
mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile
open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile
open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile
open(const char *path, uint8_t oflag=O_READ)SdBaseFile
openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile
openRoot(SdVolume *vol)SdBaseFile
peek()SdBaseFile
printFatDate(uint16_t fatDate)SdBaseFile [static]
printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [static]
printFatTime(uint16_t fatTime)SdBaseFile [static]
printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [static]
printName()SdBaseFile
read()SdBaseFile
read(void *buf, uint16_t nbyte)SdBaseFile
readDir(dir_t *dir)SdBaseFile
remove(SdBaseFile *dirFile, const char *path)SdBaseFile [static]
remove()SdBaseFile
rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile
rewind()SdBaseFile [inline]
rmdir()SdBaseFile
rmRfStar()SdBaseFile
SdBaseFile()SdBaseFile [inline]
SdBaseFile(const char *path, uint8_t oflag)SdBaseFile
SdFat (defined in SdBaseFile)SdBaseFile [friend]
seekCur(int32_t offset)SdBaseFile [inline]
seekEnd(int32_t offset=0)SdBaseFile [inline]
seekSet(uint32_t pos)SdBaseFile
setpos(fpos_t *pos)SdBaseFile
sync()SdBaseFile
timestamp(SdBaseFile *file)SdBaseFile
timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile
truncate(uint32_t size)SdBaseFile
type() const SdBaseFile [inline]
volume() const SdBaseFile [inline]
write(const void *buf, uint16_t nbyte)SdBaseFile
writeErrorSdBaseFile
~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline]
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd_base_file.html b/libs/SdFatBeta20120108/html/class_sd_base_file.html deleted file mode 100755 index be6027f..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_base_file.html +++ /dev/null @@ -1,1758 +0,0 @@ - - - - -SdFat: SdBaseFile Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
- -
- -

Base class for SdFile with Print and C++ streams. - More...

- -

#include <SdBaseFile.h>

-
-Inheritance diagram for SdBaseFile:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdBaseFile:
-
-
Collaboration graph
- - -
[legend]
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool close ()
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
uint32_t curCluster () const
uint32_t curPosition () const
bool dirEntry (dir_t *dir)
bool exists (const char *name)
int16_t fgets (char *str, int16_t num, char *delim=0)
uint32_t fileSize () const
uint32_t firstCluster () const
bool getFilename (char *name)
void getpos (fpos_t *pos)
bool isDir () const
bool isFile () const
bool isOpen () const
bool isRoot () const
bool isSubDir () const
void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
void ls (uint8_t flags=0)
bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
bool open (const char *path, uint8_t oflag=O_READ)
bool openNext (SdBaseFile *dirFile, uint8_t oflag)
bool openRoot (SdVolume *vol)
int peek ()
bool printName ()
int16_t read ()
int16_t read (void *buf, uint16_t nbyte)
int8_t readDir (dir_t *dir)
bool remove ()
bool rename (SdBaseFile *dirFile, const char *newPath)
void rewind ()
bool rmdir ()
bool rmRfStar ()
 SdBaseFile (const char *path, uint8_t oflag)
 SdBaseFile ()
bool seekCur (int32_t offset)
bool seekEnd (int32_t offset=0)
bool seekSet (uint32_t pos)
void setpos (fpos_t *pos)
bool sync ()
bool timestamp (SdBaseFile *file)
bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
bool truncate (uint32_t size)
uint8_t type () const
SdVolumevolume () const
int16_t write (const void *buf, uint16_t nbyte)

-Static Public Member Functions

static SdBaseFilecwd ()
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
static void dateTimeCallbackCancel ()
static void dirName (const dir_t &dir, char *name)
static void printFatDate (uint16_t fatDate)
static void printFatDate (Print *pr, uint16_t fatDate)
static void printFatTime (Print *pr, uint16_t fatTime)
static void printFatTime (uint16_t fatTime)
static bool remove (SdBaseFile *dirFile, const char *path)

-Public Attributes

bool writeError

-Friends

-class SdFat
-

Detailed Description

-

Base class for SdFile with Print and C++ streams.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - -
SdBaseFile::SdBaseFile () [inline]
-
-
-

Create an instance.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
SdBaseFile::SdBaseFile (const char * path,
uint8_t oflag 
)
-
-
-

Create a file object and open it in the current working directory.

-
Parameters:
- - - -
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
-
-
- -
-
-

Member Function Documentation

- -
-
- - - - - - - -
bool SdBaseFile::close ()
-
-
-

Close a file and force cached data and directory information to be written to the storage device.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
- -

Reimplemented in fstream, ifstream, and ofstream.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
uint32_t * endBlock 
)
-
-
-

Check for contiguous file and return its raw block range.

-
Parameters:
- - - -
[out]bgnBlockthe first block address for the file.
[out]endBlockthe last block address for the file.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdBaseFile::createContiguous (SdBaseFiledirFile,
const char * path,
uint32_t size 
)
-
-
-

Create and open a new contiguous file of a specified size.

-
Note:
This function only supports short DOS 8.3 names. See open() for more information.
-
Parameters:
- - - - -
[in]dirFileThe directory where the file will be created.
[in]pathA path with a valid DOS 8.3 file name.
[in]sizeThe desired file size.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
- -
-
- -
-
- - - - - - - -
uint32_t SdBaseFile::curCluster () const [inline]
-
-
-
Returns:
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - - - -
uint32_t SdBaseFile::curPosition () const [inline]
-
-
-
Returns:
The current position for a file or directory.
- -
-
- -
-
- - - - - - - -
static SdBaseFile* SdBaseFile::cwd () [inline, static]
-
-
-
Returns:
Current working directory
- -
-
- -
-
- - - - - - - - -
static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime) [inline, static]
-
-
-

Set the date/time callback function

-
Parameters:
- - -
[in]dateTimeThe user's call back function. The callback function is of the form:
-
-
-
 void dateTime(uint16_t* date, uint16_t* time) {
-   uint16_t year;
-   uint8_t month, day, hour, minute, second;
-
-   // User gets date and time from GPS or real-time clock here
-
-   // return date using FAT_DATE macro to format fields
-   *date = FAT_DATE(year, month, day);
-
-   // return time using FAT_TIME macro to format fields
-   *time = FAT_TIME(hour, minute, second);
- }
-

Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

-

See the timestamp() function.

- -
-
- -
-
- - - - - - - -
static void SdBaseFile::dateTimeCallbackCancel () [inline, static]
-
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::dirEntry (dir_tdir)
-
-
-

Return a file's directory entry.

-
Parameters:
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdBaseFile::dirName (const dir_tdir,
char * name 
) [static]
-
-
-

Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

-
Parameters:
- - - -
[in]dirThe directory structure containing the name.
[out]nameA 13 byte char array for the formatted name.
-
-
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::exists (const char * name)
-
-
-

Test for the existence of a file in a directory

-
Parameters:
- - -
[in]nameName of the file to be tested for.
-
-
-

The calling instance must be an open directory file.

-

dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

-
Returns:
true if the file exists else false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int16_t SdBaseFile::fgets (char * str,
int16_t num,
char * delim = 0 
)
-
-
-

Get a string from a file.

-

fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

-

fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

-
Parameters:
- - - - -
[out]strPointer to the array where the string is stored.
[in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
[in]delimOptional set of delimiters. The default is "\n".
-
-
-
Returns:
For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
- -
-
- -
-
- - - - - - - -
uint32_t SdBaseFile::fileSize () const [inline]
-
-
-
Returns:
The total number of bytes in a file or directory.
- -
-
- -
-
- - - - - - - -
uint32_t SdBaseFile::firstCluster () const [inline]
-
-
-
Returns:
The first cluster number for a file or directory.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::getFilename (char * name)
-
-
-

Get a file's name

-
Parameters:
- - -
[out]nameAn array of 13 characters for the file's name.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
void SdBaseFile::getpos (fpos_tpos)
-
-
-

get position for streams

-
Parameters:
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::isDir () const [inline]
-
-
-
Returns:
True if this is a directory else false.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::isFile () const [inline]
-
-
-
Returns:
True if this is a normal file else false.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::isOpen () const [inline]
-
-
-
Returns:
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::isRoot () const [inline]
-
-
-
Returns:
True if this is the root directory.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::isSubDir () const [inline]
-
-
-
Returns:
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void SdBaseFile::ls (Printpr,
uint8_t flags = 0,
uint8_t indent = 0 
)
-
-
-

List directory contents.

-
Parameters:
- - - -
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
-
-
-

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

-
Parameters:
- - -
[in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
-
-
- -
-
- -
-
- - - - - - - - -
void SdBaseFile::ls (uint8_t flags = 0)
-
-
-

List directory contents to stdOut.

-
Parameters:
- - -
[in]flagsThe inclusive OR of
-
-
-

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdBaseFile::mkdir (SdBaseFileparent,
const char * path,
bool pFlag = true 
)
-
-
-

Make a new directory.

-
Parameters:
- - - - -
[in]parentAn open SdFat instance for the directory that will contain the new directory.
[in]pathA path with a valid 8.3 DOS name for the new directory.
[in]pFlagCreate missing parent directories if true.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdBaseFile::open (SdBaseFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-
-

Open a file by index.

-
Parameters:
- - - - -
[in]dirFileAn open SdFat instance for the directory.
[in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
-
-
-

See open() by path for definition of flags.

-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdBaseFile::open (SdBaseFiledirFile,
const char * path,
uint8_t oflag 
)
-
-
-

Open a file or directory by name.

-
Parameters:
- - - - -
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
-
-
-

O_READ - Open for reading.

-

O_RDONLY - Same as O_READ.

-

O_WRITE - Open for writing.

-

O_WRONLY - Same as O_WRITE.

-

O_RDWR - Open for reading and writing.

-

O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

-

O_AT_END - Set the initial position at the end of the file.

-

O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

-

O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

-

O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

-

O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

-

WARNING: A given file must not be opened by more than one SdBaseFile object of file corruption may occur.

-
Note:
Directory files must be opened read only. Write and truncation is not allowed for directory files.
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdBaseFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-
-

Open a file in the current working directory.

-
Parameters:
- - - -
[in]pathA path with a valid 8.3 DOS name for a file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -

Reimplemented in fstream, ifstream, and ofstream.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdBaseFile::openNext (SdBaseFiledirFile,
uint8_t oflag 
)
-
-
-

Open the next file or subdirectory in a directory.

-
Parameters:
- - - -
[in]dirFileAn open SdFat instance for the directory containing the file to be opened.
[in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
-
-
-

See open() by path for definition of flags.

-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::openRoot (SdVolumevol)
-
-
-

Open a volume's root directory.

-
Parameters:
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
- -
-
- -
-
- - - - - - - -
int SdBaseFile::peek ()
-
-
-

Return the next available byte without consuming it.

-
Returns:
The byte if no error and not at eof else -1;
- -
-
- -
-
- - - - - - - - -
void SdBaseFile::printFatDate (uint16_t fatDate) [static]
-
-
-

Print a directory date field to stdOut.

-

Format is yyyy-mm-dd.

-
Parameters:
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdBaseFile::printFatDate (Printpr,
uint16_t fatDate 
) [static]
-
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters:
- - - -
[in]prPrint stream for output.
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdBaseFile::printFatTime (Printpr,
uint16_t fatTime 
) [static]
-
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters:
- - - -
[in]prPrint stream for output.
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - - - - -
void SdBaseFile::printFatTime (uint16_t fatTime) [static]
-
-
-

Print a directory time field to stdOut.

-

Format is hh:mm:ss.

-
Parameters:
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::printName ()
-
-
-

Print a file's name to stdOut

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
int16_t SdBaseFile::read ()
-
-
-

Read the next byte from a file.

-
Returns:
For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int16_t SdBaseFile::read (void * buf,
uint16_t nbyte 
)
-
-
-

Read data from a file starting at the current position.

-
Parameters:
- - - -
[out]bufPointer to the location that will receive the data.
[in]nbyteMaximum number of bytes to read.
-
-
-
Returns:
For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
- -
-
- -
-
- - - - - - - - -
int8_t SdBaseFile::readDir (dir_tdir)
-
-
-

Read the next directory entry from a directory file.

-
Parameters:
- - -
[out]dirThe dir_t struct that will receive the data.
-
-
-
Returns:
For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdBaseFile::remove (SdBaseFiledirFile,
const char * path 
) [static]
-
-
-

Remove a file.

-

The directory entry and all data for the file are deleted.

-
Parameters:
- - - -
[in]dirFileThe directory that contains the file.
[in]pathPath for the file to be removed.
-
-
-
Note:
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::remove ()
-
-
-

Remove a file.

-

The directory entry and all data for the file are deleted.

-
Note:
This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdBaseFile::rename (SdBaseFiledirFile,
const char * newPath 
)
-
-
-

Rename a file or subdirectory.

-
Parameters:
- - - -
[in]dirFileDirectory for the new path.
[in]newPathNew path name for the file/directory.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
- -
-
- -
-
- - - - - - - -
void SdBaseFile::rewind () [inline]
-
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - - - -
bool SdBaseFile::rmdir ()
-
-
-

Remove a directory file.

-

The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

-
Note:
This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::rmRfStar ()
-
-
-

Recursively delete a directory and all contained files.

-

This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

-

Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

-
Note:
This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::seekCur (int32_t offset) [inline]
-
-
-

Set the files position to current position + pos. See seekSet().

-
Parameters:
- - -
[in]offsetThe new position in bytes from the current position.
-
-
-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::seekEnd (int32_t offset = 0) [inline]
-
-
-

Set the files position to end-of-file + offset. See seekSet().

-
Parameters:
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns:
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::seekSet (uint32_t pos)
-
-
-

Sets a file's position.

-
Parameters:
- - -
[in]posThe new position in bytes from the beginning of the file.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
void SdBaseFile::setpos (fpos_tpos)
-
-
-

set position for streams

-
Parameters:
- - -
[out]posstruct with value for new position
-
-
- -
-
- -
-
- - - - - - - -
bool SdBaseFile::sync ()
-
-
-

The sync() call causes all modified data and directory fields to be written to the storage device.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::timestamp (SdBaseFilefile)
-
-
-

Copy a file's timestamps

-
Parameters:
- - -
[in]fileFile to copy timestamps from.
-
-
-
Note:
Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool SdBaseFile::timestamp (uint8_t flags,
uint16_t year,
uint8_t month,
uint8_t day,
uint8_t hour,
uint8_t minute,
uint8_t second 
)
-
-
-

Set a file's timestamps in its directory entry.

-
Parameters:
- - -
[in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
-
-
-

T_ACCESS - Set the file's last access date.

-

T_CREATE - Set the file's creation date and time.

-

T_WRITE - Set the file's last write/modification date and time.

-
Parameters:
- - - - - - - -
[in]yearValid range 1980 - 2107 inclusive.
[in]monthValid range 1 - 12 inclusive.
[in]dayValid range 1 - 31 inclusive.
[in]hourValid range 0 - 23 inclusive.
[in]minuteValid range 0 - 59 inclusive.
[in]secondValid range 0 - 59 inclusive
-
-
-
Note:
It is possible to set an invalid date since there is no check for the number of days in a month.
-
-Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdBaseFile::truncate (uint32_t length)
-
-
-

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

-
Parameters:
- - -
[in]lengthThe desired length for the file.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
- -
-
- -
-
- - - - - - - -
uint8_t SdBaseFile::type () const [inline]
-
-
-

Type of file. You should use isFile() or isDir() instead of type() if possible.

-
Returns:
The file or directory type.
- -
-
- -
-
- - - - - - - -
SdVolume* SdBaseFile::volume () const [inline]
-
-
-
Returns:
SdVolume that contains this file.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int16_t SdBaseFile::write (const void * buf,
uint16_t nbyte 
)
-
-
-

Write data to an open file.

-
Note:
Data is moved to the cache but may not be written to the storage device until sync() is called.
-
Parameters:
- - - -
[in]bufPointer to the location of the data to be written.
[in]nbyteNumber of bytes to write.
-
-
-
Returns:
For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
- -

Reimplemented in SdFile.

- -
-
-

Member Data Documentation

- -
-
- - - - -
bool SdBaseFile::writeError
-
-
-

writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/SdBaseFile.h
  • -
  • Arduino/libraries/SdFat/SdBaseFile.cpp
  • -
-
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd_base_file__coll__graph.png b/libs/SdFatBeta20120108/html/class_sd_base_file__coll__graph.png deleted file mode 100755 index 98312f927d722cc2ad7813182b294044721c8c0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14023 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 ZTs~h~eowB9tC2rfSJ6=}fAsA2{{ctVWD@`Y diff --git a/libs/SdFatBeta20120108/html/class_sd_base_file__inherit__graph.png b/libs/SdFatBeta20120108/html/class_sd_base_file__inherit__graph.png deleted file mode 100755 index db2f5cb5af98e562a246956022d0d22d9b6a0ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6300 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 diff --git a/libs/SdFatBeta20120108/html/class_sd_fat-members.html b/libs/SdFatBeta20120108/html/class_sd_fat-members.html deleted file mode 100755 index 999fe77..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_fat-members.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - -SdFat: Member List - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
-
-
-
SdFat Member List
-
-
-This is the complete list of members for SdFat, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
card()SdFat [inline]
chdir(bool set_cwd=false)SdFat
chdir(const char *path, bool set_cwd=false)SdFat
chvol()SdFat
errorHalt()SdFat
errorHalt(char const *msg)SdFat
errorHalt_P(PGM_P msg)SdFat
errorPrint()SdFat
errorPrint(char const *msg)SdFat
errorPrint_P(PGM_P msg)SdFat
exists(const char *name)SdFat
init(uint8_t sckRateID=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)SdFat
initErrorHalt()SdFat
initErrorHalt(char const *msg)SdFat
initErrorHalt_P(PGM_P msg)SdFat
initErrorPrint()SdFat
initErrorPrint(char const *msg)SdFat
initErrorPrint_P(PGM_P msg)SdFat
ls(uint8_t flags=0)SdFat
ls(Print *pr, uint8_t flags=0)SdFat
mkdir(const char *path, bool pFlag=true)SdFat
remove(const char *path)SdFat
rename(const char *oldPath, const char *newPath)SdFat
rmdir(const char *path)SdFat
SdFat() (defined in SdFat)SdFat [inline]
setStdOut(Print *stream)SdFat [inline, static]
stdOut()SdFat [inline, static]
truncate(const char *path, uint32_t length)SdFat
vol()SdFat [inline]
vwd()SdFat [inline]
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd_fat.html b/libs/SdFatBeta20120108/html/class_sd_fat.html deleted file mode 100755 index 46cbbdb..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_fat.html +++ /dev/null @@ -1,832 +0,0 @@ - - - - -SdFat: SdFat Class Reference - - - - - -
-
- - - - - - -
-
SdFat
-
-
- - -
- -
- -

Integration class for the SdFat library. - More...

- -

#include <SdFat.h>

-
-Collaboration diagram for SdFat:
-
-
Collaboration graph
- - -
[legend]
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

Sd2Cardcard ()
bool chdir (const char *path, bool set_cwd=false)
bool chdir (bool set_cwd=false)
void chvol ()
void errorHalt (char const *msg)
void errorHalt ()
void errorHalt_P (PGM_P msg)
void errorPrint ()
void errorPrint (char const *msg)
void errorPrint_P (PGM_P msg)
bool exists (const char *name)
bool init (uint8_t sckRateID=SPI_FULL_SPEED, uint8_t chipSelectPin=SD_CHIP_SELECT_PIN)
void initErrorHalt ()
void initErrorHalt (char const *msg)
void initErrorHalt_P (PGM_P msg)
void initErrorPrint ()
void initErrorPrint (char const *msg)
void initErrorPrint_P (PGM_P msg)
void ls (Print *pr, uint8_t flags=0)
void ls (uint8_t flags=0)
bool mkdir (const char *path, bool pFlag=true)
bool remove (const char *path)
bool rename (const char *oldPath, const char *newPath)
bool rmdir (const char *path)
bool truncate (const char *path, uint32_t length)
SdVolumevol ()
SdBaseFilevwd ()

-Static Public Member Functions

static void setStdOut (Print *stream)
static PrintstdOut ()
-

Detailed Description

-

Integration class for the SdFat library.

-

Member Function Documentation

- -
-
- - - - - - - -
Sd2Card* SdFat::card () [inline]
-
-
-
Returns:
a pointer to the Sd2Card object.
- -
-
- -
-
- - - - - - - - -
bool SdFat::chdir (bool set_cwd = false)
-
-
-

Change a volume's working directory to root

-

Changes the volume's working directory to the SD's root directory. Optionally set the current working directory to the volume's working directory.

-
Parameters:
- - -
[in]set_cwdSet the current working directory to this volume's working directory if true.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdFat::chdir (const char * path,
bool set_cwd = false 
)
-
-
-

Change a volume's working directory

-

Changes the volume working directory to the path subdirectory. Optionally set the current working directory to the volume's working directory.

-

Example: If the volume's working directory is "/DIR", chdir("SUB") will change the volume's working directory from "/DIR" to "/DIR/SUB".

-

If path is "/", the volume's working directory will be changed to the root directory

-
Parameters:
- - - -
[in]pathThe name of the subdirectory.
[in]set_cwdSet the current working directory to this volume's working directory if true.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
void SdFat::chvol ()
-
-
-

Set the current working directory to a volume's working directory.

-

This is useful with multiple SD cards.

-

The current working directory is changed to this volume's working directory.

-

This is like the Windows/DOS <drive letter>: command.

- -
-
- -
-
- - - - - - - -
void SdFat::errorHalt ()
-
-
-

Print any SD error code and halt.

- -
-
- -
-
- - - - - - - - -
void SdFat::errorHalt (char const * msg)
-
-
-

Print msg, any SD error code, and halt.

-
Parameters:
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - -
void SdFat::errorHalt_P (PGM_P msg)
-
-
-

Print msg, any SD error code, and halt.

-
Parameters:
- - -
[in]msgMessage in program space (flash memory) to print.
-
-
- -
-
- -
-
- - - - - - - -
void SdFat::errorPrint ()
-
-
-

Print any SD error code.

- -
-
- -
-
- - - - - - - - -
void SdFat::errorPrint (char const * msg)
-
-
-

Print msg, any SD error code.

-
Parameters:
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - -
void SdFat::errorPrint_P (PGM_P msg)
-
-
-

Print msg, any SD error code.

-
Parameters:
- - -
[in]msgMessage in program space (flash memory) to print.
-
-
- -
-
- -
-
- - - - - - - - -
bool SdFat::exists (const char * name)
-
-
-

Test for the existence of a file.

-
Parameters:
- - -
[in]nameName of the file to be tested for.
-
-
-
Returns:
true if the file exists else false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdFat::init (uint8_t sckRateID = SPI_FULL_SPEED,
uint8_t chipSelectPin = SD_CHIP_SELECT_PIN 
)
-
-
-

Initialize an SdFat object.

-

Initializes the SD card, SD volume, and root directory.

-
Parameters:
- - - -
[in]sckRateIDvalue for SPI SCK rate. See Sd2Card::init().
[in]chipSelectPinSD chip select pin. See Sd2Card::init().
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - -
void SdFat::initErrorHalt ()
-
-
-

Print error details and halt after SdFat::init() fails.

- -
-
- -
-
- - - - - - - - -
void SdFat::initErrorHalt (char const * msg)
-
-
-

Print message, error details, and halt after SdFat::init() fails.

-
Parameters:
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - -
void SdFat::initErrorHalt_P (PGM_P msg)
-
-
-

Print message, error details, and halt after SdFat::init() fails.

-
Parameters:
- - -
[in]msgMessage in program space (flash memory) to print.
-
-
- -
-
- -
-
- - - - - - - -
void SdFat::initErrorPrint ()
-
-
-

Print error details after SdFat::init() fails.

- -
-
- -
-
- - - - - - - - -
void SdFat::initErrorPrint (char const * msg)
-
-
-

Print message and error details and halt after SdFat::init() fails.

-
Parameters:
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - -
void SdFat::initErrorPrint_P (PGM_P msg)
-
-
-

Print message and error details after SdFat::init() fails.

-
Parameters:
- - -
[in]msgMessage in program space (flash memory) to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFat::ls (Printpr,
uint8_t flags = 0 
)
-
-
-

List the directory contents of the volume working directory.

-
Parameters:
- - - -
[in]prPrint stream for list.
[in]flagsThe inclusive OR of
-
-
-

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - - - - -
void SdFat::ls (uint8_t flags = 0)
-
-
-

List the directory contents of the volume working directory to stdOut.

-
Parameters:
- - -
[in]flagsThe inclusive OR of
-
-
-

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdFat::mkdir (const char * path,
bool pFlag = true 
)
-
-
-

Make a subdirectory in the volume working directory.

-
Parameters:
- - - -
[in]pathA path with a valid 8.3 DOS name for the subdirectory.
[in]pFlagCreate missing parent directories if true.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdFat::remove (const char * path)
-
-
-

Remove a file from the volume working directory.

-
Parameters:
- - -
[in]pathA path with a valid 8.3 DOS name for the file.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdFat::rename (const char * oldPath,
const char * newPath 
)
-
-
-

Rename a file or subdirectory.

-
Parameters:
- - - -
[in]oldPathPath name to the file or subdirectory to be renamed.
[in]newPathNew path name of the file or subdirectory.
-
-
-

The newPath object must not exist before the rename call.

-

The file to be renamed must not be open. The directory entry may be moved and file system corruption could occur if the file is accessed by a file object that was opened before the rename() call.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdFat::rmdir (const char * path)
-
-
-

Remove a subdirectory from the volume's working directory.

-
Parameters:
- - -
[in]pathA path with a valid 8.3 DOS name for the subdirectory.
-
-
-

The subdirectory file will be removed only if it is empty.

-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
static void SdFat::setStdOut (Printstream) [inline, static]
-
-
-

Set stdOut Print stream for messages.

-
Parameters:
- - -
[in]streamThe new Print stream.
-
-
- -
-
- -
-
- - - - - - - -
static Print* SdFat::stdOut () [inline, static]
-
-
-
Returns:
Print stream for messages.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdFat::truncate (const char * path,
uint32_t length 
)
-
-
-

Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

-
Parameters:
- - - -
[in]pathA path with a valid 8.3 DOS name for the file.
[in]lengthThe desired length for the file.
-
-
-
Returns:
The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
- -
-
- -
-
- - - - - - - -
SdVolume* SdFat::vol () [inline]
-
-
-
Returns:
a pointer to the SdVolume object.
- -
-
- -
-
- - - - - - - -
SdBaseFile* SdFat::vwd () [inline]
-
-
-
Returns:
a pointer to the volume working directory.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
  • Arduino/libraries/SdFat/SdFat.cpp
  • -
-
- - - diff --git a/libs/SdFatBeta20120108/html/class_sd_fat__coll__graph.png b/libs/SdFatBeta20120108/html/class_sd_fat__coll__graph.png deleted file mode 100755 index 248d3af284eed1e74bbce518b1b4d02ee6211c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21877 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 aI|74GiZ#%a9ywr+D#X&<4qkoHJMsTMt2Mv? diff --git a/libs/SdFatBeta20120108/html/class_sd_file-members.html b/libs/SdFatBeta20120108/html/class_sd_file-members.html deleted file mode 100755 index 57d9db6..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_file-members.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - -SdFat: Member List - - - - - -

    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    SdFile Member List
    -
    -
    -This is the complete list of members for SdFile, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    close()SdBaseFile
    contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile
    createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile
    curCluster() const SdBaseFile [inline]
    curPosition() const SdBaseFile [inline]
    cwd()SdBaseFile [inline, static]
    dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, static]
    dateTimeCallbackCancel()SdBaseFile [inline, static]
    dirEntry(dir_t *dir)SdBaseFile
    dirName(const dir_t &dir, char *name)SdBaseFile [static]
    exists(const char *name)SdBaseFile
    fgets(char *str, int16_t num, char *delim=0)SdBaseFile
    fileSize() const SdBaseFile [inline]
    firstCluster() const SdBaseFile [inline]
    getFilename(char *name)SdBaseFile
    getpos(fpos_t *pos)SdBaseFile
    isDir() const SdBaseFile [inline]
    isFile() const SdBaseFile [inline]
    isOpen() const SdBaseFile [inline]
    isRoot() const SdBaseFile [inline]
    isSubDir() const SdBaseFile [inline]
    ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile
    ls(uint8_t flags=0)SdBaseFile
    mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile
    open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile
    open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile
    open(const char *path, uint8_t oflag=O_READ)SdBaseFile
    openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile
    openRoot(SdVolume *vol)SdBaseFile
    peek()SdBaseFile
    print(const String &)Print
    print(const char[])Print
    print(char, int=BYTE)Print
    print(unsigned char, int=BYTE)Print
    print(int, int=DEC)Print
    print(unsigned int, int=DEC)Print
    print(long, int=DEC)Print
    print(unsigned long, int=DEC)Print
    print(double, int=2)Print
    printFatDate(uint16_t fatDate)SdBaseFile [static]
    printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [static]
    printFatTime(uint16_t fatTime)SdBaseFile [static]
    printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [static]
    println(const String &s)Print
    println(const char[])Print
    println(char, int=BYTE)Print
    println(unsigned char, int=BYTE)Print
    println(int, int=DEC)Print
    println(unsigned int, int=DEC)Print
    println(long, int=DEC)Print
    println(unsigned long, int=DEC)Print
    println(double, int=2)Print
    println(void)Print
    printName()SdBaseFile
    read()SdBaseFile
    read(void *buf, uint16_t nbyte)SdBaseFile
    readDir(dir_t *dir)SdBaseFile
    remove(SdBaseFile *dirFile, const char *path)SdBaseFile [static]
    remove()SdBaseFile
    rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile
    rewind()SdBaseFile [inline]
    rmdir()SdBaseFile
    rmRfStar()SdBaseFile
    SdBaseFile()SdBaseFile [inline]
    SdBaseFile(const char *path, uint8_t oflag)SdBaseFile
    SdFile() (defined in SdFile)SdFile [inline]
    SdFile(const char *name, uint8_t oflag)SdFile
    seekCur(int32_t offset)SdBaseFile [inline]
    seekEnd(int32_t offset=0)SdBaseFile [inline]
    seekSet(uint32_t pos)SdBaseFile
    setpos(fpos_t *pos)SdBaseFile
    sync()SdBaseFile
    timestamp(SdBaseFile *file)SdBaseFile
    timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile
    truncate(uint32_t size)SdBaseFile
    type() const SdBaseFile [inline]
    volume() const SdBaseFile [inline]
    write(uint8_t b)SdFile [virtual]
    write(const char *str)SdFile [virtual]
    write(const void *buf, uint16_t nbyte)SdFile
    Print::write(const uint8_t *buffer, size_t size)Print [virtual]
    write_P(PGM_P str)SdFile
    writeErrorSdBaseFile
    writeln_P(PGM_P str)SdFile
    ~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_file.html b/libs/SdFatBeta20120108/html/class_sd_file.html deleted file mode 100755 index bf3bc55..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_file.html +++ /dev/null @@ -1,2498 +0,0 @@ - - - - -SdFat: SdFile Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    SdBaseFile with Print. - More...

    - -

    #include <SdFile.h>

    -
    -Inheritance diagram for SdFile:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for SdFile:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    bool close ()
    bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
    bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
    uint32_t curCluster () const
    uint32_t curPosition () const
    bool dirEntry (dir_t *dir)
    bool exists (const char *name)
    int16_t fgets (char *str, int16_t num, char *delim=0)
    uint32_t fileSize () const
    uint32_t firstCluster () const
    bool getFilename (char *name)
    void getpos (fpos_t *pos)
    bool isDir () const
    bool isFile () const
    bool isOpen () const
    bool isRoot () const
    bool isSubDir () const
    void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
    void ls (uint8_t flags=0)
    bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
    bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
    bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
    bool open (const char *path, uint8_t oflag=O_READ)
    bool openNext (SdBaseFile *dirFile, uint8_t oflag)
    bool openRoot (SdVolume *vol)
    int peek ()
    void print (unsigned int, int=DEC)
    void print (unsigned long, int=DEC)
    void print (double, int=2)
    void print (unsigned char, int=BYTE)
    void print (const String &)
    void print (const char[])
    void print (char, int=BYTE)
    void print (int, int=DEC)
    void print (long, int=DEC)
    void println (char, int=BYTE)
    void println (const char[])
    void println (unsigned char, int=BYTE)
    void println (unsigned int, int=DEC)
    void println (unsigned long, int=DEC)
    void println (void)
    void println (int, int=DEC)
    void println (const String &s)
    void println (double, int=2)
    void println (long, int=DEC)
    bool printName ()
    int16_t read (void *buf, uint16_t nbyte)
    int16_t read ()
    int8_t readDir (dir_t *dir)
    bool remove ()
    bool rename (SdBaseFile *dirFile, const char *newPath)
    void rewind ()
    bool rmdir ()
    bool rmRfStar ()
     SdFile (const char *name, uint8_t oflag)
    bool seekCur (int32_t offset)
    bool seekEnd (int32_t offset=0)
    bool seekSet (uint32_t pos)
    void setpos (fpos_t *pos)
    bool sync ()
    bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
    bool timestamp (SdBaseFile *file)
    bool truncate (uint32_t size)
    uint8_t type () const
    SdVolumevolume () const
    void write (const char *str)
    virtual void write (const uint8_t *buffer, size_t size)
    void write (uint8_t b)
    int16_t write (const void *buf, uint16_t nbyte)
    void write_P (PGM_P str)
    void writeln_P (PGM_P str)

    -Static Public Member Functions

    static SdBaseFilecwd ()
    static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
    static void dateTimeCallbackCancel ()
    static void dirName (const dir_t &dir, char *name)
    static void printFatDate (uint16_t fatDate)
    static void printFatDate (Print *pr, uint16_t fatDate)
    static void printFatTime (Print *pr, uint16_t fatTime)
    static void printFatTime (uint16_t fatTime)
    static bool remove (SdBaseFile *dirFile, const char *path)

    -Public Attributes

    bool writeError
    -

    Detailed Description

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    SdFile::SdFile (const char * path,
    uint8_t oflag 
    )
    -
    -
    -

    Create a file object and open it in the current working directory.

    -
    Parameters:
    - - - -
    [in]pathA path with a valid 8.3 DOS name for a file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool SdBaseFile::close () [inherited]
    -
    -
    -

    Close a file and force cached data and directory information to be written to the storage device.

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
    - -

    Reimplemented in fstream, ifstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
    uint32_t * endBlock 
    ) [inherited]
    -
    -
    -

    Check for contiguous file and return its raw block range.

    -
    Parameters:
    - - - -
    [out]bgnBlockthe first block address for the file.
    [out]endBlockthe last block address for the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::createContiguous (SdBaseFiledirFile,
    const char * path,
    uint32_t size 
    ) [inherited]
    -
    -
    -

    Create and open a new contiguous file of a specified size.

    -
    Note:
    This function only supports short DOS 8.3 names. See open() for more information.
    -
    Parameters:
    - - - - -
    [in]dirFileThe directory where the file will be created.
    [in]pathA path with a valid DOS 8.3 file name.
    [in]sizeThe desired file size.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::curCluster () const [inline, inherited]
    -
    -
    -
    Returns:
    The current cluster number for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::curPosition () const [inline, inherited]
    -
    -
    -
    Returns:
    The current position for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    static SdBaseFile* SdBaseFile::cwd () [inline, static, inherited]
    -
    -
    -
    Returns:
    Current working directory
    - -
    -
    - -
    -
    - - - - - - - - -
    static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime) [inline, static, inherited]
    -
    -
    -

    Set the date/time callback function

    -
    Parameters:
    - - -
    [in]dateTimeThe user's call back function. The callback function is of the form:
    -
    -
    -
     void dateTime(uint16_t* date, uint16_t* time) {
    -   uint16_t year;
    -   uint8_t month, day, hour, minute, second;
    -
    -   // User gets date and time from GPS or real-time clock here
    -
    -   // return date using FAT_DATE macro to format fields
    -   *date = FAT_DATE(year, month, day);
    -
    -   // return time using FAT_TIME macro to format fields
    -   *time = FAT_TIME(hour, minute, second);
    - }
    -

    Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

    -

    See the timestamp() function.

    - -
    -
    - -
    -
    - - - - - - - -
    static void SdBaseFile::dateTimeCallbackCancel () [inline, static, inherited]
    -
    -
    -

    Cancel the date/time callback function.

    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::dirEntry (dir_tdir) [inherited]
    -
    -
    -

    Return a file's directory entry.

    -
    Parameters:
    - - -
    [out]dirLocation for return of the file's directory entry.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::dirName (const dir_tdir,
    char * name 
    ) [static, inherited]
    -
    -
    -

    Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

    -
    Parameters:
    - - - -
    [in]dirThe directory structure containing the name.
    [out]nameA 13 byte char array for the formatted name.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::exists (const char * name) [inherited]
    -
    -
    -

    Test for the existence of a file in a directory

    -
    Parameters:
    - - -
    [in]nameName of the file to be tested for.
    -
    -
    -

    The calling instance must be an open directory file.

    -

    dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

    -
    Returns:
    true if the file exists else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    int16_t SdBaseFile::fgets (char * str,
    int16_t num,
    char * delim = 0 
    ) [inherited]
    -
    -
    -

    Get a string from a file.

    -

    fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

    -

    fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

    -
    Parameters:
    - - - - -
    [out]strPointer to the array where the string is stored.
    [in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
    [in]delimOptional set of delimiters. The default is "\n".
    -
    -
    -
    Returns:
    For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::fileSize () const [inline, inherited]
    -
    -
    -
    Returns:
    The total number of bytes in a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::firstCluster () const [inline, inherited]
    -
    -
    -
    Returns:
    The first cluster number for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::getFilename (char * name) [inherited]
    -
    -
    -

    Get a file's name

    -
    Parameters:
    - - -
    [out]nameAn array of 13 characters for the file's name.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::getpos (fpos_tpos) [inherited]
    -
    -
    -

    get position for streams

    -
    Parameters:
    - - -
    [out]posstruct to receive position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isDir () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a directory else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isFile () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a normal file else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isOpen () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is an open file/directory else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isRoot () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is the root directory.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isSubDir () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a subdirectory else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::ls (Printpr,
    uint8_t flags = 0,
    uint8_t indent = 0 
    ) [inherited]
    -
    -
    -

    List directory contents.

    -
    Parameters:
    - - - -
    [in]prPrint stream for list.
    [in]flagsThe inclusive OR of
    -
    -
    -

    LS_DATE - Print file modification date

    -

    LS_SIZE - Print file size.

    -

    LS_R - Recursive list of subdirectories.

    -
    Parameters:
    - - -
    [in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::ls (uint8_t flags = 0) [inherited]
    -
    -
    -

    List directory contents to stdOut.

    -
    Parameters:
    - - -
    [in]flagsThe inclusive OR of
    -
    -
    -

    LS_DATE - Print file modification date

    -

    LS_SIZE - Print file size.

    -

    LS_R - Recursive list of subdirectories.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::mkdir (SdBaseFileparent,
    const char * path,
    bool pFlag = true 
    ) [inherited]
    -
    -
    -

    Make a new directory.

    -
    Parameters:
    - - - - -
    [in]parentAn open SdFat instance for the directory that will contain the new directory.
    [in]pathA path with a valid 8.3 DOS name for the new directory.
    [in]pFlagCreate missing parent directories if true.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (SdBaseFiledirFile,
    const char * path,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open a file or directory by name.

    -
    Parameters:
    - - - - -
    [in]dirFileAn open SdFat instance for the directory containing the file to be opened.
    [in]pathA path with a valid 8.3 DOS name for a file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
    -
    -
    -

    O_READ - Open for reading.

    -

    O_RDONLY - Same as O_READ.

    -

    O_WRITE - Open for writing.

    -

    O_WRONLY - Same as O_WRITE.

    -

    O_RDWR - Open for reading and writing.

    -

    O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

    -

    O_AT_END - Set the initial position at the end of the file.

    -

    O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

    -

    O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

    -

    O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

    -

    O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

    -

    WARNING: A given file must not be opened by more than one SdBaseFile object of file corruption may occur.

    -
    Note:
    Directory files must be opened read only. Write and truncation is not allowed for directory files.
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (const char * path,
    uint8_t oflag = O_READ 
    ) [inherited]
    -
    -
    -

    Open a file in the current working directory.

    -
    Parameters:
    - - - -
    [in]pathA path with a valid 8.3 DOS name for a file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -

    Reimplemented in fstream, ifstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (SdBaseFiledirFile,
    uint16_t index,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open a file by index.

    -
    Parameters:
    - - - - -
    [in]dirFileAn open SdFat instance for the directory.
    [in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
    -
    -
    -

    See open() by path for definition of flags.

    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::openNext (SdBaseFiledirFile,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open the next file or subdirectory in a directory.

    -
    Parameters:
    - - - -
    [in]dirFileAn open SdFat instance for the directory containing the file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
    -
    -
    -

    See open() by path for definition of flags.

    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::openRoot (SdVolumevol) [inherited]
    -
    -
    -

    Open a volume's root directory.

    -
    Parameters:
    - - -
    [in]volThe FAT volume containing the root directory to be opened.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
    - -
    -
    - -
    -
    - - - - - - - -
    int SdBaseFile::peek () [inherited]
    -
    -
    -

    Return the next available byte without consuming it.

    -
    Returns:
    The byte if no error and not at eof else -1;
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (unsigned char b,
    int base = BYTE 
    ) [inherited]
    -
    -
    -

    Write an unsigned byte to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]bthe byte to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (int n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an signed number to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (unsigned int n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an unsigned number to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (unsigned long n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an unsigned number to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (double n,
    int digits = 2 
    ) [inherited]
    -
    -
    -

    Write the decimal representation of an float or double to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]digitsthe digits in ftraction to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (long n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an signed number to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void Print::print (const char str[]) [inherited]
    -
    -
    -

    Write a string to the associated device.

    -
    Parameters:
    - - -
    [in]strthe string to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::print (char c,
    int base = BYTE 
    ) [inherited]
    -
    -
    -

    Write an signed byte to the associated device in ASCII.

    -
    Parameters:
    - - - -
    [in]cthe byte to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void Print::print (const String & s) [inherited]
    -
    -
    -

    Write a string to the associated device.

    -
    Parameters:
    - - -
    [in]sthe string to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::printFatDate (uint16_t fatDate) [static, inherited]
    -
    -
    -

    Print a directory date field to stdOut.

    -

    Format is yyyy-mm-dd.

    -
    Parameters:
    - - -
    [in]fatDateThe date field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::printFatDate (Printpr,
    uint16_t fatDate 
    ) [static, inherited]
    -
    -
    -

    Print a directory date field.

    -

    Format is yyyy-mm-dd.

    -
    Parameters:
    - - - -
    [in]prPrint stream for output.
    [in]fatDateThe date field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::printFatTime (uint16_t fatTime) [static, inherited]
    -
    -
    -

    Print a directory time field to stdOut.

    -

    Format is hh:mm:ss.

    -
    Parameters:
    - - -
    [in]fatTimeThe time field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::printFatTime (Printpr,
    uint16_t fatTime 
    ) [static, inherited]
    -
    -
    -

    Print a directory time field.

    -

    Format is hh:mm:ss.

    -
    Parameters:
    - - - -
    [in]prPrint stream for output.
    [in]fatTimeThe time field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (char c,
    int base = BYTE 
    ) [inherited]
    -
    -
    -

    Write an signed byte to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]cthe byte to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void Print::println (const char c[]) [inherited]
    -
    -
    -

    Write a string to the associated device followed by CR LF.

    -
    Parameters:
    - - -
    [in]cthe string to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void Print::println (const String & s) [inherited]
    -
    -
    -

    Write a string to the associated device followed by CR LF.

    -
    Parameters:
    - - -
    [in]sthe string to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (double n,
    int digits = 2 
    ) [inherited]
    -
    -
    -

    Write the decimal representation of an float or double to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]digitsthe digits in ftraction to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void Print::println (void ) [inherited]
    -
    -
    -

    Print CR LF

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (unsigned long n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an unsigned number to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (unsigned char b,
    int base = BYTE 
    ) [inherited]
    -
    -
    -

    Write an unsigned byte to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]bthe byte to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (long n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an signed number to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (unsigned int n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an unsigned number to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::println (int n,
    int base = DEC 
    ) [inherited]
    -
    -
    -

    Write an signed number to the associated device in ASCII followed by CR LF.

    -
    Parameters:
    - - - -
    [in]nthe number to be printed
    [in]baseformat to be used
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::printName () [inherited]
    -
    -
    -

    Print a file's name to stdOut

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - -
    int16_t SdBaseFile::read () [inherited]
    -
    -
    -

    Read the next byte from a file.

    -
    Returns:
    For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int16_t SdBaseFile::read (void * buf,
    uint16_t nbyte 
    ) [inherited]
    -
    -
    -

    Read data from a file starting at the current position.

    -
    Parameters:
    - - - -
    [out]bufPointer to the location that will receive the data.
    [in]nbyteMaximum number of bytes to read.
    -
    -
    -
    Returns:
    For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - -
    int8_t SdBaseFile::readDir (dir_tdir) [inherited]
    -
    -
    -

    Read the next directory entry from a directory file.

    -
    Parameters:
    - - -
    [out]dirThe dir_t struct that will receive the data.
    -
    -
    -
    Returns:
    For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::remove () [inherited]
    -
    -
    -

    Remove a file.

    -

    The directory entry and all data for the file are deleted.

    -
    Note:
    This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::remove (SdBaseFiledirFile,
    const char * path 
    ) [static, inherited]
    -
    -
    -

    Remove a file.

    -

    The directory entry and all data for the file are deleted.

    -
    Parameters:
    - - - -
    [in]dirFileThe directory that contains the file.
    [in]pathPath for the file to be removed.
    -
    -
    -
    Note:
    This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::rename (SdBaseFiledirFile,
    const char * newPath 
    ) [inherited]
    -
    -
    -

    Rename a file or subdirectory.

    -
    Parameters:
    - - - -
    [in]dirFileDirectory for the new path.
    [in]newPathNew path name for the file/directory.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
    - -
    -
    - -
    -
    - - - - - - - -
    void SdBaseFile::rewind () [inline, inherited]
    -
    -
    -

    Set the file's current position to zero.

    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::rmdir () [inherited]
    -
    -
    -

    Remove a directory file.

    -

    The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

    -
    Note:
    This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::rmRfStar () [inherited]
    -
    -
    -

    Recursively delete a directory and all contained files.

    -

    This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

    -

    Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

    -
    Note:
    This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekCur (int32_t offset) [inline, inherited]
    -
    -
    -

    Set the files position to current position + pos. See seekSet().

    -
    Parameters:
    - - -
    [in]offsetThe new position in bytes from the current position.
    -
    -
    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekEnd (int32_t offset = 0) [inline, inherited]
    -
    -
    -

    Set the files position to end-of-file + offset. See seekSet().

    -
    Parameters:
    - - -
    [in]offsetThe new position in bytes from end-of-file.
    -
    -
    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekSet (uint32_t pos) [inherited]
    -
    -
    -

    Sets a file's position.

    -
    Parameters:
    - - -
    [in]posThe new position in bytes from the beginning of the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::setpos (fpos_tpos) [inherited]
    -
    -
    -

    set position for streams

    -
    Parameters:
    - - -
    [out]posstruct with value for new position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::sync () [inherited]
    -
    -
    -

    The sync() call causes all modified data and directory fields to be written to the storage device.

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::timestamp (SdBaseFilefile) [inherited]
    -
    -
    -

    Copy a file's timestamps

    -
    Parameters:
    - - -
    [in]fileFile to copy timestamps from.
    -
    -
    -
    Note:
    Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::timestamp (uint8_t flags,
    uint16_t year,
    uint8_t month,
    uint8_t day,
    uint8_t hour,
    uint8_t minute,
    uint8_t second 
    ) [inherited]
    -
    -
    -

    Set a file's timestamps in its directory entry.

    -
    Parameters:
    - - -
    [in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
    -
    -
    -

    T_ACCESS - Set the file's last access date.

    -

    T_CREATE - Set the file's creation date and time.

    -

    T_WRITE - Set the file's last write/modification date and time.

    -
    Parameters:
    - - - - - - - -
    [in]yearValid range 1980 - 2107 inclusive.
    [in]monthValid range 1 - 12 inclusive.
    [in]dayValid range 1 - 31 inclusive.
    [in]hourValid range 0 - 23 inclusive.
    [in]minuteValid range 0 - 59 inclusive.
    [in]secondValid range 0 - 59 inclusive
    -
    -
    -
    Note:
    It is possible to set an invalid date since there is no check for the number of days in a month.
    -
    -Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::truncate (uint32_t length) [inherited]
    -
    -
    -

    Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

    -
    Parameters:
    - - -
    [in]lengthThe desired length for the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t SdBaseFile::type () const [inline, inherited]
    -
    -
    -

    Type of file. You should use isFile() or isDir() instead of type() if possible.

    -
    Returns:
    The file or directory type.
    - -
    -
    - -
    -
    - - - - - - - -
    SdVolume* SdBaseFile::volume () const [inline, inherited]
    -
    -
    -
    Returns:
    SdVolume that contains this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdFile::write (uint8_t b) [virtual]
    -
    -
    -

    Write a byte to a file. Required by the Arduino Print class.

    -
    Parameters:
    - - -
    [in]bthe byte to be written. Use writeError to check for errors.
    -
    -
    - -

    Implements Print.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int16_t SdFile::write (const void * buf,
    uint16_t nbyte 
    )
    -
    -
    -

    Write data to an open file.

    -
    Note:
    Data is moved to the cache but may not be written to the storage device until sync() is called.
    -
    Parameters:
    - - - -
    [in]bufPointer to the location of the data to be written.
    [in]nbyteNumber of bytes to write.
    -
    -
    -
    Returns:
    For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - - -
    void SdFile::write (const char * str) [virtual]
    -
    -
    -

    Write a string to a file. Used by the Arduino Print class.

    -
    Parameters:
    - - -
    [in]strPointer to the string. Use writeError to check for errors.
    -
    -
    - -

    Reimplemented from Print.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void Print::write (const uint8_t * buffer,
    size_t size 
    ) [virtual, inherited]
    -
    -
    -

    default implementation: may be overridden

    -
    Parameters:
    - - - -
    [in]bufferpointer to data
    [in]sizecount of bytes to be written
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdFile::write_P (PGM_P str)
    -
    -
    -

    Write a PROGMEM string to a file.

    -
    Parameters:
    - - -
    [in]strPointer to the PROGMEM string. Use writeError to check for errors.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdFile::writeln_P (PGM_P str)
    -
    -
    -

    Write a PROGMEM string followed by CR/LF to a file.

    -
    Parameters:
    - - -
    [in]strPointer to the PROGMEM string. Use writeError to check for errors.
    -
    -
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    bool SdBaseFile::writeError [inherited]
    -
    -
    -

    writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Arduino/libraries/SdFat/SdFile.h
    • -
    • Arduino/libraries/SdFat/SdFile.cpp
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_file__coll__graph.png b/libs/SdFatBeta20120108/html/class_sd_file__coll__graph.png deleted file mode 100755 index c3f6d6718747ad602a701ca7b10ab90ef6abcf4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16734 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 z 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 L1IMspB}-%%lKcqSw|Uvuls!Ts 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 - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    SdStreamBase Member List
    -
    -
    -This is the complete list of members for SdStreamBase, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    close()SdBaseFile [protected]
    contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile [protected]
    createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile [protected]
    cur enum valueios_base
    curCluster() const SdBaseFile [inline, protected]
    curPosition() const SdBaseFile [inline, protected]
    cwd()SdBaseFile [inline, protected, static]
    dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, protected, static]
    dateTimeCallbackCancel()SdBaseFile [inline, protected, static]
    decios_base [static]
    dirEntry(dir_t *dir)SdBaseFile [protected]
    dirName(const dir_t &dir, char *name)SdBaseFile [protected, static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    exists(const char *name)SdBaseFile [protected]
    fail() const ios [inline]
    failbitios_base [static]
    fgets(char *str, int16_t num, char *delim=0)SdBaseFile [protected]
    fileSize() const SdBaseFile [inline, protected]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    firstCluster() const SdBaseFile [inline, protected]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    getFilename(char *name)SdBaseFile [protected]
    getpos(fpos_t *pos)SdBaseFile [protected]
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    isDir() const SdBaseFile [inline, protected]
    isFile() const SdBaseFile [inline, protected]
    isOpen() const SdBaseFile [inline, protected]
    isRoot() const SdBaseFile [inline, protected]
    isSubDir() const SdBaseFile [inline, protected]
    leftios_base [static]
    ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile [protected]
    ls(uint8_t flags=0)SdBaseFile [protected]
    mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile [protected]
    octios_base [static]
    off_type typedefios_base
    open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile [protected]
    open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile [protected]
    open(const char *path, uint8_t oflag=O_READ)SdBaseFile [protected]
    openmode typedefios_base
    openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile [protected]
    openRoot(SdVolume *vol)SdBaseFile [protected]
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    outios_base [static]
    peek()SdBaseFile [protected]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    printFatDate(uint16_t fatDate)SdBaseFile [protected, static]
    printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [protected, static]
    printFatTime(uint16_t fatTime)SdBaseFile [protected, static]
    printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [protected, static]
    printName()SdBaseFile [protected]
    rdstate() const ios [inline]
    read()SdBaseFile [protected]
    read(void *buf, uint16_t nbyte)SdBaseFile [protected]
    readDir(dir_t *dir)SdBaseFile [protected]
    remove(SdBaseFile *dirFile, const char *path)SdBaseFile [protected, static]
    remove()SdBaseFile [protected]
    rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile [protected]
    rewind()SdBaseFile [inline, protected]
    rightios_base [static]
    rmdir()SdBaseFile [protected]
    rmRfStar()SdBaseFile [protected]
    SdBaseFile()SdBaseFile [inline, protected]
    SdBaseFile(const char *path, uint8_t oflag)SdBaseFile [protected]
    seekCur(int32_t offset)SdBaseFile [inline, protected]
    seekdir enum nameios_base
    seekEnd(int32_t offset=0)SdBaseFile [inline, protected]
    seekSet(uint32_t pos)SdBaseFile [protected]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setpos(fpos_t *pos)SdBaseFile [protected]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    sync()SdBaseFile [protected]
    timestamp(SdBaseFile *file)SdBaseFile [protected]
    timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile [protected]
    truncios_base [static]
    truncate(uint32_t size)SdBaseFile [protected]
    type() const SdBaseFile [inline, protected]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    volume() const SdBaseFile [inline, protected]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    write(const void *buf, uint16_t nbyte)SdBaseFile [protected]
    writeErrorSdBaseFile [protected]
    ~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline, protected]
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_stream_base.html b/libs/SdFatBeta20120108/html/class_sd_stream_base.html deleted file mode 100755 index 9dca56b..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_stream_base.html +++ /dev/null @@ -1,2652 +0,0 @@ - - - - -SdFat: SdStreamBase Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Base class for SD streams. - More...

    - -

    #include <SdStream.h>

    -
    -Inheritance diagram for SdStreamBase:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for SdStreamBase:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    bool good () const
     operator const void * () const
    bool operator! () const
    int precision (unsigned int n)
    int precision () const
    iostate rdstate () const
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    bool close ()
    bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
    bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
    uint32_t curCluster () const
    uint32_t curPosition () const
    bool dirEntry (dir_t *dir)
    bool exists (const char *name)
    int16_t fgets (char *str, int16_t num, char *delim=0)
    uint32_t fileSize () const
    uint32_t firstCluster () const
    uint8_t flagsToBase ()
    bool getFilename (char *name)
    void getpos (fpos_t *pos)
    bool isDir () const
    bool isFile () const
    bool isOpen () const
    bool isRoot () const
    bool isSubDir () const
    void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
    void ls (uint8_t flags=0)
    bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
    bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
    bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
    bool open (const char *path, uint8_t oflag=O_READ)
    bool openNext (SdBaseFile *dirFile, uint8_t oflag)
    bool openRoot (SdVolume *vol)
    int peek ()
    bool printName ()
    int16_t read ()
    int16_t read (void *buf, uint16_t nbyte)
    int8_t readDir (dir_t *dir)
    bool remove ()
    bool rename (SdBaseFile *dirFile, const char *newPath)
    void rewind ()
    bool rmdir ()
    bool rmRfStar ()
    bool seekCur (int32_t offset)
    bool seekEnd (int32_t offset=0)
    bool seekSet (uint32_t pos)
    void setpos (fpos_t *pos)
    bool sync ()
    bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
    bool timestamp (SdBaseFile *file)
    bool truncate (uint32_t size)
    uint8_t type () const
    SdVolumevolume () const
    int16_t write (const void *buf, uint16_t nbyte)

    -Static Protected Member Functions

    static SdBaseFilecwd ()
    static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
    static void dateTimeCallbackCancel ()
    static void dirName (const dir_t &dir, char *name)
    static void printFatDate (uint16_t fatDate)
    static void printFatDate (Print *pr, uint16_t fatDate)
    static void printFatTime (Print *pr, uint16_t fatTime)
    static void printFatTime (uint16_t fatTime)
    static bool remove (SdBaseFile *dirFile, const char *path)

    -Protected Attributes

    bool writeError
    -

    Detailed Description

    -

    Base class for SD streams.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::close () [inherited]
    -
    -
    -

    Close a file and force cached data and directory information to be written to the storage device.

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error.
    - -

    Reimplemented in fstream, ifstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::contiguousRange (uint32_t * bgnBlock,
    uint32_t * endBlock 
    ) [inherited]
    -
    -
    -

    Check for contiguous file and return its raw block range.

    -
    Parameters:
    - - - -
    [out]bgnBlockthe first block address for the file.
    [out]endBlockthe last block address for the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is not contiguous, file has zero length or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::createContiguous (SdBaseFiledirFile,
    const char * path,
    uint32_t size 
    ) [inherited]
    -
    -
    -

    Create and open a new contiguous file of a specified size.

    -
    Note:
    This function only supports short DOS 8.3 names. See open() for more information.
    -
    Parameters:
    - - - - -
    [in]dirFileThe directory where the file will be created.
    [in]pathA path with a valid DOS 8.3 file name.
    [in]sizeThe desired file size.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include path contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::curCluster () const [inline, inherited]
    -
    -
    -
    Returns:
    The current cluster number for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::curPosition () const [inline, inherited]
    -
    -
    -
    Returns:
    The current position for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    static SdBaseFile* SdBaseFile::cwd () [inline, static, inherited]
    -
    -
    -
    Returns:
    Current working directory
    - -
    -
    - -
    -
    - - - - - - - - -
    static void SdBaseFile::dateTimeCallback (void(*)(uint16_t *date, uint16_t *time) dateTime) [inline, static, inherited]
    -
    -
    -

    Set the date/time callback function

    -
    Parameters:
    - - -
    [in]dateTimeThe user's call back function. The callback function is of the form:
    -
    -
    -
     void dateTime(uint16_t* date, uint16_t* time) {
    -   uint16_t year;
    -   uint8_t month, day, hour, minute, second;
    -
    -   // User gets date and time from GPS or real-time clock here
    -
    -   // return date using FAT_DATE macro to format fields
    -   *date = FAT_DATE(year, month, day);
    -
    -   // return time using FAT_TIME macro to format fields
    -   *time = FAT_TIME(hour, minute, second);
    - }
    -

    Sets the function that is called when a file is created or when a file's directory entry is modified by sync(). All timestamps, access, creation, and modify, are set when a file is created. sync() maintains the last access date and last modify date/time.

    -

    See the timestamp() function.

    - -
    -
    - -
    -
    - - - - - - - -
    static void SdBaseFile::dateTimeCallbackCancel () [inline, static, inherited]
    -
    -
    -

    Cancel the date/time callback function.

    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::dirEntry (dir_tdir) [inherited]
    -
    -
    -

    Return a file's directory entry.

    -
    Parameters:
    - - -
    [out]dirLocation for return of the file's directory entry.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::dirName (const dir_tdir,
    char * name 
    ) [static, inherited]
    -
    -
    -

    Format the name field of dir into the 13 byte array name in standard 8.3 short name format.

    -
    Parameters:
    - - - -
    [in]dirThe directory structure containing the name.
    [out]nameA 13 byte char array for the formatted name.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::exists (const char * name) [inherited]
    -
    -
    -

    Test for the existence of a file in a directory

    -
    Parameters:
    - - -
    [in]nameName of the file to be tested for.
    -
    -
    -

    The calling instance must be an open directory file.

    -

    dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory dirFile.

    -
    Returns:
    true if the file exists else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    int16_t SdBaseFile::fgets (char * str,
    int16_t num,
    char * delim = 0 
    ) [inherited]
    -
    -
    -

    Get a string from a file.

    -

    fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.

    -

    fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.

    -
    Parameters:
    - - - - -
    [out]strPointer to the array where the string is stored.
    [in]numMaximum number of characters to be read (including the final null byte). Usually the length of the array str is used.
    [in]delimOptional set of delimiters. The default is "\n".
    -
    -
    -
    Returns:
    For success fgets() returns the length of the string in str. If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::fileSize () const [inline, inherited]
    -
    -
    -
    Returns:
    The total number of bytes in a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdBaseFile::firstCluster () const [inline, inherited]
    -
    -
    -
    Returns:
    The first cluster number for a file or directory.
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::getFilename (char * name) [inherited]
    -
    -
    -

    Get a file's name

    -
    Parameters:
    - - -
    [out]nameAn array of 13 characters for the file's name.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::getpos (fpos_tpos) [inherited]
    -
    -
    -

    get position for streams

    -
    Parameters:
    - - -
    [out]posstruct to receive position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isDir () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a directory else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isFile () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a normal file else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isOpen () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is an open file/directory else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isRoot () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is the root directory.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::isSubDir () const [inline, inherited]
    -
    -
    -
    Returns:
    True if this is a subdirectory else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::ls (Printpr,
    uint8_t flags = 0,
    uint8_t indent = 0 
    ) [inherited]
    -
    -
    -

    List directory contents.

    -
    Parameters:
    - - - -
    [in]prPrint stream for list.
    [in]flagsThe inclusive OR of
    -
    -
    -

    LS_DATE - Print file modification date

    -

    LS_SIZE - Print file size.

    -

    LS_R - Recursive list of subdirectories.

    -
    Parameters:
    - - -
    [in]indentAmount of space before file name. Used for recursive list to indicate subdirectory level.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::ls (uint8_t flags = 0) [inherited]
    -
    -
    -

    List directory contents to stdOut.

    -
    Parameters:
    - - -
    [in]flagsThe inclusive OR of
    -
    -
    -

    LS_DATE - Print file modification date

    -

    LS_SIZE - Print file size.

    -

    LS_R - Recursive list of subdirectories.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::mkdir (SdBaseFileparent,
    const char * path,
    bool pFlag = true 
    ) [inherited]
    -
    -
    -

    Make a new directory.

    -
    Parameters:
    - - - - -
    [in]parentAn open SdFat instance for the directory that will contain the new directory.
    [in]pathA path with a valid 8.3 DOS name for the new directory.
    [in]pFlagCreate missing parent directories if true.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, parent is not a directory, path is invalid or already exists in parent.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (SdBaseFiledirFile,
    uint16_t index,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open a file by index.

    -
    Parameters:
    - - - - -
    [in]dirFileAn open SdFat instance for the directory.
    [in]indexThe index of the directory entry for the file to be opened. The value for index is (directory file position)/32.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
    -
    -
    -

    See open() by path for definition of flags.

    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (SdBaseFiledirFile,
    const char * path,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open a file or directory by name.

    -
    Parameters:
    - - - - -
    [in]dirFileAn open SdFat instance for the directory containing the file to be opened.
    [in]pathA path with a valid 8.3 DOS name for a file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags from the following list
    -
    -
    -

    O_READ - Open for reading.

    -

    O_RDONLY - Same as O_READ.

    -

    O_WRITE - Open for writing.

    -

    O_WRONLY - Same as O_WRITE.

    -

    O_RDWR - Open for reading and writing.

    -

    O_APPEND - If set, the file offset shall be set to the end of the file prior to each write.

    -

    O_AT_END - Set the initial position at the end of the file.

    -

    O_CREAT - If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created

    -

    O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.

    -

    O_SYNC - Call sync() after each write. This flag should not be used with write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class. These functions do character at a time writes so sync() will be called after each byte.

    -

    O_TRUNC - If the file exists and is a regular file, and the file is successfully opened and is not read only, its length shall be truncated to 0.

    -

    WARNING: A given file must not be opened by more than one SdBaseFile object of file corruption may occur.

    -
    Note:
    Directory files must be opened read only. Write and truncation is not allowed for directory files.
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include this file is already open, dirFile is not a directory, path is invalid, the file does not exist or can't be opened in the access mode specified by oflag.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::open (const char * path,
    uint8_t oflag = O_READ 
    ) [inherited]
    -
    -
    -

    Open a file in the current working directory.

    -
    Parameters:
    - - - -
    [in]pathA path with a valid 8.3 DOS name for a file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -

    Reimplemented in fstream, ifstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::openNext (SdBaseFiledirFile,
    uint8_t oflag 
    ) [inherited]
    -
    -
    -

    Open the next file or subdirectory in a directory.

    -
    Parameters:
    - - - -
    [in]dirFileAn open SdFat instance for the directory containing the file to be opened.
    [in]oflagValues for oflag are constructed by a bitwise-inclusive OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
    -
    -
    -

    See open() by path for definition of flags.

    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::openRoot (SdVolumevol) [inherited]
    -
    -
    -

    Open a volume's root directory.

    -
    Parameters:
    - - -
    [in]volThe FAT volume containing the root directory to be opened.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is already open, the FAT volume has not been initialized or it a FAT12 volume.
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - -
    int SdBaseFile::peek () [inherited]
    -
    -
    -

    Return the next available byte without consuming it.

    -
    Returns:
    The byte if no error and not at eof else -1;
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::printFatDate (uint16_t fatDate) [static, inherited]
    -
    -
    -

    Print a directory date field to stdOut.

    -

    Format is yyyy-mm-dd.

    -
    Parameters:
    - - -
    [in]fatDateThe date field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::printFatDate (Printpr,
    uint16_t fatDate 
    ) [static, inherited]
    -
    -
    -

    Print a directory date field.

    -

    Format is yyyy-mm-dd.

    -
    Parameters:
    - - - -
    [in]prPrint stream for output.
    [in]fatDateThe date field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::printFatTime (uint16_t fatTime) [static, inherited]
    -
    -
    -

    Print a directory time field to stdOut.

    -

    Format is hh:mm:ss.

    -
    Parameters:
    - - -
    [in]fatTimeThe time field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void SdBaseFile::printFatTime (Printpr,
    uint16_t fatTime 
    ) [static, inherited]
    -
    -
    -

    Print a directory time field.

    -

    Format is hh:mm:ss.

    -
    Parameters:
    - - - -
    [in]prPrint stream for output.
    [in]fatTimeThe time field from a directory entry.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::printName () [inherited]
    -
    -
    -

    Print a file's name to stdOut

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int16_t SdBaseFile::read (void * buf,
    uint16_t nbyte 
    ) [inherited]
    -
    -
    -

    Read data from a file starting at the current position.

    -
    Parameters:
    - - - -
    [out]bufPointer to the location that will receive the data.
    [in]nbyteMaximum number of bytes to read.
    -
    -
    -
    Returns:
    For success read() returns the number of bytes read. A value less than nbyte, including zero, will be returned if end of file is reached. If an error occurs, read() returns -1. Possible errors include read() called before a file has been opened, corrupt file system or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    int16_t SdBaseFile::read () [inherited]
    -
    -
    -

    Read the next byte from a file.

    -
    Returns:
    For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned.
    - -
    -
    - -
    -
    - - - - - - - - -
    int8_t SdBaseFile::readDir (dir_tdir) [inherited]
    -
    -
    -

    Read the next directory entry from a directory file.

    -
    Parameters:
    - - -
    [out]dirThe dir_t struct that will receive the data.
    -
    -
    -
    Returns:
    For success readDir() returns the number of bytes read. A value of zero will be returned if end of file is reached. If an error occurs, readDir() returns -1. Possible errors include readDir() called before a directory has been opened, this is not a directory file or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::remove (SdBaseFiledirFile,
    const char * path 
    ) [static, inherited]
    -
    -
    -

    Remove a file.

    -

    The directory entry and all data for the file are deleted.

    -
    Parameters:
    - - - -
    [in]dirFileThe directory that contains the file.
    [in]pathPath for the file to be removed.
    -
    -
    -
    Note:
    This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is a directory, is read only, dirFile is not a directory, path is not found or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::remove () [inherited]
    -
    -
    -

    Remove a file.

    -

    The directory entry and all data for the file are deleted.

    -
    Note:
    This function should not be used to delete the 8.3 version of a file that has a long name. For example if a file has the long name "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file read-only, is a directory, or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::rename (SdBaseFiledirFile,
    const char * newPath 
    ) [inherited]
    -
    -
    -

    Rename a file or subdirectory.

    -
    Parameters:
    - - - -
    [in]dirFileDirectory for the new path.
    [in]newPathNew path name for the file/directory.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include dirFile is not open or is not a directory file, newPath is invalid or already exists, or an I/O error occurs.
    - -
    -
    - -
    -
    - - - - - - - -
    void SdBaseFile::rewind () [inline, inherited]
    -
    -
    -

    Set the file's current position to zero.

    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::rmdir () [inherited]
    -
    -
    -

    Remove a directory file.

    -

    The directory file will be removed only if it is empty and is not the root directory. rmdir() follows DOS and Windows and ignores the read-only attribute for the directory.

    -
    Note:
    This function should not be used to delete the 8.3 version of a directory that has a long name. For example if a directory has the long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the file is not a directory, is the root directory, is not empty, or an I/O error occurred.
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::rmRfStar () [inherited]
    -
    -
    -

    Recursively delete a directory and all contained files.

    -

    This is like the Unix/Linux 'rm -rf *' if called with the root directory hence the name.

    -

    Warning - This will remove all contents of the directory including subdirectories. The directory will then be removed if it is not root. The read-only attribute for files will be ignored.

    -
    Note:
    This function should not be used to delete the 8.3 version of a directory that has a long name. See remove() and rmdir().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekCur (int32_t offset) [inline, inherited]
    -
    -
    -

    Set the files position to current position + pos. See seekSet().

    -
    Parameters:
    - - -
    [in]offsetThe new position in bytes from the current position.
    -
    -
    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekEnd (int32_t offset = 0) [inline, inherited]
    -
    -
    -

    Set the files position to end-of-file + offset. See seekSet().

    -
    Parameters:
    - - -
    [in]offsetThe new position in bytes from end-of-file.
    -
    -
    -
    Returns:
    true for success or false for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::seekSet (uint32_t pos) [inherited]
    -
    -
    -

    Sets a file's position.

    -
    Parameters:
    - - -
    [in]posThe new position in bytes from the beginning of the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void SdBaseFile::setpos (fpos_tpos) [inherited]
    -
    -
    -

    set position for streams

    -
    Parameters:
    - - -
    [out]posstruct with value for new position
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    bool SdBaseFile::sync () [inherited]
    -
    -
    -

    The sync() call causes all modified data and directory fields to be written to the storage device.

    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to sync() before a file has been opened or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::timestamp (SdBaseFilefile) [inherited]
    -
    -
    -

    Copy a file's timestamps

    -
    Parameters:
    - - -
    [in]fileFile to copy timestamps from.
    -
    -
    -
    Note:
    Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool SdBaseFile::timestamp (uint8_t flags,
    uint16_t year,
    uint8_t month,
    uint8_t day,
    uint8_t hour,
    uint8_t minute,
    uint8_t second 
    ) [inherited]
    -
    -
    -

    Set a file's timestamps in its directory entry.

    -
    Parameters:
    - - -
    [in]flagsValues for flags are constructed by a bitwise-inclusive OR of flags from the following list
    -
    -
    -

    T_ACCESS - Set the file's last access date.

    -

    T_CREATE - Set the file's creation date and time.

    -

    T_WRITE - Set the file's last write/modification date and time.

    -
    Parameters:
    - - - - - - - -
    [in]yearValid range 1980 - 2107 inclusive.
    [in]monthValid range 1 - 12 inclusive.
    [in]dayValid range 1 - 31 inclusive.
    [in]hourValid range 0 - 23 inclusive.
    [in]minuteValid range 0 - 59 inclusive.
    [in]secondValid range 0 - 59 inclusive
    -
    -
    -
    Note:
    It is possible to set an invalid date since there is no check for the number of days in a month.
    -
    -Modify and access timestamps may be overwritten if a date time callback function has been set by dateTimeCallback().
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdBaseFile::truncate (uint32_t length) [inherited]
    -
    -
    -

    Truncate a file to a specified length. The current file position will be maintained if it is less than or equal to length otherwise it will be set to end of file.

    -
    Parameters:
    - - -
    [in]lengthThe desired length for the file.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include file is read only, file is a directory, length is greater than the current file size or an I/O error occurs.
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t SdBaseFile::type () const [inline, inherited]
    -
    -
    -

    Type of file. You should use isFile() or isDir() instead of type() if possible.

    -
    Returns:
    The file or directory type.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    SdVolume* SdBaseFile::volume () const [inline, inherited]
    -
    -
    -
    Returns:
    SdVolume that contains this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int16_t SdBaseFile::write (const void * buf,
    uint16_t nbyte 
    ) [inherited]
    -
    -
    -

    Write data to an open file.

    -
    Note:
    Data is moved to the cache but may not be written to the storage device until sync() is called.
    -
    Parameters:
    - - - -
    [in]bufPointer to the location of the data to be written.
    [in]nbyteNumber of bytes to write.
    -
    -
    -
    Returns:
    For success write() returns the number of bytes written, always nbyte. If an error occurs, write() returns -1. Possible errors include write() is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error.
    - -

    Reimplemented in SdFile.

    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    - -
    -
    - - - - -
    bool SdBaseFile::writeError [inherited]
    -
    -
    -

    writeError is set to true if an error occurs during a write(). Set writeError to false before calling print() and/or write() and check for true after calls to print() and/or write().

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_stream_base__coll__graph.png b/libs/SdFatBeta20120108/html/class_sd_stream_base__coll__graph.png deleted file mode 100755 index 03761a3ca0042e3026af49b31b1fd285a8345d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17600 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 diff --git a/libs/SdFatBeta20120108/html/class_sd_stream_base__inherit__graph.png b/libs/SdFatBeta20120108/html/class_sd_stream_base__inherit__graph.png deleted file mode 100755 index fa32e2ba61fb8d2a35b22f774db2994a593f4204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6828 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 - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    SdVolume Member List
    -
    -
    -This is the complete list of members for SdVolume, including all inherited members. - - - - - - - - - - - - - - - - - - -
    blocksPerCluster() const SdVolume [inline]
    blocksPerFat() const SdVolume [inline]
    cacheClear()SdVolume [inline]
    clusterCount() const SdVolume [inline]
    clusterSizeShift() const SdVolume [inline]
    dataStartBlock() const SdVolume [inline]
    dbgFat(uint32_t n, uint32_t *v)SdVolume [inline]
    fatCount() const SdVolume [inline]
    fatStartBlock() const SdVolume [inline]
    fatType() const SdVolume [inline]
    freeClusterCount()SdVolume
    init(Sd2Card *dev)SdVolume [inline]
    init(Sd2Card *dev, uint8_t part)SdVolume
    rootDirEntryCount() const SdVolume [inline]
    rootDirStart() const SdVolume [inline]
    SdBaseFile (defined in SdVolume)SdVolume [friend]
    sdCard()SdVolume [inline]
    SdVolume()SdVolume [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_volume.html b/libs/SdFatBeta20120108/html/class_sd_volume.html deleted file mode 100755 index 386fe2e..0000000 --- a/libs/SdFatBeta20120108/html/class_sd_volume.html +++ /dev/null @@ -1,436 +0,0 @@ - - - - -SdFat: SdVolume Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    SdVolume Class Reference
    -
    -
    - -

    Access FAT16 and FAT32 volumes on SD and SDHC cards. - More...

    - -

    #include <SdVolume.h>

    -
    -Collaboration diagram for SdVolume:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    uint8_t blocksPerCluster () const
    uint32_t blocksPerFat () const
    cache_tcacheClear ()
    uint32_t clusterCount () const
    uint8_t clusterSizeShift () const
    uint32_t dataStartBlock () const
    bool dbgFat (uint32_t n, uint32_t *v)
    uint8_t fatCount () const
    uint32_t fatStartBlock () const
    uint8_t fatType () const
    int32_t freeClusterCount ()
    bool init (Sd2Card *dev, uint8_t part)
    bool init (Sd2Card *dev)
    uint32_t rootDirEntryCount () const
    uint32_t rootDirStart () const
    Sd2CardsdCard ()
     SdVolume ()

    -Friends

    -class SdBaseFile
    -

    Detailed Description

    -

    Access FAT16 and FAT32 volumes on SD and SDHC cards.

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    SdVolume::SdVolume () [inline]
    -
    -
    -

    Create an instance of SdVolume

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    uint8_t SdVolume::blocksPerCluster () const [inline]
    -
    -
    -
    Returns:
    The volume's cluster size in blocks.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::blocksPerFat () const [inline]
    -
    -
    -
    Returns:
    The number of blocks in one FAT.
    - -
    -
    - -
    -
    - - - - - - - -
    cache_t* SdVolume::cacheClear () [inline]
    -
    -
    -

    Clear the cache and returns a pointer to the cache. Used by the WaveRP recorder to do raw write to the SD card. Not for normal apps.

    -
    Returns:
    A pointer to the cache buffer or zero if an error occurs.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::clusterCount () const [inline]
    -
    -
    -
    Returns:
    The total number of clusters in the volume.
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t SdVolume::clusterSizeShift () const [inline]
    -
    -
    -
    Returns:
    The shift count required to multiply by blocksPerCluster.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::dataStartBlock () const [inline]
    -
    -
    -
    Returns:
    The logical block number for the start of file data.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdVolume::dbgFat (uint32_t n,
    uint32_t * v 
    ) [inline]
    -
    -
    -

    Debug access to FAT table

    -
    Parameters:
    - - - -
    [in]ncluster number.
    [out]vvalue of entry
    -
    -
    -
    Returns:
    true for success or false for failure
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t SdVolume::fatCount () const [inline]
    -
    -
    -
    Returns:
    The number of FAT structures on the volume.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::fatStartBlock () const [inline]
    -
    -
    -
    Returns:
    The logical block number for the start of the first FAT.
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t SdVolume::fatType () const [inline]
    -
    -
    -
    Returns:
    The FAT type of the volume. Values are 12, 16 or 32.
    - -
    -
    - -
    -
    - - - - - - - -
    int32_t SdVolume::freeClusterCount ()
    -
    -
    -

    Volume free space in clusters.

    -
    Returns:
    Count of free clusters for success or -1 if an error occurs.
    - -
    -
    - -
    -
    - - - - - - - - -
    bool SdVolume::init (Sd2Carddev) [inline]
    -
    -
    -

    Initialize a FAT volume. Try partition one first then try super floppy format.

    -
    Parameters:
    - - -
    [in]devThe Sd2Card where the volume is located.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include not finding a valid partition, not finding a valid FAT file system or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool SdVolume::init (Sd2Carddev,
    uint8_t part 
    )
    -
    -
    -

    Initialize a FAT volume.

    -
    Parameters:
    - - - -
    [in]devThe SD card where the volume is located.
    [in]partThe partition to be used. Legal values for part are 1-4 to use the corresponding partition on a device formatted with a MBR, Master Boot Record, or zero if the device is formatted as a super floppy with the FAT boot sector in block zero.
    -
    -
    -
    Returns:
    The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include not finding a valid partition, not finding a valid FAT file system in the specified partition or an I/O error.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::rootDirEntryCount () const [inline]
    -
    -
    -
    Returns:
    The number of entries in the root directory for FAT16 volumes.
    - -
    -
    - -
    -
    - - - - - - - -
    uint32_t SdVolume::rootDirStart () const [inline]
    -
    -
    -
    Returns:
    The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
    - -
    -
    - -
    -
    - - - - - - - -
    Sd2Card* SdVolume::sdCard () [inline]
    -
    -
    -

    Sd2Card object for this volume

    -
    Returns:
    pointer to Sd2Card object.
    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Arduino/libraries/SdFat/SdVolume.h
    • -
    • Arduino/libraries/SdFat/SdVolume.cpp
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/class_sd_volume__coll__graph.png b/libs/SdFatBeta20120108/html/class_sd_volume__coll__graph.png deleted file mode 100755 index d4ed1b6b31f9ac43855c114b3980f4526fa665ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12054 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 diff --git a/libs/SdFatBeta20120108/html/classes.html b/libs/SdFatBeta20120108/html/classes.html deleted file mode 100755 index 4bedcf4..0000000 --- a/libs/SdFatBeta20120108/html/classes.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - -SdFat: Class Index - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    Class Index
    -
    -
    -
    A | C | D | F | I | M | O | P | S
    - -
      A  
    -
    fat32_boot   ios   ofstream   SdBaseFile   
    ArduinoInStream   fat32_fsinfo   ios_base   ostream   SdFat   
    ArduinoOutStream   fat_boot   iostream   
      P  
    -
    SdFile   
      C  
    -
    fpos_t   istream   partitionTable   SdStreamBase   
    cache_t   fstream   
      M  
    -
    pgm   SdVolume   
      D  
    -
      I  
    -
    masterBootRecord   Print   setfill   
    directoryEntry   ibufstream   
      O  
    -
      S  
    -
    setprecision   
      F  
    -
    ifstream   obufstream   Sd2Card   setw   
    A | C | D | F | I | M | O | P | S
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/classfstream-members.html b/libs/SdFatBeta20120108/html/classfstream-members.html deleted file mode 100755 index 837ff92..0000000 --- a/libs/SdFatBeta20120108/html/classfstream-members.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    fstream Member List
    -
    -
    -This is the complete list of members for fstream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)fstream [inline]
    close()fstream [inline]
    contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile [private]
    createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile [private]
    cur enum valueios_base
    curCluster() const SdBaseFile [inline, private]
    curPosition() const SdBaseFile [inline, private]
    cwd()SdBaseFile [inline, private, static]
    dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, private, static]
    dateTimeCallbackCancel()SdBaseFile [inline, private, static]
    decios_base [static]
    dirEntry(dir_t *dir)SdBaseFile [private]
    dirName(const dir_t &dir, char *name)SdBaseFile [private, static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    exists(const char *name)SdBaseFile [private]
    fail() const ios [inline]
    failbitios_base [static]
    fgets(char *str, int16_t num, char *delim=0)SdBaseFile [private]
    fileSize() const SdBaseFile [inline, private]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    firstCluster() const SdBaseFile [inline, private]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    flush()ostream [inline]
    fmtflags typedefios_base
    fstream() (defined in fstream)fstream [inline]
    fstream(const char *path, openmode mode=in|out)fstream [inline, explicit]
    gcount() const istream [inline]
    get()istream
    get(char &ch)istream
    get(char *str, streamsize n, char delim= '\n')istream
    getFilename(char *name)SdBaseFile [private]
    getline(char *str, streamsize count, char delim= '\n')istream
    getpos(fpos_t *pos)SdBaseFile [private]
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    ignore(streamsize n=1, int delim=-1)istream
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    is_open()fstream [inline]
    isDir() const SdBaseFile [inline, private]
    isFile() const SdBaseFile [inline, private]
    isOpen() const SdBaseFile [inline, private]
    isRoot() const SdBaseFile [inline, private]
    isSubDir() const SdBaseFile [inline, private]
    istream() (defined in istream)istream [inline]
    leftios_base [static]
    ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile [private]
    ls(uint8_t flags=0)SdBaseFile [private]
    mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile [private]
    octios_base [static]
    off_type typedefios_base
    open(const char *path, openmode mode=in|out)fstream [inline]
    SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile [private]
    SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile [private]
    openmode typedefios_base
    openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile [private]
    openRoot(SdVolume *vol)SdBaseFile [private]
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator<<(ostream &(*pf)(ostream &str))ostream [inline]
    operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
    operator<<(bool arg)ostream [inline]
    operator<<(const char *arg)ostream [inline]
    operator<<(const signed char *arg)ostream [inline]
    operator<<(const unsigned char *arg)ostream [inline]
    operator<<(char arg)ostream [inline]
    operator<<(signed char arg)ostream [inline]
    operator<<(unsigned char arg)ostream [inline]
    operator<<(double arg)ostream [inline]
    operator<<(int16_t arg)ostream [inline]
    operator<<(uint16_t arg)ostream [inline]
    operator<<(int32_t arg)ostream [inline]
    operator<<(uint32_t arg)ostream [inline]
    operator<<(const void *arg)ostream [inline]
    operator<<(pgm arg)ostream [inline]
    operator>>(istream &(*pf)(istream &str))istream [inline]
    operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
    operator>>(ios &(*pf)(ios &str))istream [inline]
    operator>>(char *str)istream [inline]
    operator>>(char &ch)istream [inline]
    operator>>(signed char *str)istream [inline]
    operator>>(signed char &ch)istream [inline]
    operator>>(unsigned char *str)istream [inline]
    operator>>(unsigned char &ch)istream [inline]
    operator>>(bool &arg)istream [inline]
    operator>>(short &arg)istream [inline]
    operator>>(unsigned short &arg)istream [inline]
    operator>>(int16_t &arg)istream [inline]
    operator>>(uint16_t &arg)istream [inline]
    operator>>(int32_t &arg)istream [inline]
    operator>>(uint32_t &arg)istream [inline]
    operator>>(double &arg)istream [inline]
    operator>>(float &arg)istream [inline]
    operator>>(void *&arg)istream [inline]
    ostream() (defined in ostream)ostream [inline]
    outios_base [static]
    iostream::peek()istream
    SdStreamBase::peek()SdBaseFile [private]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    printFatDate(uint16_t fatDate)SdBaseFile [private, static]
    printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [private, static]
    printFatTime(uint16_t fatTime)SdBaseFile [private, static]
    printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [private, static]
    printName()SdBaseFile [private]
    put(char ch)ostream [inline]
    rdstate() const ios [inline]
    read()SdBaseFile [private]
    read(void *buf, uint16_t nbyte)SdBaseFile [private]
    readDir(dir_t *dir)SdBaseFile [private]
    remove(SdBaseFile *dirFile, const char *path)SdBaseFile [private, static]
    remove()SdBaseFile [private]
    rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile [private]
    rewind()SdBaseFile [inline, private]
    rightios_base [static]
    rmdir()SdBaseFile [private]
    rmRfStar()SdBaseFile [private]
    SdBaseFile()SdBaseFile [inline, private]
    SdBaseFile(const char *path, uint8_t oflag)SdBaseFile [private]
    seekCur(int32_t offset)SdBaseFile [inline, private]
    seekdir enum nameios_base
    seekEnd(int32_t offset=0)SdBaseFile [inline, private]
    seekg(pos_type pos)istream [inline]
    seekg(off_type off, seekdir way)istream [inline]
    seekp(pos_type pos)ostream [inline]
    seekp(off_type off, seekdir way)ostream [inline]
    seekSet(uint32_t pos)SdBaseFile [private]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setpos(fpos_t *pos)SdBaseFile [private]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipWhite()istream
    skipwsios_base [static]
    streamsize typedefios_base
    sync()SdBaseFile [private]
    tellg()istream [inline]
    tellp()ostream [inline]
    timestamp(SdBaseFile *file)SdBaseFile [private]
    timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile [private]
    truncios_base [static]
    truncate(uint32_t size)SdBaseFile [private]
    type() const SdBaseFile [inline, private]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    volume() const SdBaseFile [inline, private]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    write(const void *buf, uint16_t nbyte)SdBaseFile [private]
    writeErrorSdBaseFile [private]
    ~fstream() (defined in fstream)fstream [inline]
    ~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline, private]
    - - - diff --git a/libs/SdFatBeta20120108/html/classfstream.html b/libs/SdFatBeta20120108/html/classfstream.html deleted file mode 100755 index 06a83b6..0000000 --- a/libs/SdFatBeta20120108/html/classfstream.html +++ /dev/null @@ -1,2568 +0,0 @@ - - - - -SdFat: fstream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    SD file input/output stream. - More...

    - -

    #include <SdStream.h>

    -
    -Inheritance diagram for fstream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for fstream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    void close ()
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    ostreamflush ()
     fstream (const char *path, openmode mode=in|out)
    streamsize gcount () const
    int get ()
    istreamget (char &ch)
    istreamget (char *str, streamsize n, char delim= '\n')
    istreamgetline (char *str, streamsize count, char delim= '\n')
    bool good () const
    istreamignore (streamsize n=1, int delim=-1)
    bool is_open ()
    void open (const char *path, openmode mode=in|out)
     operator const void * () const
    bool operator! () const
    ostreamoperator<< (signed char arg)
    ostreamoperator<< (unsigned char arg)
    ostreamoperator<< (double arg)
    ostreamoperator<< (uint16_t arg)
    ostreamoperator<< (int32_t arg)
    ostreamoperator<< (uint32_t arg)
    ostreamoperator<< (pgm arg)
    ostreamoperator<< (int16_t arg)
    ostreamoperator<< (const void *arg)
    ostreamoperator<< (bool arg)
    ostreamoperator<< (char arg)
    ostreamoperator<< (ostream &(*pf)(ostream &str))
    ostreamoperator<< (ios_base &(*pf)(ios_base &str))
    ostreamoperator<< (const char *arg)
    ostreamoperator<< (const signed char *arg)
    ostreamoperator<< (const unsigned char *arg)
    istreamoperator>> (ios_base &(*pf)(ios_base &str))
    istreamoperator>> (unsigned short &arg)
    istreamoperator>> (bool &arg)
    istreamoperator>> (signed char &ch)
    istreamoperator>> (unsigned char *str)
    istreamoperator>> (short &arg)
    istreamoperator>> (unsigned char &ch)
    istreamoperator>> (ios &(*pf)(ios &str))
    istreamoperator>> (int16_t &arg)
    istreamoperator>> (uint16_t &arg)
    istreamoperator>> (char *str)
    istreamoperator>> (int32_t &arg)
    istreamoperator>> (signed char *str)
    istreamoperator>> (void *&arg)
    istreamoperator>> (uint32_t &arg)
    istreamoperator>> (istream &(*pf)(istream &str))
    istreamoperator>> (double &arg)
    istreamoperator>> (float &arg)
    istreamoperator>> (char &ch)
    int peek ()
    int precision () const
    int precision (unsigned int n)
    ostreamput (char ch)
    iostate rdstate () const
    istreamseekg (off_type off, seekdir way)
    istreamseekg (pos_type pos)
    ostreamseekp (off_type off, seekdir way)
    ostreamseekp (pos_type pos)
    fmtflags setf (fmtflags fl, fmtflags mask)
    fmtflags setf (fmtflags fl)
    void setstate (iostate state)
    void skipWhite ()
    pos_type tellg ()
    pos_type tellp ()
    void unsetf (fmtflags fl)
    unsigned width ()
    unsigned width (unsigned n)

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()

    -Private Member Functions

    bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
    bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
    uint32_t curCluster () const
    uint32_t curPosition () const
    bool dirEntry (dir_t *dir)
    bool exists (const char *name)
    int16_t fgets (char *str, int16_t num, char *delim=0)
    uint32_t fileSize () const
    uint32_t firstCluster () const
    bool getFilename (char *name)
    void getpos (fpos_t *pos)
    bool isDir () const
    bool isFile () const
    bool isOpen () const
    bool isRoot () const
    bool isSubDir () const
    void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
    void ls (uint8_t flags=0)
    bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
    bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
    bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
    bool openNext (SdBaseFile *dirFile, uint8_t oflag)
    bool openRoot (SdVolume *vol)
    int peek ()
    bool printName ()
    int16_t read ()
    int16_t read (void *buf, uint16_t nbyte)
    int8_t readDir (dir_t *dir)
    bool remove ()
    bool rename (SdBaseFile *dirFile, const char *newPath)
    void rewind ()
    bool rmdir ()
    bool rmRfStar ()
    bool seekCur (int32_t offset)
    bool seekEnd (int32_t offset=0)
    bool seekSet (uint32_t pos)
    void setpos (fpos_t *pos)
    bool sync ()
    bool timestamp (SdBaseFile *file)
    bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
    bool truncate (uint32_t size)
    uint8_t type () const
    SdVolumevolume () const
    int16_t write (const void *buf, uint16_t nbyte)

    -Static Private Member Functions

    static SdBaseFilecwd ()
    static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
    static void dateTimeCallbackCancel ()
    static void dirName (const dir_t &dir, char *name)
    static void printFatDate (uint16_t fatDate)
    static void printFatDate (Print *pr, uint16_t fatDate)
    static void printFatTime (Print *pr, uint16_t fatTime)
    static void printFatTime (uint16_t fatTime)
    static bool remove (SdBaseFile *dirFile, const char *path)

    -Private Attributes

    bool writeError
    -

    Detailed Description

    -

    SD file input/output stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fstream::fstream (const char * path,
    openmode mode = in | out 
    ) [inline, explicit]
    -
    -
    -

    Constructor with open

    -
    Parameters:
    - - - -
    [in]pathpath to open
    [in]modeopen mode
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void fstream::clear (iostate state = goodbit) [inline]
    -
    -
    -

    Clear state and writeError

    -
    Parameters:
    - - -
    [in]statenew state for stream
    -
    -
    - -

    Reimplemented from ios.

    - -
    -
    - -
    -
    - - - - - - - -
    void fstream::close () [inline]
    -
    -
    -

    Close a file and force cached data and directory information to be written to the storage device.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    ostream& ostream::flush () [inline, inherited]
    -
    -
    -

    Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    streamsize istream::gcount () const [inline, inherited]
    -
    -
    -
    Returns:
    The number of characters extracted by the last unformatted input function.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::get () [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Returns:
    The character or -1 if a failure occurs. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream & istream::get (char & c) [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Parameters:
    - - -
    [out]clocation to receive the extracted character.
    -
    -
    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::get (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters.

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::getline (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

    -

    The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream & istream::ignore (streamsize n = 1,
    int delim = -1 
    ) [inherited]
    -
    -
    -

    Extract characters and discard them.

    -
    Parameters:
    - - - -
    [in]nmaximum number of characters to ignore.
    [in]delimDelimiter.
    -
    -
    -

    Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

    -

    Failures are indicated by the state of the stream.

    -
    Returns:
    *this
    - -
    -
    - -
    -
    - - - - - - - -
    bool fstream::is_open () [inline]
    -
    -
    -
    Returns:
    True if stream is open else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void fstream::open (const char * path,
    openmode mode = in | out 
    ) [inline]
    -
    -
    -

    Open a fstream

    -
    Parameters:
    - - - -
    [in]pathfile to open
    [in]modeopen mode
    -
    -
    -

    Valid open modes are (at end, ios::ate, and/or ios::binary may be added):

    -

    ios::in - Open file for reading.

    -

    ios::out or ios::out | ios::trunc - Truncate to 0 length, if existent, or create a file for writing only.

    -

    ios::app or ios::out | ios::app - Append; open or create file for writing at end-of-file.

    -

    ios::in | ios::out - Open file for update (reading and writing).

    -

    ios::in | ios::out | ios::trunc - Truncate to zero length, if existent, or create file for update.

    -

    ios::in | ios::app or ios::in | ios::out | ios::app - Append; open or create text file for update, writing at end of file.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (double arg) [inline, inherited]
    -
    -
    -

    Output double

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int16_t arg) [inline, inherited]
    -
    -
    -

    Output signed int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint16_t arg) [inline, inherited]
    -
    -
    -

    Output unsigned int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint32_t arg) [inline, inherited]
    -
    -
    -

    Output uint32_t

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const void * arg) [inline, inherited]
    -
    -
    -

    Output pointer

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (pgm arg) [inline, inherited]
    -
    -
    -

    Output a string from flash

    -
    Parameters:
    - - -
    [in]argpgm struct pointing to string
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const signed char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (unsigned char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int32_t arg) [inline, inherited]
    -
    -
    -

    Output signed long

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (bool arg) [inline, inherited]
    -
    -
    -

    Output bool

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const unsigned char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (signed char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (bool & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type bool.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type unsigned short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios &(*)(ios &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (istream &(*)(istream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (double & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type double.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (float & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type float.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (void *& arg) [inline, inherited]
    -
    -
    -

    Extract a value of type void*.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::peek () [inherited]
    -
    -
    -

    Return the next available character without consuming it.

    -
    Returns:
    The character if the stream state is good else -1;
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::put (char ch) [inline, inherited]
    -
    -
    -

    Puts a character in a stream.

    -

    The unformatted output function inserts the element ch. It returns *this.

    -
    Parameters:
    - - -
    [in]chThe character
    -
    -
    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::seekg (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the read pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& istream::seekg (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::seekp (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the write pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& ostream::seekp (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    void istream::skipWhite () [inherited]
    -
    -
    -

    used to implement ws()

    - -
    -
    - -
    -
    - - - - - - - -
    pos_type istream::tellg () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - -
    pos_type ostream::tellp () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classfstream__coll__graph.png b/libs/SdFatBeta20120108/html/classfstream__coll__graph.png deleted file mode 100755 index 1ce48aa5eaa16a0b9eda1a7111647d23bab2a838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25578 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 diff --git a/libs/SdFatBeta20120108/html/classfstream__inherit__graph.png b/libs/SdFatBeta20120108/html/classfstream__inherit__graph.png deleted file mode 100755 index 972da52644dfd53faee5d8721f09258e4e148c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10693 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 z - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ibufstream Member List
    -
    -
    -This is the complete list of members for ibufstream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    gcount() const istream [inline]
    get()istream
    get(char &ch)istream
    get(char *str, streamsize n, char delim= '\n')istream
    getline(char *str, streamsize count, char delim= '\n')istream
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    ibufstream()ibufstream [inline]
    ibufstream(const char *str)ibufstream [inline, explicit]
    ignore(streamsize n=1, int delim=-1)istream
    inios_base [static]
    init(const char *str)ibufstream [inline]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    istream() (defined in istream)istream [inline]
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator>>(istream &(*pf)(istream &str))istream [inline]
    operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
    operator>>(ios &(*pf)(ios &str))istream [inline]
    operator>>(char *str)istream [inline]
    operator>>(char &ch)istream [inline]
    operator>>(signed char *str)istream [inline]
    operator>>(signed char &ch)istream [inline]
    operator>>(unsigned char *str)istream [inline]
    operator>>(unsigned char &ch)istream [inline]
    operator>>(bool &arg)istream [inline]
    operator>>(short &arg)istream [inline]
    operator>>(unsigned short &arg)istream [inline]
    operator>>(int16_t &arg)istream [inline]
    operator>>(uint16_t &arg)istream [inline]
    operator>>(int32_t &arg)istream [inline]
    operator>>(uint32_t &arg)istream [inline]
    operator>>(double &arg)istream [inline]
    operator>>(float &arg)istream [inline]
    operator>>(void *&arg)istream [inline]
    outios_base [static]
    peek()istream
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    seekg(pos_type pos)istream [inline]
    seekg(off_type off, seekdir way)istream [inline]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipWhite()istream
    skipwsios_base [static]
    streamsize typedefios_base
    tellg()istream [inline]
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classibufstream.html b/libs/SdFatBeta20120108/html/classibufstream.html deleted file mode 100755 index 750fb28..0000000 --- a/libs/SdFatBeta20120108/html/classibufstream.html +++ /dev/null @@ -1,1911 +0,0 @@ - - - - -SdFat: ibufstream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    parse a char string - More...

    - -

    #include <bufstream.h>

    -
    -Inheritance diagram for ibufstream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for ibufstream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    streamsize gcount () const
    int get ()
    istreamget (char &ch)
    istreamget (char *str, streamsize n, char delim= '\n')
    istreamgetline (char *str, streamsize count, char delim= '\n')
    bool good () const
     ibufstream ()
     ibufstream (const char *str)
    istreamignore (streamsize n=1, int delim=-1)
    void init (const char *str)
     operator const void * () const
    bool operator! () const
    istreamoperator>> (char &ch)
    istreamoperator>> (int16_t &arg)
    istreamoperator>> (istream &(*pf)(istream &str))
    istreamoperator>> (uint16_t &arg)
    istreamoperator>> (signed char *str)
    istreamoperator>> (int32_t &arg)
    istreamoperator>> (uint32_t &arg)
    istreamoperator>> (double &arg)
    istreamoperator>> (signed char &ch)
    istreamoperator>> (float &arg)
    istreamoperator>> (void *&arg)
    istreamoperator>> (ios_base &(*pf)(ios_base &str))
    istreamoperator>> (unsigned char *str)
    istreamoperator>> (unsigned char &ch)
    istreamoperator>> (ios &(*pf)(ios &str))
    istreamoperator>> (bool &arg)
    istreamoperator>> (char *str)
    istreamoperator>> (short &arg)
    istreamoperator>> (unsigned short &arg)
    int peek ()
    int precision () const
    int precision (unsigned int n)
    iostate rdstate () const
    istreamseekg (pos_type pos)
    istreamseekg (off_type off, seekdir way)
    fmtflags setf (fmtflags fl, fmtflags mask)
    fmtflags setf (fmtflags fl)
    void setstate (iostate state)
    void skipWhite ()
    pos_type tellg ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    parse a char string

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    ibufstream::ibufstream () [inline]
    -
    -
    -

    Constructor

    - -
    -
    - -
    -
    - - - - - - - - -
    ibufstream::ibufstream (const char * str) [inline, explicit]
    -
    -
    -

    Constructor

    -
    Parameters:
    - - -
    [in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    streamsize istream::gcount () const [inline, inherited]
    -
    -
    -
    Returns:
    The number of characters extracted by the last unformatted input function.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::get () [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Returns:
    The character or -1 if a failure occurs. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream & istream::get (char & c) [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Parameters:
    - - -
    [out]clocation to receive the extracted character.
    -
    -
    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::get (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters.

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::getline (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

    -

    The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream & istream::ignore (streamsize n = 1,
    int delim = -1 
    ) [inherited]
    -
    -
    -

    Extract characters and discard them.

    -
    Parameters:
    - - - -
    [in]nmaximum number of characters to ignore.
    [in]delimDelimiter.
    -
    -
    -

    Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

    -

    Failures are indicated by the state of the stream.

    -
    Returns:
    *this
    - -
    -
    - -
    -
    - - - - - - - - -
    void ibufstream::init (const char * str) [inline]
    -
    -
    -

    Initialize an ibufstream

    -
    Parameters:
    - - -
    [in]strpointer to string to be parsed Warning: The string will not be copied so must stay in scope.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios &(*)(ios &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (double & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type double.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (float & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type float.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type unsigned short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (void *& arg) [inline, inherited]
    -
    -
    -

    Extract a value of type void*.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (bool & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type bool.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (istream &(*)(istream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::peek () [inherited]
    -
    -
    -

    Return the next available character without consuming it.

    -
    Returns:
    The character if the stream state is good else -1;
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::seekg (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the read pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& istream::seekg (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    void istream::skipWhite () [inherited]
    -
    -
    -

    used to implement ws()

    - -
    -
    - -
    -
    - - - - - - - -
    pos_type istream::tellg () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classibufstream__coll__graph.png b/libs/SdFatBeta20120108/html/classibufstream__coll__graph.png deleted file mode 100755 index b96a31c4e9a7f7fb9557ce2f65f1bbba3e49594e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2502 zcmb`Jc{tSV8pnT=Wn^jWO9n-DvL3roV;Q3`+Gh2KhOQWzR%~n@1IB73-KT22LM0_ z?f|>MsXhPz;^E`vs5_sRS2=|@5Md7ke*EneQcJS|;BY(~X5)$`tQPoPmAfVJu00r& zEgPCeZicU&J=$>b^<4oxueZnqZ;Quk4{xK%8>1zB2%GUq@}#N)*{c)03E%x_?0H_w z=J8#~{&1Lxh`0?I!a9bi=b@kesQjlNYfy!-FtdW8!Gb(mJP(T4`q@%ohDCf+d@Lr19B=K0&`Pl&73 zvR%V@rmW6t+oJ|`f{^!wB>tFY1atCh*I+; zZ(FHFf;Y%m6lORW0p6lKF`2ty+m1z5Z|)pgh1O;Cf3jf|LT?Q)&f2Lt*< z6~+#}TD(8!q+WIQrvbCDX9tFnuFrgzGDnLYSevm2MHN-F0;zoNed}gbJvz6O8R+K> zy_nrC6fl20RkIrMKxI05hO4O$2z~_*se>RotKALL;H)TEMUf{tV)h5%x#1s;AyUr#d~oXYobB zxZGPX1FBp|Fj1Bp-o~Z0hlT?to4;jO40*pcRiaKNu*GmtsVwa5DG_vjKAI@vE>Fm+ zT51OzR!Ht;bGIoVA>0{SjLh&Gw52u4GI}vLmSVH;_Aq^Qcj1g8OHgzUmAksSn$^wU z)t@d#L$PhGMH9m{ij)9?2|jWzUI69Ew4iQZt$?2Y7$b6hz4e~Psj^eemN2GQ4+1$A zNQYr$jQ-&zCl7z5JTqj06B1{f&ku@1T81ZPLHhP=@)S-vt0Z{|HR^sQ2>cu#&B~O_>ZS7outyrwNTD+^fP-KtY)js;~tW#FFYKGfhvZa zp1n7_$i}gDq%0oOccwC#Yi*EmqF=4sO{43WTn*!b=}>`Nv;OFSTDM*C8f`$M+wO`q z4IlM1`jAQi4zB7?JN#1u^A_w$MP89>Yc7+E;(C&}QeZ;s>dQ7)b#^0=aAc-dl^twL z9)C)>z4zNag{kjdN#Mk$(L{XP1ows;XkJifbo9x|*B2{(4XON|B8QMC4AK=blDP8z z&8DVxr<(b`v?!XYs(Z<>_K3RT-O5Vmukv442@E?f{21HK*%BBSL~qRyqNkr+v9OSi z2ign`wwJW@$b%-z*pQ{%F2$$zGZo&b@wMn(Dojw*010Qd_8=gk{?Q^fUE33mdPum` zh=54_GECxJ{bxI48Zv2~Pg;nuQtsBj&$l~8TNomg%3$}%O_*+4(wcU%9>;s0M+Pnqj|0SIdP znHDcA*>n?JWFTK6&xS9`d|xI_)9=gHE26#c6oUq9)PJ%vyU;BM$*U#&j=G=GE_9?{ z>sK>z4>=A&ImRtrJGgRTp$;@x9+mw0&)B1NzUX~JEPNhiq%IA)oLbQ#Q8h$4yxf!i z=ljU5OBX(bX{U2ZM*n0N}FD~ks?`C>B zmS0x3@p*GMKWGut>oiqSV+!~UHm!CT=HF9=$Xo1uVX^kZC)9*JZP4la$Bv#tTcS!X{E znZ`PKMj|n#Nd|xs$QosD8v%OArrfzio8Ev$%XEa$ zjj1T+6HAfe$LO;;(H&O!f)BJ}uatLwha|yOi(V2(;O!Ao zVaO}99Q`fsJEik5y^S+4!1^T+wNt=>-05b%Q>4IpEY8>uqsub`ld0d?`I6DobHJ>y z_o7;{+7jMxGbVlUy}e-6yN1#l{SZ5qKN55QWM*n}X##)8InVIU&f(pw6#{J9SlWhy)0bLkh>g(GB}yWpBPbq{snbmeO;Zw@T{IG1X3NMTageM2u^zl5j1wgyP21W2>@ Ztc-1)z8d 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 diff --git a/libs/SdFatBeta20120108/html/classifstream-members.html b/libs/SdFatBeta20120108/html/classifstream-members.html deleted file mode 100755 index 5c29b77..0000000 --- a/libs/SdFatBeta20120108/html/classifstream-members.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ifstream Member List
    -
    -
    -This is the complete list of members for ifstream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    close()ifstream [inline]
    contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile [private]
    createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile [private]
    cur enum valueios_base
    curCluster() const SdBaseFile [inline, private]
    curPosition() const SdBaseFile [inline, private]
    cwd()SdBaseFile [inline, private, static]
    dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, private, static]
    dateTimeCallbackCancel()SdBaseFile [inline, private, static]
    decios_base [static]
    dirEntry(dir_t *dir)SdBaseFile [private]
    dirName(const dir_t &dir, char *name)SdBaseFile [private, static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    exists(const char *name)SdBaseFile [private]
    fail() const ios [inline]
    failbitios_base [static]
    fgets(char *str, int16_t num, char *delim=0)SdBaseFile [private]
    fileSize() const SdBaseFile [inline, private]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    firstCluster() const SdBaseFile [inline, private]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    gcount() const istream [inline]
    get()istream
    get(char &ch)istream
    get(char *str, streamsize n, char delim= '\n')istream
    getFilename(char *name)SdBaseFile [private]
    getline(char *str, streamsize count, char delim= '\n')istream
    getpos(fpos_t *pos)SdBaseFile [private]
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    ifstream() (defined in ifstream)ifstream [inline]
    ifstream(const char *path, openmode mode=in)ifstream [inline, explicit]
    ignore(streamsize n=1, int delim=-1)istream
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    is_open()ifstream [inline]
    isDir() const SdBaseFile [inline, private]
    isFile() const SdBaseFile [inline, private]
    isOpen() const SdBaseFile [inline, private]
    isRoot() const SdBaseFile [inline, private]
    isSubDir() const SdBaseFile [inline, private]
    istream() (defined in istream)istream [inline]
    leftios_base [static]
    ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile [private]
    ls(uint8_t flags=0)SdBaseFile [private]
    mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile [private]
    octios_base [static]
    off_type typedefios_base
    open(const char *path, openmode mode=in)ifstream [inline]
    SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile [private]
    SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile [private]
    openmode typedefios_base
    openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile [private]
    openRoot(SdVolume *vol)SdBaseFile [private]
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator>>(istream &(*pf)(istream &str))istream [inline]
    operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
    operator>>(ios &(*pf)(ios &str))istream [inline]
    operator>>(char *str)istream [inline]
    operator>>(char &ch)istream [inline]
    operator>>(signed char *str)istream [inline]
    operator>>(signed char &ch)istream [inline]
    operator>>(unsigned char *str)istream [inline]
    operator>>(unsigned char &ch)istream [inline]
    operator>>(bool &arg)istream [inline]
    operator>>(short &arg)istream [inline]
    operator>>(unsigned short &arg)istream [inline]
    operator>>(int16_t &arg)istream [inline]
    operator>>(uint16_t &arg)istream [inline]
    operator>>(int32_t &arg)istream [inline]
    operator>>(uint32_t &arg)istream [inline]
    operator>>(double &arg)istream [inline]
    operator>>(float &arg)istream [inline]
    operator>>(void *&arg)istream [inline]
    outios_base [static]
    istream::peek()istream
    SdStreamBase::peek()SdBaseFile [private]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    printFatDate(uint16_t fatDate)SdBaseFile [private, static]
    printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [private, static]
    printFatTime(uint16_t fatTime)SdBaseFile [private, static]
    printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [private, static]
    printName()SdBaseFile [private]
    rdstate() const ios [inline]
    read()SdBaseFile [private]
    read(void *buf, uint16_t nbyte)SdBaseFile [private]
    readDir(dir_t *dir)SdBaseFile [private]
    remove(SdBaseFile *dirFile, const char *path)SdBaseFile [private, static]
    remove()SdBaseFile [private]
    rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile [private]
    rewind()SdBaseFile [inline, private]
    rightios_base [static]
    rmdir()SdBaseFile [private]
    rmRfStar()SdBaseFile [private]
    SdBaseFile()SdBaseFile [inline, private]
    SdBaseFile(const char *path, uint8_t oflag)SdBaseFile [private]
    seekCur(int32_t offset)SdBaseFile [inline, private]
    seekdir enum nameios_base
    seekEnd(int32_t offset=0)SdBaseFile [inline, private]
    seekg(pos_type pos)istream [inline]
    seekg(off_type off, seekdir way)istream [inline]
    seekSet(uint32_t pos)SdBaseFile [private]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setpos(fpos_t *pos)SdBaseFile [private]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipWhite()istream
    skipwsios_base [static]
    streamsize typedefios_base
    sync()SdBaseFile [private]
    tellg()istream [inline]
    timestamp(SdBaseFile *file)SdBaseFile [private]
    timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile [private]
    truncios_base [static]
    truncate(uint32_t size)SdBaseFile [private]
    type() const SdBaseFile [inline, private]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    volume() const SdBaseFile [inline, private]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    write(const void *buf, uint16_t nbyte)SdBaseFile [private]
    writeErrorSdBaseFile [private]
    ~ifstream() (defined in ifstream)ifstream [inline]
    ~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline, private]
    - - - diff --git a/libs/SdFatBeta20120108/html/classifstream.html b/libs/SdFatBeta20120108/html/classifstream.html deleted file mode 100755 index e9813a4..0000000 --- a/libs/SdFatBeta20120108/html/classifstream.html +++ /dev/null @@ -1,2019 +0,0 @@ - - - - -SdFat: ifstream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    SD file input stream. - More...

    - -

    #include <SdStream.h>

    -
    -Inheritance diagram for ifstream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for ifstream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    void close ()
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    streamsize gcount () const
    int get ()
    istreamget (char &ch)
    istreamget (char *str, streamsize n, char delim= '\n')
    istreamgetline (char *str, streamsize count, char delim= '\n')
    bool good () const
     ifstream (const char *path, openmode mode=in)
    istreamignore (streamsize n=1, int delim=-1)
    bool is_open ()
    void open (const char *path, openmode mode=in)
     operator const void * () const
    bool operator! () const
    istreamoperator>> (ios_base &(*pf)(ios_base &str))
    istreamoperator>> (bool &arg)
    istreamoperator>> (short &arg)
    istreamoperator>> (ios &(*pf)(ios &str))
    istreamoperator>> (unsigned short &arg)
    istreamoperator>> (int16_t &arg)
    istreamoperator>> (uint16_t &arg)
    istreamoperator>> (char *str)
    istreamoperator>> (signed char *str)
    istreamoperator>> (int32_t &arg)
    istreamoperator>> (char &ch)
    istreamoperator>> (uint32_t &arg)
    istreamoperator>> (double &arg)
    istreamoperator>> (float &arg)
    istreamoperator>> (void *&arg)
    istreamoperator>> (signed char &ch)
    istreamoperator>> (unsigned char *str)
    istreamoperator>> (istream &(*pf)(istream &str))
    istreamoperator>> (unsigned char &ch)
    int peek ()
    int precision (unsigned int n)
    int precision () const
    iostate rdstate () const
    istreamseekg (pos_type pos)
    istreamseekg (off_type off, seekdir way)
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    void skipWhite ()
    pos_type tellg ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()

    -Private Member Functions

    bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
    bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
    uint32_t curCluster () const
    uint32_t curPosition () const
    bool dirEntry (dir_t *dir)
    bool exists (const char *name)
    int16_t fgets (char *str, int16_t num, char *delim=0)
    uint32_t fileSize () const
    uint32_t firstCluster () const
    bool getFilename (char *name)
    void getpos (fpos_t *pos)
    bool isDir () const
    bool isFile () const
    bool isOpen () const
    bool isRoot () const
    bool isSubDir () const
    void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
    void ls (uint8_t flags=0)
    bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
    bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
    bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
    bool openNext (SdBaseFile *dirFile, uint8_t oflag)
    bool openRoot (SdVolume *vol)
    int peek ()
    bool printName ()
    int16_t read ()
    int16_t read (void *buf, uint16_t nbyte)
    int8_t readDir (dir_t *dir)
    bool remove ()
    bool rename (SdBaseFile *dirFile, const char *newPath)
    void rewind ()
    bool rmdir ()
    bool rmRfStar ()
    bool seekCur (int32_t offset)
    bool seekEnd (int32_t offset=0)
    bool seekSet (uint32_t pos)
    void setpos (fpos_t *pos)
    bool sync ()
    bool timestamp (SdBaseFile *file)
    bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
    bool truncate (uint32_t size)
    uint8_t type () const
    SdVolumevolume () const
    int16_t write (const void *buf, uint16_t nbyte)

    -Static Private Member Functions

    static SdBaseFilecwd ()
    static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
    static void dateTimeCallbackCancel ()
    static void dirName (const dir_t &dir, char *name)
    static void printFatDate (uint16_t fatDate)
    static void printFatDate (Print *pr, uint16_t fatDate)
    static void printFatTime (Print *pr, uint16_t fatTime)
    static void printFatTime (uint16_t fatTime)
    static bool remove (SdBaseFile *dirFile, const char *path)

    -Private Attributes

    bool writeError
    -

    Detailed Description

    -

    SD file input stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ifstream::ifstream (const char * path,
    openmode mode = in 
    ) [inline, explicit]
    -
    -
    -

    Constructor with open

    -
    Parameters:
    - - - -
    [in]pathfile to open
    [in]modeopen mode
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    void ifstream::close () [inline]
    -
    -
    -

    Close a file and force cached data and directory information to be written to the storage device.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    streamsize istream::gcount () const [inline, inherited]
    -
    -
    -
    Returns:
    The number of characters extracted by the last unformatted input function.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::get () [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Returns:
    The character or -1 if a failure occurs. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream & istream::get (char & c) [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Parameters:
    - - -
    [out]clocation to receive the extracted character.
    -
    -
    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::get (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters.

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::getline (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

    -

    The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream & istream::ignore (streamsize n = 1,
    int delim = -1 
    ) [inherited]
    -
    -
    -

    Extract characters and discard them.

    -
    Parameters:
    - - - -
    [in]nmaximum number of characters to ignore.
    [in]delimDelimiter.
    -
    -
    -

    Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

    -

    Failures are indicated by the state of the stream.

    -
    Returns:
    *this
    - -
    -
    - -
    -
    - - - - - - - -
    bool ifstream::is_open () [inline]
    -
    -
    -
    Returns:
    True if stream is open else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void ifstream::open (const char * path,
    openmode mode = in 
    ) [inline]
    -
    -
    -

    Open an ifstream

    -
    Parameters:
    - - - -
    [in]pathfile to open
    [in]modeopen mode
    -
    -
    -

    mode See fstream::open() for valid modes.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (istream &(*)(istream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (double & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type double.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (float & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type float.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (void *& arg) [inline, inherited]
    -
    -
    -

    Extract a value of type void*.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios &(*)(ios &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (bool & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type bool.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type unsigned short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::peek () [inherited]
    -
    -
    -

    Return the next available character without consuming it.

    -
    Returns:
    The character if the stream state is good else -1;
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::seekg (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the read pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& istream::seekg (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    void istream::skipWhite () [inherited]
    -
    -
    -

    used to implement ws()

    - -
    -
    - -
    -
    - - - - - - - -
    pos_type istream::tellg () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classifstream__coll__graph.png b/libs/SdFatBeta20120108/html/classifstream__coll__graph.png deleted file mode 100755 index 63a60bfa57a9d8ab94d8f863e80338bedb29f8a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20663 zcma&O2UJsCw=NtDpme396qPQ$O0R;U_gK$rM`1zqK-AP_4EtfFWboV$$*3C|5^ySzLJ&_Ogt^A938 zo|6<5$u^E?64P4FUH7>nyFmPnLzMfCzHUk=t>~uYaz1kkE#+%Az8hRmeNL*>R)c>B zzZDa4{WNG|mZD&Bom@9Vd|)`@0{7&hZ5C9ML&R_FAXJWdlH=qw@2p$oL@YlHIRC#N z1z^*uE1&{!mkFXxFZSaQDfrZX>YlC@wK9k@DFBk8-Y&Mu`ll*_t;=lt&J_?mK0w+U z&NRdx0vr^f2z(R-DpC=;4gzH}_ECaBE^fdFK?N0hq*p+0^D3O8exF6k-m`ClK+m7F zT8G}m{#hnDdKh4hea0YtUk&)&TVgtP13uG1Gt(=M_~%Eq&bNfR)7d+|=_W_c|4O=) z>_DnqaERn@hf@tmpe!#iT0upwAW7f^3Kv}de|Svx-|l@d34Bp}|7>;Bx~A9N0OnPP zdY<{?x*G`2Qo1`=WkhM{CPys_=Q5806$nk885ym9v)LO0-72KN`usF=k5aFT%OukL zt?q5|)GG?VD$13(GJRKTPgbAv6gu7jZK`!wmHJxsiRs;Y8xd_Lbm6Pja<^KDYE{4~ zFMTkELjgZ)d*PF-gF)$L-986N@)OUZ+v$+is1%VzUAOubzcEGutOv7=QcWlMXCQsxnGbYbTEgYa=kH%C39pvD0n8)Fy%t!ssCsai$AOu&9My`@lfYZ> z@m4y~ZeaXyISu{$;#$9r5hD@;&0D~H3S5|A%HCp_5Gqn}#_RWD2X+4*-zO54so~r5 zBU}J16clDNrT4s4OekHx+zI^;iaQ-pZ{M&Mx^p zOXdLb0>ir;*Z${{{fD*O#T%QkC1|ekT}N>;exv;BaWq&={(S9I=@EXrnBg}P*(b4P z9fsv1d$Wu5Vw>aO`N?m2KQA*H^CDI&j;7XROU`ac-xA7?i&07rVQ1Iq`j!dq-RoZM!G=!T`L zS4Z?@8DRt$VEA1mTRm zsOj#AvswC@U(Q^2+2Fy^_uRi5`v1Q8CM8Z?o#?8Maq2Eya=Yv1rt7Pt2JU;c`aE@u zj3FU~K4OE-77z2S0_tQQ8j&WM#1ZIKxUT6Bhi}?BntXIv3OfEUKh!Z7x%$mu_s1s6 zaK^srvFv52aJr+>=JHda$tE9pXM0qJT6KiDiISN-Nu?g?^yF779kVU7nxtUo7Nv{9 z=p#~1-Y`znxSkyK%W8YyBAiFEW?Ot=cr}monc2*xKF*tn%BV1JdhCESQ+98^SNk|c zCQND`^KH~TIb^1NpeA!c$e_D8=vB18DnTztaW zj(eyoZAZc;S!u8i7cZ2KUD>oAmV+-%FF5-J)@-{@e{oin1Wr3`C)BImOl*`KNo7>E z$|G~&IF??1D;^fNVy=drQ7$|(tB~oVEl4%1P5M&}hinNg*Yh1AoyD4q-G&0@xMsyo zwhwp$&R~O~d}+=_nya~ED!*1X<)IfQUGS!{wSCMGuFFY|q|ztLqmxVSOZ_?&bzc`w z%p{Lc%=3Nqr`lG*~Xm(!yNgBoEWo~zN*q5aNHFg7R8;Zj<^|c9WsQ^`x0wD;x6ge1@9YM z%QlG1;nzNT)xgNosdu-=ty$S2dghnP#b90H+>1=2p}OPXy!>)unE6}OV7f-B$n1h} z#cQ~Hj=R33d5o{vByES{D&q{teC_zNRHKdDLM0AN-koU`Q3= zEas{0fAv7+j+@ZM-~_MC{9Vy??M~A8d47&;CrOM$P`*o-_>ffIU?^{3b}Cvv-DhjS z5N92awcrVCwUb-sn2f62s!cmF9^Fm)5HXE#_OlA7o%$@PtoNpA{Hq;=2$e^t=wCCV!sBP@maMOph?I&oUfIa}< zX<0hZoHDEAI#`usD9h?{JyvY6k$)(3vTiXWCzCr*s|u?iXW~M)tY+z6{w!3c9=e-} zx}dYD(YFx9KxUpUm>eXX*`zFgKu1~si4sVApmr@MvsSIfZo>&Ys}XO+t9=a__I1k! zn=GrdG&Vde>p$S&^w^6|@9}aseKpgVkS#Zstpg!aB9DYi0xHlsAO;8FlZR4e6kd-wO6ONAE zWGMrYEe%rUr-(3K(xvr-Qt{?@&W#w7I;{K&TL=Feadu#^J@UoK&BwbrT7#{Y9A_>; zJQFtP@T9~Xe&dgW4zsm0Us4l#SXAb9`pIJOUxexmPQXlu2Q!JOBz7hj$gVIN z@$LtDw%$5^-S^I$a_01@?&8U^UBhs1^F8pSXC`-f$5kQ%3Mr)J^#bO=(6Bgx?esdod6c)@QaUhR2Sh8vxd0PNluZs8v4 z-a$w)kr4fsEr68Qx<|B9W`vFOmA#gfw$~(k#nXE$zR{ns)Jjc-Q4^=LC!B;myx9F{ z;(IJ%q;p2dmQlGhC3rYj4A1uBnYBcx9US8Twn5DGZd)Jk%$3ZH?^G9CID0d0Xj(Ov zZH@L+gpPAi6aH|v;xT-lUGlNiO!(6DX{1Y2{d9vSeJ;F?;~b_+^O{pNy&Ni&9dF}- zh}tS0lF!tGMvjY6_jEG0y+vl1wsiWk=4}HQE2`LZjk&ElZF`+x7F+*fM1;Te+WcUi z;m={ey)e|X>+kN+_UY1O4V#qR?t+Xycg%C)!LMX-pVGf-Nm9xjn8^n^ht{i#tK zdzukzkXK&Ie0#5j*dL}^>=yky(gMTmGs8q*Zp<_<|4cy9tzyi4BV8Hm0QmET=snd=TX zK2NXs0_CuRPP@tSw3OQ^2Get@n-BuiJSw@pOk85G1XC%nMb63V@bTM@dy?jIX3k4ZsZPT zQq4I0=ZtdmV_3yIJ<`W3^^dns;`@Z#md&0Wjc(w^!dg1rT!0S(O!k4q@12yuQQq{l?s&kS9;zDbEF2lP! zeY!A<$pB~PtT?7!#bB|KrP2<&0j9H(-nsmhZ2kd9Msi*mw&5>fRNM?tJ*_iJ6+4Shl2I0?vXs^iXMQcYdmM!LZ8$R$wLTm=t zw?!T^O?_3{4~@#$q>o{ugPW(0nluCb+RLk=0iCtRe)hwt|~*?+ol-Cif1mZW$! zJ9OT#cKpOfCL{uY;#`>qE7}N#Am+mlZQW%|oCY~thcvG=VnSnnUfzoNq_`{IYk_Dv zVki7{ORd_B`8DU+pM-1mXF0;epHr)#6%%cXr&O=1EZeQTbR0iF{V}Ta1QI$Ew1lp& z!=M&JxnB=DdpcJZ3*?>qN6EA))(!8CoEw6dNnQ#rrK)$vDZ#rxOnQL24ho9>Hg1R< zwVp>n^4?;n`Cgpl`>aEVibhQYYOGsrGd-)(ET%3!+YIqh5#c>z8r~s}j~0(*!5UZ5 zB{UUZbRNW;rSi-DX`UBRwP0ZhLO5%4BwZJ2-ich>Tly^WVesh)!or%tD<4M$wGj&n zJ|!5E;Q!{c%-b?V-Wj%Qvn%%-YRy1l$Cvt|Pr3i$4S^s`Rhm~@nRD;YBt2&(G*=Ac zFpb9UVvs0Rt}6l!IrfN)_AX%MNqI=o;d;8!&`|RhNrXDj0-PbIXw>lGj6Z6gAx5zh z{-U>_0a%$+Vl_8Lz_}!WP%@?hE1o}O4m22g$TBbe6>F08!Va!@gnz->!nvm!NG)UV z2GQG@$n4+cfWFT!4|NkMemu{hRU`uznCvx6CH*M-^aORYQ`=KYwSFkhj*ipnOeKO>Zeo z9UyMV9Q4}L4w#$cTHsr-iGTU+6BQVdf*0Lhl=mIJcdN7bC>Q1pi}2v$OWk?|?r6md z4DS@%QsRR9zTYO77rz-_$U*yBF@flZ&+c&rF8F}fuj76e_A`($2;6!Xl)dxP=jASL zW2(c{rNlR7lALO*8|0bPFYlu%_#?!gv{>R@pQv~=db60`%?_o!zr|)HL8-%`RH3$3 zC4zLal%mwR__6|I=RI7$UuU@Q-*sMJ!mU;7tt(t??P+$&c8$~uVf?@D^y;mC?iICua7_t)TFyKdGz)K-PHl=^l5szE z*@}4)e1KWpx>>rZLE232U&ar?MrC71_yh99sC&dVEsr)fqwfTAPxYMDJWkQQq4@K< z+ltVKXT9#O{CSxn%t?#EAN(&s)v zN30#+1ADW$f_paYgYKR?OttAET^N+Ksg+96V0OZlWByd~7Qt3Df<0(BMasa?64yDD zpCYB!W!i96QRaFbKMM>u&!WS>2c(s!UKYbUIl@uqh*)zGA#w|QrAE?1 zwrjA8C_l_B0fKRqFSLzm`F9kLt1;#4z10It>f#=efJMK_mgR4~9tnWGaWIYi)G3aZ zJC2b%8@~@(@*8|U`RO?;Ulht(F&mkGD8A3wE> zOuB4QSV?^>q42$?S#W;(Yrx*2+eU+a@!411^L;p`Ku(X;Rvqv_qU*LFKKC>0x8{^w zKEsIB&Yiqq88<(iRSQ0BYxDvVjkDhR6;S8hKFY!STefvXhb6a3ibt;(L{`Ufo=~8) z--Z-%rUyq&g^bT}#pnj&qjf+qO?nj$#~i*mw))L_7j5Le5MZw*gI!9*x&wHVpWo;9 zQ7epgC!RfMTZEBt=voVvU37fdb;Yn7?l6|O?X8(2hC{Tz^AGMG)Vh(S~+f%Sy-$#5!c0Stnw&Br5H2NV9!4u>pVvnKG}|ku$y* z)-JNf{$bU(u(-hTb}bs7U?3FUeMtAN&ErRmtc5wEybVj-)@6+#Y_nPtp{_l&eI3`0 zHS#P6QnfV?+5>tL$Vp`*Y*wd*YdfIb%-rf)$x$`yW=QF{b|k#I+~({&oLO6Q$WFMP zg$!b2;=_!2t8;WC9+HqG3eVr?T0R)srKLyyov`C8VlrAI0z zw5yQxEfl*KEn;~tTk%EGYw1Bt)MiR~H-5vI#SE+s zSw3W0>sy1Tccvc4N3aBIujvpf{>jL5n7x!xyw_-Oe8%S}tJ*zm>6IB&mT}ylN*DOW zASDYK)sAJLiL|zD>?$G8W99a4?UlJdi+S(uXIsUFdpIBsQ0%$ghvSYSt7~ zukr4brooU&hA~ciFl2M}YmXdaMfFHjg|>tcut1=e?2C8Q9-kBWWc>gm&rMoGQMw1j znoDJIa|N z&~Cdby(P8DI@Zo7Ui}^Z>0s|oa9~%VGZzj^Os$lfTsGisAWiasxRB%1v;+K3*8wXj zL?VCUkP`c^s@KwtVW2I zW+92>g{QDz*ha&uV#1Nsv3ivca_E0y#dAVsr0GSU9aB!#36_1-3yojtXH`#Se^Ij0^u=Z_RDL@8o*~m0L zdTD0ji&|+s9?x+m1Mn@c=rDuwe*XjB*Bl*MT8&B0Csn0aDQI*jS;Q6O@VN?kIB$`X z=^s-P^kiWhF>73QyXrx54AWPbNF$H{S7$QmWfm7}-XWD`mG@gzVCA=G_~st%Kxf|B z%ihp|99o0#gzCqY>aAbpdC}_t*O2xaY}Q7!GqwDdN0r#s%qga~o@3!6X%;qi&&n2! zbE=Sw-TT{zJNZdc29f|gvat8s^PlI|aX$-V>(e~8PmOYMNB)jdfl&=Bdhegt2wtUFhv`;=LB^pGd(I~fx%8*y~<_<0&0h^oP=ZUeEYKa|qT zW9o!xMOo-|**M_!u3kB8(ZZL_ZPjRP_T6}?S%;(kRGaiep|*$;XRgSIsgUeX_(BR1 zixeN+v9P6#1fsFK=%!}rrtEfEh75%q0lqzy{WU!nB^t3ZZ?-4a!VFdex2t)XgizL4 z0mZ}p&G0_c77wd!G|}+|U0cN0MgB;CIOhERo>wAw>!0sPr~I(9oEBABF?A+?n|-7P zJ+DMdDqHm)n0+)}ib~g=D`q?mz)c~#^n?%DU;uZ&wF96%*#*PCI~$rX^xAUTp@D>a z0FWi3;Ua~Bmf^oW8;}UTy=6TR6E~UwEbohXh~FIXkC=7+fWfBttv>k7W}uPUf-SLO z`f)a@FlXUFna{t7e8WC`QwuKmWYzVom%o<}`p^o;3>E_S2%;C9kugyRaTXNwv;lGj z#sCi$@E)jh3EaS!Qz+H4k)`(5JRS0sg}$?8Wb>~KvVdxNq2Tnki_wLco)(}S!AWe& zfSwah01PJ@h7da=(+&(P^u z3t+kdXEB^&5RwE^=nN|X>B&i=f{F5ZJ4YtYngJ8MlEV$*=r+J~rR_T{5$$M?UYg z6Fhs!Nl3A+&4F8Tuuj6-_dhV)MP5FGMg{v?iqHFk8Jilb4~Al-~-IKlntN_SSnV+-SmLi zvT;{RX{}s6G^L~s66xtRn^aPl{hhx*) zGK&uL19S&uCZ(}N{x_aYsyD~fWB_OLVSZg}2HkFdR7ncNrW~twBSeI6hdAw!Wf-2C zQcWiUJ&Kf@3Q3G_ zIF~mNJ%gT4Cv%-6M`=_AW*<^4{HhoO|BxTt$%Oh3G5k$6=~=T96rEc%b*>Ls1Y1%| zhLO&m`H}S{TRcJnpy|g#*QaWrzDT1r`OP`0FpL6VLIj_C(Bfeo8VKs^rjPuqOM{oai4vZ1QBmMjugvYxW-s((ZDf!04?f47NLN+3CoC*rR!Y#XI(*-Y)utoiIhb zZSJ)1ZUNh-@$E$0?wl8(@d352$ly4&M=CCUkxhT1)Ul2=z)M(qJ^i zGGtC`Qmthamz{Ho0XWh%U+s=1%l4IIEFW|(PPnIgK9gX416X#csZ9FCE>380{i1|U zr^m!;mtEa(t%IDjpuAV#cL;>y`roJsnHsJ(0c~Cb3dzjY&>t~Y%`GK8d}!0QfD_Wb zT5d-vv9qbu(Wxp_c$)_2bwsRj$?cQJu$u~vk6tjkC;*9{q8(eVWll9b7l?xPgbg+H zC5LTVCFBKRmyi1m@+B};K;R=0XQ#TP>`R^e>mX%Gn#gi|tz4nGj<0>ZwOV*nu{R6D zD@sO$d*p6>{vrIBK(`;b215Uf2R6vn@2KRZ=CMQx%M!XWt8*Qq@UY+6v6o{hxOJ?& z2cJ`TDwx~z^qYHkFe=ApzozF5l~>-pA&?rDF%vQ7J!jvaBAXg{4MLt3@Y_pH_!M1^ zxIBAZQkx;1WWSbwaB6=nbMbpd)8pN6emeGKWap)t!Tz#}-r~-09`IhG%Tkk9M~OST z&z+l~k7=HnE1sW7<^5ZJop)Xc9Jzk-&lE+^GJA$)iY^)2aA1npVLwIeIx=LEBu1s? z#uiR&M1W9rCa`q5)LhSps%TTa#XBYy%4Bj{L;(8!n7^WIbUN;vZxUaEdA(OZi9ml~ z!jtQIL_mY&&24<2^uLQV{`N@)xj~N+KcgWQD zk1%@|;S_rD+J%LTT1wtBg<-MbKVDQvMA=t?5xJwb6bg-B*`3iykE+ZE;>MCgH49g> z-LpKf@p*PLv!gx@vo~Y=bTffQD7D+oZ?kT?F1g#0(OF<&WiyrudQi9|(#E;82e z=Le$do6{z4?v$}z+hSSn!SkZ^UqPgH|gH>ol zdgp8E!cGj2#99I`}i=K_>)yCS{^lLf( zxLW#siCMv3N(Es(orhj#d3ID$3v2r>D z_P~KKrhqc18GK}XWs~|6qsgCnF*#`X)23*YVCw#^0$BmCd0A4pr57J$#Y;^MRu28A z+GPUQh)^UmNgq21w{#Q($MOK?5OlZZ-T2K4hVN5@@`M-FLl}a03<#!15nBq z0D-wVc7nshDZLUOG3qt|2Gg7e*eQRB<<(lIMd~t(C0g5(G9Uznr?;Ut4<3tmuP!%6 z_zCYneLe9!8)*1FRS%`;s9;aSEus2%!Xu^@xne5eQTyX|ej4hbO@WQ$I}SBxp^mnq z1J4%#wb4^`sXQn~(a*gl(>g_Hq%=q+y<#4yCR2>R_oQMi9ch#x2!681??~WuKxa{X z%{LWG&~^$vJO$9g?)2!C2LP5izwJ0fbe2P|hGpn_S~YkT@%O^Dq!E~LS6(5|3DzqFC!f%*_h1wo@lL7wJ_IfAuKcl8;001nt6(` zZ4gqfM8E|raHE{T9xuTpGt8lw_ihAk;;0IhdTE-doUmtUGJjIL{)E@|2%}Rh!GzR! zt064C_?c|IUX<7lsQOWq&uug_#2QOlPfEIT;oJwJw#xW~qtp>|r-EaxjrSJ(6?T9L z3A%D%SZ|~VVH&JX>sOW`{y8Nh9I_QY)l^R1L57k!k8SJ(`74l?`N>+#IL6FwH^iGo zJK%(xiO#84xCY`su`4qMU1sCHe9v47v<%{@gP(lJF+UD*8qH%K8V>t`Zi{*&=wu++ z5|xVl9$z@Rmo?0O@e4r3nIRgXkKe{sCrGjAZUHWm7TrPM#H_B5XHPU18h=F-11Pdv zB8{A+R5^%R2~x7#K`VQ|LZaP4;o`d>!}IzZi&uj%aj`0Gz)D+)AWXE5y8zq@lomvA z6CgHlW$JaE>ruj4NnSNL;M_{>`&D5CaA*8GBov=LIY!<{sWr^)bESz`wRZws-lE!# ztgAqzaJ2P8vW+AHZwf+F$aSKIo^5Tc7mr?@k_KdDTnXdnl72`4w~wskCXwVNNL?Gh z;lglLm%pV0+tVhq=U4x4*-PJFcn{F_5~{FkE-JaeUdvMnh;?T<89WN>b8H^@liPvv z-^ZOaYuPor@eAzACAaqhVxnxtt7T$B=x1igkQHO(q(wYC^~8w zG$+0rHMD=Gg7NQ?0g9*Ful%mI)Pl_$fZpSv(1=~8nGgp?u1rdxpbWq?Tsf-}ykk#J zlZI1jzI&*n_Khz}oVDtn0B+-3!R~Sg7pp!}JjZ2}MMTMfU!zroz-pi&&}*adqhB&w zx?ehe$P>`5*|z+Ot-^%)iF)f{G))WhLC>$yonh z<3#*2p0qc8EWnOVL*u#31$l(Wtj#vKZL zNGX#IdO=;kP-W!&kiGiX6VoODH2dY_&%$5DqgO;9j51t({suVKIR^2Z=m)o+^Ofvd zC-~Q($jf(!@e`(N_J3ak(0~d);@;E$z|{PnbG!bCO49Tu^!T!`&pzxZGR z2tV+c3wXeDfrOC@7Xf`s>U99=+TzKXk)0^KUNU0J>@Q;tG91VEI#ve!BSM^I1Q4gi7ZV=1-}K#EWxdwMpIvQrGg zt1+LKT_m_Wz{s%)*LZy@M!lA3 z41;m_+Dknle7(S0%YRh2Mwz^CSHYJor|N0;po}_{g{OG@K;TGl-k~fr!tPS#mnH{M zJRaxdX*DWyt*xwvPjZQR4gsT_YKijl)XuHS&j*O4@6@O5+%mvV=i>^E+m(`M6?n7* z(qtykxrX1y|6LRPKf!WqHmL&NyotWf)IDD)QmR%9lE)n3@o1AbWcwld1zcI>y;E~O z>s*r-wW=hc)`@2f+VdhrON!0yKuIO{&P0+2%iXG?C z+y`u69oeJQH>sT}BHk=Ou>;6-KRS{~Y|kSgODn!@t~j6orUKfwJJ}L@24RGXp{Z=p zzBTWKL$T&e#(qg2~_KQe~OikiN9MF=4dnyW^;_C7(ckdxJn1ES4znSIVzIe5b z0HU2DMd6myp`9u7miO7oWbx>$IG-$15OJ%={|k>!JH3ud`{dn|rNAp{&0~ z1_JZKYv&2F{Ig4De5}k-JB{D27M8UkU3X`sc2A5&nlsJu2ZS67nD;0ka;#^1!#^cQ zezY0MkHTFYu<7o4Lh|*r5KmYt$nl}6G#LkWJrHjQe#92NdA;CRMm6l~AyD>?^%-y? zysS>Lb#Zt{G_$O$Grw%$+&|Or7IC1k2y89SKFmieb=%)(LVu(Pu*2P%Kr((G*ZlAc zs|Dw$`=>Q-PJmVAFVER`^P<9hmYs3uMjirUc%iWGH$V?D=<~)S_ZGpAxaq-H3r=gC zYf>u5c2P-LaXY1|__<{S49)aiMN_XnQV|~&1((0KXy!LAHHDiE*+KFlTa@$K(&Xtd zVR2qJG9V8*V3*I1_xxQYQdLo&k7kET^uQhRewUF6#iI!>O)YyU?s+dKIk&POivld^ zjbUM7(nt-mpA|=-x2w@;q{MD}#Hq8@ud!gVl)Gp0f122^$$sVeuABZ@cKw-a3L z=}(>eBQbSRR%+@HXk?e)BM}qIFLTx)(2*-^o;lDI1p*M!rm|W;c1ucX)H$qz>i=Ci z{`dypx&9Ob$dC}Y5^7t3w%!Hu2b>hZlK-V`#NTmYn5V`BQi#OwtAFmg_(%BIHzc>X zY9^l&bp=iZyr=sbNI(Pxp&e{Pp?Z{80$u_ZkEaZN_FX|H;FUG6Zy>D#XcOq0{)-#< zxUwz7@DA5az+sx!HA>~W`^vW0r|_`~o~M+FG!VS<_l}DD zuW2JINK*^HUvZ=S_uOm#pLFxUcw9%JcUEbth1MZpn>>I%1v|H=oiJs$*$fPY=*zwG(n$q|KH0Q#f@Ad0{nDWc~GzvS?S z{P^lx@hGT37y$1;wt9Xe0t}fwbx&#T3I~4fkLj&!C8Sys(fg$gHj>-bNirvlaIZ^s zl^5-G4&YV(qFn)y<9CNg@K>U5be@EoA`alMrtW3pRpoj_1NDXotX;m95FVJ&%J8CN z;L4(J9Q(+F(JzxanziplRt=}TJ*1Vm?7&M!9%fZDFP1GJX}MqW0A(L2`^*37uV}my zd?b^`;@;e4ps%U_wM4e%pht>@-&f&i{zRFS&;7b7I1Rf*OEOv^v?ZiQ+MR}_g3`%=b>p^a=fL9 zCSdF?ok(}o<8#|BPo3(!o2Sn-G}Z!qtvDtFq0Suio+>qCPeKP5_4f3i|kq+C;*x%%gnLNLohh1 zt~0toeqMz7QWfCxKLHv`Ye4y;e%d`emYv}h@{~1CrU((TMOke|2J9$>V)`C?o+bh~ zKoa@qZ+CL!6tdx=)FB{D&6bvlU}=Nx?w;&sP1{%`Eba(MM~Opg=`9b=0102YT5S2= z`Wjv1@KWf|bp}7a%!ep)MB7H?p_)~CHLi|2A~q-C7y;w9 z@{`+u6p8+we?aXyGOW*F&#yseDBuIzK%?aBqje9<-?=3TLs`x|TjjKOrin?tvh9@uIXu zU`A3b(1=c^f?t`+8EDQ;TR`YE12>ouoy0au{(9=pv-RG7EiBkRLQsuJtVD#eqrJi^KP^Bx*MRz z0*Pjg;c!+xX+SUfu0q#$w}0PHhR04KCs$NFVI?i#cIi#l)aD$gO;=BYva(&_@Pd-% zc)u8R%3urR(n(9xj|7%Xh@9pvx}mB~drsboIn5F@Nf6r$^RRe@W3g5Pb@55hLP-ehc(_~=%=ARg`9 zyecnDx&u=zC|(qs)hyn1o0yXmdVrqTK_Y48j;2iVxE-0p_9Aw-grVPcATp$$m;KBZ z7YdTg*9KDnB7>_ha-mEOcWP1F-lTW!H1c)aTOi|d22u1L{%{Ixgf6YtkOvKAaX({m zr+j9zmHY{1RS1nJm;#iBp9PPv1nFq#^V0IC9;R3HP#N9^u3dpUlt!KL9UD{=aU`W2 zOLv#ZsHvZs1tmr*a-tE~=zkF~{{Qi83glGHjI|k5o>#zvB zchKX@Ekmudy{?nWXagt*4^Uu%)K?dPyMq*f9uo?l;*xU1z&5v8d@pd;fKi%`tGv!H z=5y>M`iDWeRFCFY9npq&bmcq6&_wOrO@BQzeA?%kY<|zr2U(z*)H(ENdVK4qz|pue zogCBk$oPZ3y+x~C=FZFg{vPZiwX-uMe{*-zI=8i{9qIb>WhtIc1(gbSy)AaH(zIGA z^G;xTnsmeRKy5@cyQ8N%bh~capnJ?nt-n%vWC~Ybk+UEzH7e~;IjOda-wzd*W9#Up z`;*IV(Q-DcD)i1vojN;+iMmbwpv&|Q)Q*=<``Mpf#|IFrmJrP5(2(d5)rcqr<>C$uiA#XzB?5mIIc6 z6TBtTSE2SgRUNRE8rS)V#fa<s2vxE-e-6)IJt$Sr3hlJ*2a% zdwQbAYzB*YZ?(NaEbs=VpcyL#M&X2apAGN}K7wC)xA zY9SF54Rc#3d0;E#aptwU_)(iRd(5Y~c`t8W+hq=`tAfcN_tfIt=^BRDM*Q@rM`Qn% zKkCy}w6ev<)yzSdK9NI0f_AmCVzGkDH-c8Z+451-w;R4&K=vNYmx}{?i*@Ibg4qKA zKHG4DbHuBy0ilCtB7WN&)gmAW0d!zA4lZ&eodoMq5;9ah+q>LvUe9yKzJx|0c+d9) z8-u*(>rV^eeuX%E0fDW4H&vVBLSa?WUrauE0~j_z{<5=17&H4MaI{Q|ZpPA`a+40v zYx(9>2SD;n613x_)GxMNVL;I$pwX^{NVRoI0Oo}fAikG|zsocY>E@ZbCDj)Cr47oC zbg$Lnb@R>-DThWaqU4%GFpCeE!#s|z>8&gM!ryJIE_ehEeKkr=v60*8SeKk^lz+2# z*b}147Le3Lc;p+v%!5bfJhn-@khHW$pm04ZDYl=!BPAu}71$z>RS|?)Ym4<*3jZMs zjA)N<$Egcdze6iab$u79Vg+xKNl6(;d_~19zA_Hd@L2GlFezC&{POFnfikd^=?5=s z(y1#SbE-0xX6$sGwAH$MN1e9p9zPbj{0ywmQm5n4W)d(k2A{*#vB}MY0k0kzW~4N= z#v^hb_oR}X>EhPYzGC{ojg3EF86&`(dbf1M zy)A)okF(y{slr(uc()@RJw0nT!nf-Zyi%m-@Gvu7yt0a2%S3gkDEW5!@i8V$nBlU^ z;f(ObQaf-3V{(VOd%*3eSMa?~!=>p^eME}GX0nue(@ytU$PN?J`i0GafL}|u=`gMQ z=|(g_{FBh90QjVUQPX{;U5{lV$G;Ru8IbGd;%#$u1)LdOn0NDP)Y;ky-O}9v4put6 z9*dFi&>eijJq`u<$HuN>Dd(2tWXvo$@Rh?X!6%XganJTQN;mMGK~QBcdxS>WBtHBy zmFWW>7iL4>?B#zVkuxt1B#$n)$+BzR1sNa^r6K-%0dRCcZ;cutc|g;U8FO$$lU2VO zQ|aRI(%HF5pnq=9sFi%$;jbS*hL=4S8c$6C!CCw#fRfPVTSm|Va^2ZEri$6eOy!nq zBNj(_f`^eo(GaE%Ai~Gy*6nI}@}vI_#6tOiYIyZL$3OMoVka!zOQXtG)S zf-IVH^A=EI>1v&AEFZlQ=PsUPw*rizKavx)bW2gNe#UB&tt$u!zEQLRz@6LxRjMF% z#8X{IRWWAheGzdF29PEliA{uPc{Vb2Xdkr_JP3%*H$Y@ht4n%jd!>vKI>qD$?~jj- zyi*Y->e)NHEDQCkMR$ruucuwZpV-s=u%P5JZS&WUY9=OG5hQYKD|MS=K*B*7Cqb>` z!iGO1wdOTQcd^J+;loDm%}3bb{2sTsu-|+G>m6q|sTEyR{vMMzlfoujs!*=R#GZL^ zav6*~$F4`s4}1BXoFULNfRSDB_n}ip-x0k(D+V!!w=~No067eZ2;m;%!}6QE&R+Ar zKlW4PanpQwVP9z(4s@lUqV<%$OO;~lH@x@>;w3@Xr9MX*MJwKl}h)HQZS1u8Mtgp_DM$Y z-mF@qn&_2`KKwT3AibDj{mt1c*!2vvHhob08%!b%$*HZFe%ouNVSU(2s=CL7y1WLVi*Ch zC7F}Ad=}mNvA$zKn+@O2())+q<(dzgs-&7KvpBp1PRaEC?1Vm?B+{ra&&Q=4J$Mi$ zr;gBD&4~mzyKlF7q!_uJVnmHCwQI)@IU6I+F1#1^eaJ$`^}-PYp&(tKEjGS% zfA=Xx_2#OD!`zr5*?HGVDW{ZVx&6+wCuNJ1{1d_#mpiDiM9bBX{{3YUkq%YsFlCqF z?P1euWmxl@vP;o)a|l5#@8rl6v2=NZO!fvU={o5ghn<>xdC z^f$k)x9o*2oji#ugWAs!17bG?{Y7sU#O9bJo>ZV@?-%vEzpeeNdVYJwp&v!mY*jqd ze$p|1H9@i~D=W<#R@KxiZyKUMYjqhUTW&OUzwvAuJZDs%ogCPd zw1z#?oVfb>9>~XN=gZ7Da2=IS28?!GiY8wp@m37zd(v8LY-#7r`h|4MXq8NDUW5R( zTcxLWMYYBBv5mJC>b)=*|KU={YL?y28_J*$AEM3mHp$fdIGYBk7S4B!khsNq^R2bZ z?(v(Ad8y7#5r)XwXt(5-ZhKu8$=n&w1+TN#@LUq-_jJNxM$9{7nEA-$xvvo#{3^rQ=0?)x{} z%e#Pp&GvIsY4(D5%Ic@l%t(}H_4<^#%~&^`JNFrU#>lX04Gy2yn&JLGGoq7vH``ti zP%%q0-4Q8tR&yNoaLH!s^H^?Zisy!XJZ(V^DG2n1(H8g$iT}Uf7}6_mAVX{s{QkE# z=)>tipgP}jC#SGs6kS~mHcgwq zmL~mNH^zil*6%V5yW9j>?T)^9VI=Dm0xfko_E$Rn%=h4dJh7FDp`&n4ZO}>Ba2jO$ zggE*_=XK4^qT9Ev6o;9L`mRu(w>$}rUdaf;)aHY2JxR9{qQ*URCG^x?tdE7l9Ixi zugP}kGjjc&L__}V*F`UYCA#&2J^%7u2^|mZQTzXDP^hba^!T)%pr%nwfD*@1rNi}pjZ3Y6pwM_PG|l7|jQnzKeqYXk0@isZ z{`(miO251z6j{a8-Q>TUk{u14?LJvWaG`mAJOAZ?9z)V??aq-G`&$lGU%^UK27*GC zPL?%D$sR+I&mB8ci_2DPA`&?9eBH!nGcD8!m0f)%tzVB)>siNmk9O%?DaWkL9J}2D zi#4xwFYPX{f-Sfjvck~s`wGYt<@mEHrQqD0{rcjD?> z{;P00V&CQy8v%p+j6-C&7fnm0tF;9=OsTsSX=qPn&8M>mzAh|;URLUz{29;rMClj( zIo>!G^D2>_1sSEDP#HSdaOci(izO4o{0LhkS~sPLkn3IyqYd7o^;@M?zUtnYy@4G! zhGVY6h=`hg(@jF2bc7s{ss0uOd^?5dJrWZid;8e|JG*O1K@Q66rR>WS-y|^!VPdUg z0k+`RGWuYGTLyR9KtdQm`bvHyKDMmM{ENxLsTuiQ_u^oOLyHogiI?`+!#K`3jx()y z`r0M_yu`aP(aV9Y9QHXsf0!rrhZ(hviZtQ7GRH!T^dXsKs(Gat zIXB;)%fOPoJmiXcSmbSL^rWGh+TrB4TtzcNX71{$=>TOwYoS1@(5Ruw&!h)!qhZ7k zerBw=DY2N|ap+3wjT<^=$wuJgY_<21OUdGE9Z)RT7ijaBq{$xla-WHtM1p^Lj~xD3 z6Kyn$5v*ioMGV5vrpkufH6aJ545viCcu!SlTq#MRw<(~ zpgxDsvq&{aX4AWo5q=zkKF>Cq8SEHJ`T3)-Z#y+wJ%mT0X19%IxpJk64k_ncL5X11 zoX(BqjkBk^NIbb@I3@uuzUK1iQDOwM^f7+k3NA>MjjX)@xsIqAMo0!R%9Gaj6ZyO{ zPkE%6GGLUqrwP&JOHA0Qz9Do7x!V;~2MH$@Gnc>fA4vf`1o7)vW+y$C@vXww1c!5OtVQ zFQ|?V-WKb@`|?>@XW)?U0Bbi>JGCtOnY+^5|2R!#pXH9D|_el*=v zv=FyP1G(950|4ieGYu|r+<)GqINHLq;L-B}UHRk!_D|}G4Wj<2B07wA$-r3s>{#rHLwiye#@o53X@^5pLY&da z&CwmI4n1)SX)S8Tcv8E|G_A|FeobTcszJ14WtK}z?ea;_=5{&d5PTPSH*HIK)Ze}G zr@{kh5Lp78QgxK^3caX^f6DGF2QDG|Zd_Ca5v#*-V;FYV2;p>Be|*>Kt@)L+aDk1< zf9OElKH$%?&4CIC6&?>`KDM@IN1V?qMa{;~mNJE~vaOT7rl>%O6KSA`uO!h?1~iXk zx^RX%b-(n+jW=GmkEVN@faM2dudHu*nX^SMFXJXJzfdSTKduEbfj+*66ZOorHIoed zbj47W5lZM_Yiomukii^cnH0$1d0#Qq;(P%*w0r|FJ9RgP<7@ii#<4!-Qc1mN^f;l>O2)4S$ zd1JOSP~PTqM?Bx-G#NS5)#K;Ie>cNumy1N^4X4_Gy4u+Q_$Y?1fq@kTTPGCMhqWdf z!xHJt=5TbwE_J+DJqDEt1@7*NQN3t^{YVGHK2BQ2Y{EqlCHd0$u^n%H{#gr!bXWs? zmM%`uT0x;Y(LZy1HmqOo81Y=^%M4|1ju{*!lWj{@QRWVSUR?qrvBn6iAM(v}buWHL zO2)@_Sa-|Q*T$=doEL*|S*@`5{(UxP0#8(2_Og=?@&+#MyDzjj9~xSMji%LSEdv({ z39Q7lvWT1vS!p-PmcdggbV*>s`|}|wm@%%TcpHb_cH6ZEvQUvH)v4(FQDqS%d&m#Q za4OhX<WXv!epIVk>xqMkj=es62)$LPDg)QMO|sv|4>?7t zgo8)Pog1D4#yjrOd!NvIi|8rlz$XUN2?|D=fQLfSn~JW~)w?FXOH$qL%UyS`?Z+$c zlL6wZpNoRZF##1<7E)0AcWle_&bnv~aSG~D{|8UQWTC-z+1Wy6Hn1e{Z~*H9GMu-r zFUnXo;1QNRi~h6G=KfPIY7cL#3c1@Hd*U|;b>5f*Qsp2WT6GN0SQWD)+8hNkIez&y zDlOd-q&Hkn8vj%n*l-akwzK;?7xjhAq}2%7LNUWa|&G?Eb&bAk_FM44p@O z{ILLm|R$j0JV3FP{BSp|8+dkS89?4gunF~<8@S*+)jA@TIq5w F_21ZxXrTZA diff --git a/libs/SdFatBeta20120108/html/classifstream__inherit__graph.png b/libs/SdFatBeta20120108/html/classifstream__inherit__graph.png deleted file mode 100755 index aa5574fec3c50c00b1474bbb28d3b8f6ea4c1136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6674 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 - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ios Member List
    -
    -
    -This is the complete list of members for ios, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    outios_base [static]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classios.html b/libs/SdFatBeta20120108/html/classios.html deleted file mode 100755 index 4deb8ad..0000000 --- a/libs/SdFatBeta20120108/html/classios.html +++ /dev/null @@ -1,1056 +0,0 @@ - - - - -SdFat: ios Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Error and state information for all streams. - More...

    - -

    #include <ios.h>

    -
    -Inheritance diagram for ios:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for ios:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    bool good () const
     ios ()
     operator const void * () const
    bool operator! () const
    int precision (unsigned int n)
    int precision () const
    iostate rdstate () const
    fmtflags setf (fmtflags fl, fmtflags mask)
    fmtflags setf (fmtflags fl)
    void setstate (iostate state)
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    Error and state information for all streams.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    ios::ios () [inline]
    -
    -
    -

    Create ios with no error flags set

    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • Arduino/libraries/SdFat/ios.h
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/classios__base-members.html b/libs/SdFatBeta20120108/html/classios__base-members.html deleted file mode 100755 index 7d9fdda..0000000 --- a/libs/SdFatBeta20120108/html/classios__base-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ios_base Member List
    -
    -
    -This is the complete list of members for ios_base, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eofbitios_base [static]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    internalios_base [static]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    outios_base [static]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    rightios_base [static]
    seekdir enum nameios_base
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classios__base.html b/libs/SdFatBeta20120108/html/classios__base.html deleted file mode 100755 index a044cb3..0000000 --- a/libs/SdFatBeta20120108/html/classios__base.html +++ /dev/null @@ -1,850 +0,0 @@ - - - - -SdFat: ios_base Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Base class for all streams. - More...

    - -

    #include <ios.h>

    -
    -Inheritance diagram for ios_base:
    -
    -
    Inheritance graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    int precision () const
    int precision (unsigned int n)
    fmtflags setf (fmtflags fl, fmtflags mask)
    fmtflags setf (fmtflags fl)
    void unsetf (fmtflags fl)
    unsigned width ()
    unsigned width (unsigned n)

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    Base class for all streams.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline]
    -
    -
    -
    Returns:
    width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file:
      -
    • Arduino/libraries/SdFat/ios.h
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/classios__base__inherit__graph.png b/libs/SdFatBeta20120108/html/classios__base__inherit__graph.png deleted file mode 100755 index 5bbe63428b20ad04f009373c9394c2cacd21949e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19521 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 diff --git a/libs/SdFatBeta20120108/html/classios__inherit__graph.png b/libs/SdFatBeta20120108/html/classios__inherit__graph.png deleted file mode 100755 index 66067c03796f17d312b9f820f7185c427b94dc4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19337 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 F{sk5b$0Ps% diff --git a/libs/SdFatBeta20120108/html/classiostream-members.html b/libs/SdFatBeta20120108/html/classiostream-members.html deleted file mode 100755 index c5ced47..0000000 --- a/libs/SdFatBeta20120108/html/classiostream-members.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    iostream Member List
    -
    -
    -This is the complete list of members for iostream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    flush()ostream [inline]
    fmtflags typedefios_base
    gcount() const istream [inline]
    get()istream
    get(char &ch)istream
    get(char *str, streamsize n, char delim= '\n')istream
    getline(char *str, streamsize count, char delim= '\n')istream
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    ignore(streamsize n=1, int delim=-1)istream
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    istream() (defined in istream)istream [inline]
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator<<(ostream &(*pf)(ostream &str))ostream [inline]
    operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
    operator<<(bool arg)ostream [inline]
    operator<<(const char *arg)ostream [inline]
    operator<<(const signed char *arg)ostream [inline]
    operator<<(const unsigned char *arg)ostream [inline]
    operator<<(char arg)ostream [inline]
    operator<<(signed char arg)ostream [inline]
    operator<<(unsigned char arg)ostream [inline]
    operator<<(double arg)ostream [inline]
    operator<<(int16_t arg)ostream [inline]
    operator<<(uint16_t arg)ostream [inline]
    operator<<(int32_t arg)ostream [inline]
    operator<<(uint32_t arg)ostream [inline]
    operator<<(const void *arg)ostream [inline]
    operator<<(pgm arg)ostream [inline]
    operator>>(istream &(*pf)(istream &str))istream [inline]
    operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
    operator>>(ios &(*pf)(ios &str))istream [inline]
    operator>>(char *str)istream [inline]
    operator>>(char &ch)istream [inline]
    operator>>(signed char *str)istream [inline]
    operator>>(signed char &ch)istream [inline]
    operator>>(unsigned char *str)istream [inline]
    operator>>(unsigned char &ch)istream [inline]
    operator>>(bool &arg)istream [inline]
    operator>>(short &arg)istream [inline]
    operator>>(unsigned short &arg)istream [inline]
    operator>>(int16_t &arg)istream [inline]
    operator>>(uint16_t &arg)istream [inline]
    operator>>(int32_t &arg)istream [inline]
    operator>>(uint32_t &arg)istream [inline]
    operator>>(double &arg)istream [inline]
    operator>>(float &arg)istream [inline]
    operator>>(void *&arg)istream [inline]
    ostream() (defined in ostream)ostream [inline]
    outios_base [static]
    peek()istream
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    put(char ch)ostream [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    seekg(pos_type pos)istream [inline]
    seekg(off_type off, seekdir way)istream [inline]
    seekp(pos_type pos)ostream [inline]
    seekp(off_type off, seekdir way)ostream [inline]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipWhite()istream
    skipwsios_base [static]
    streamsize typedefios_base
    tellg()istream [inline]
    tellp()ostream [inline]
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classiostream.html b/libs/SdFatBeta20120108/html/classiostream.html deleted file mode 100755 index 27be72b..0000000 --- a/libs/SdFatBeta20120108/html/classiostream.html +++ /dev/null @@ -1,2385 +0,0 @@ - - - - -SdFat: iostream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Input/Output stream. - More...

    - -

    #include <iostream.h>

    -
    -Inheritance diagram for iostream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for iostream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    ostreamflush ()
    streamsize gcount () const
    int get ()
    istreamget (char &ch)
    istreamget (char *str, streamsize n, char delim= '\n')
    istreamgetline (char *str, streamsize count, char delim= '\n')
    bool good () const
    istreamignore (streamsize n=1, int delim=-1)
     operator const void * () const
    bool operator! () const
    ostreamoperator<< (const signed char *arg)
    ostreamoperator<< (uint32_t arg)
    ostreamoperator<< (const void *arg)
    ostreamoperator<< (pgm arg)
    ostreamoperator<< (int32_t arg)
    ostreamoperator<< (unsigned char arg)
    ostreamoperator<< (ostream &(*pf)(ostream &str))
    ostreamoperator<< (ios_base &(*pf)(ios_base &str))
    ostreamoperator<< (bool arg)
    ostreamoperator<< (const char *arg)
    ostreamoperator<< (const unsigned char *arg)
    ostreamoperator<< (char arg)
    ostreamoperator<< (signed char arg)
    ostreamoperator<< (double arg)
    ostreamoperator<< (int16_t arg)
    ostreamoperator<< (uint16_t arg)
    istreamoperator>> (signed char *str)
    istreamoperator>> (unsigned char &ch)
    istreamoperator>> (float &arg)
    istreamoperator>> (int16_t &arg)
    istreamoperator>> (double &arg)
    istreamoperator>> (char *str)
    istreamoperator>> (uint32_t &arg)
    istreamoperator>> (unsigned char *str)
    istreamoperator>> (void *&arg)
    istreamoperator>> (signed char &ch)
    istreamoperator>> (bool &arg)
    istreamoperator>> (ios_base &(*pf)(ios_base &str))
    istreamoperator>> (char &ch)
    istreamoperator>> (int32_t &arg)
    istreamoperator>> (short &arg)
    istreamoperator>> (istream &(*pf)(istream &str))
    istreamoperator>> (unsigned short &arg)
    istreamoperator>> (ios &(*pf)(ios &str))
    istreamoperator>> (uint16_t &arg)
    int peek ()
    int precision (unsigned int n)
    int precision () const
    ostreamput (char ch)
    iostate rdstate () const
    istreamseekg (off_type off, seekdir way)
    istreamseekg (pos_type pos)
    ostreamseekp (pos_type pos)
    ostreamseekp (off_type off, seekdir way)
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    void skipWhite ()
    pos_type tellg ()
    pos_type tellp ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    Input/Output stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    ostream& ostream::flush () [inline, inherited]
    -
    -
    -

    Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    streamsize istream::gcount () const [inline, inherited]
    -
    -
    -
    Returns:
    The number of characters extracted by the last unformatted input function.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::get () [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Returns:
    The character or -1 if a failure occurs. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream & istream::get (char & c) [inherited]
    -
    -
    -

    Extract a character if one is available.

    -
    Parameters:
    - - -
    [out]clocation to receive the extracted character.
    -
    -
    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::get (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters.

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::getline (char * str,
    streamsize n,
    char delim = '\n' 
    ) [inherited]
    -
    -
    -

    Extract characters

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

    -

    The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream & istream::ignore (streamsize n = 1,
    int delim = -1 
    ) [inherited]
    -
    -
    -

    Extract characters and discard them.

    -
    Parameters:
    - - - -
    [in]nmaximum number of characters to ignore.
    [in]delimDelimiter.
    -
    -
    -

    Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

    -

    Failures are indicated by the state of the stream.

    -
    Returns:
    *this
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int32_t arg) [inline, inherited]
    -
    -
    -

    Output signed long

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint32_t arg) [inline, inherited]
    -
    -
    -

    Output uint32_t

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const void * arg) [inline, inherited]
    -
    -
    -

    Output pointer

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint16_t arg) [inline, inherited]
    -
    -
    -

    Output unsigned int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (pgm arg) [inline, inherited]
    -
    -
    -

    Output a string from flash

    -
    Parameters:
    - - -
    [in]argpgm struct pointing to string
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (signed char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (bool arg) [inline, inherited]
    -
    -
    -

    Output bool

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const signed char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const unsigned char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (unsigned char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (double arg) [inline, inherited]
    -
    -
    -

    Output double

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int16_t arg) [inline, inherited]
    -
    -
    -

    Output signed int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (double & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type double.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (float & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type float.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (void *& arg) [inline, inherited]
    -
    -
    -

    Extract a value of type void*.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (bool & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type bool.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char & ch) [inline, inherited]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int32_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (istream &(*)(istream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char * str) [inline, inherited]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned short & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type unsigned short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios &(*)(ios &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type int16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint16_t & arg) [inline, inherited]
    -
    -
    -

    Extract a value of type uint16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::peek () [inherited]
    -
    -
    -

    Return the next available character without consuming it.

    -
    Returns:
    The character if the stream state is good else -1;
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::put (char ch) [inline, inherited]
    -
    -
    -

    Puts a character in a stream.

    -

    The unformatted output function inserts the element ch. It returns *this.

    -
    Parameters:
    - - -
    [in]chThe character
    -
    -
    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& istream::seekg (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::seekg (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the read pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& ostream::seekp (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::seekp (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the write pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    void istream::skipWhite () [inherited]
    -
    -
    -

    used to implement ws()

    - -
    -
    - -
    -
    - - - - - - - -
    pos_type istream::tellg () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - -
    pos_type ostream::tellp () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classiostream__coll__graph.png b/libs/SdFatBeta20120108/html/classiostream__coll__graph.png deleted file mode 100755 index d961f68bcf1c6a04168ffacbb05ea076c96d4197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5855 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 Npr>UFt<$uB{BIGcOJV>3 diff --git a/libs/SdFatBeta20120108/html/classiostream__inherit__graph.png b/libs/SdFatBeta20120108/html/classiostream__inherit__graph.png deleted file mode 100755 index 33c93da248c79fbcbe7eb55a66be238f64c906e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6612 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 - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    istream Member List
    -
    -
    -This is the complete list of members for istream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    fmtflags typedefios_base
    gcount() const istream [inline]
    get()istream
    get(char &ch)istream
    get(char *str, streamsize n, char delim= '\n')istream
    getline(char *str, streamsize count, char delim= '\n')istream
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    ignore(streamsize n=1, int delim=-1)istream
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    istream() (defined in istream)istream [inline]
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator>>(istream &(*pf)(istream &str))istream [inline]
    operator>>(ios_base &(*pf)(ios_base &str))istream [inline]
    operator>>(ios &(*pf)(ios &str))istream [inline]
    operator>>(char *str)istream [inline]
    operator>>(char &ch)istream [inline]
    operator>>(signed char *str)istream [inline]
    operator>>(signed char &ch)istream [inline]
    operator>>(unsigned char *str)istream [inline]
    operator>>(unsigned char &ch)istream [inline]
    operator>>(bool &arg)istream [inline]
    operator>>(short &arg)istream [inline]
    operator>>(unsigned short &arg)istream [inline]
    operator>>(int16_t &arg)istream [inline]
    operator>>(uint16_t &arg)istream [inline]
    operator>>(int32_t &arg)istream [inline]
    operator>>(uint32_t &arg)istream [inline]
    operator>>(double &arg)istream [inline]
    operator>>(float &arg)istream [inline]
    operator>>(void *&arg)istream [inline]
    outios_base [static]
    peek()istream
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    seekg(pos_type pos)istream [inline]
    seekg(off_type off, seekdir way)istream [inline]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipWhite()istream
    skipwsios_base [static]
    streamsize typedefios_base
    tellg()istream [inline]
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classistream.html b/libs/SdFatBeta20120108/html/classistream.html deleted file mode 100755 index 0197b2c..0000000 --- a/libs/SdFatBeta20120108/html/classistream.html +++ /dev/null @@ -1,1843 +0,0 @@ - - - - -SdFat: istream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Input Stream. - More...

    - -

    #include <istream.h>

    -
    -Inheritance diagram for istream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for istream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    streamsize gcount () const
    int get ()
    istreamget (char &ch)
    istreamget (char *str, streamsize n, char delim= '\n')
    istreamgetline (char *str, streamsize count, char delim= '\n')
    bool good () const
    istreamignore (streamsize n=1, int delim=-1)
     operator const void * () const
    bool operator! () const
    istreamoperator>> (ios &(*pf)(ios &str))
    istreamoperator>> (int32_t &arg)
    istreamoperator>> (signed char &ch)
    istreamoperator>> (uint32_t &arg)
    istreamoperator>> (double &arg)
    istreamoperator>> (unsigned char *str)
    istreamoperator>> (float &arg)
    istreamoperator>> (char *str)
    istreamoperator>> (void *&arg)
    istreamoperator>> (unsigned char &ch)
    istreamoperator>> (bool &arg)
    istreamoperator>> (istream &(*pf)(istream &str))
    istreamoperator>> (ios_base &(*pf)(ios_base &str))
    istreamoperator>> (short &arg)
    istreamoperator>> (char &ch)
    istreamoperator>> (unsigned short &arg)
    istreamoperator>> (signed char *str)
    istreamoperator>> (int16_t &arg)
    istreamoperator>> (uint16_t &arg)
    int peek ()
    int precision () const
    int precision (unsigned int n)
    iostate rdstate () const
    istreamseekg (off_type off, seekdir way)
    istreamseekg (pos_type pos)
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    void skipWhite ()
    pos_type tellg ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    Input Stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    streamsize istream::gcount () const [inline]
    -
    -
    -
    Returns:
    The number of characters extracted by the last unformatted input function.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::get ()
    -
    -
    -

    Extract a character if one is available.

    -
    Returns:
    The character or -1 if a failure occurs. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream & istream::get (char & c)
    -
    -
    -

    Extract a character if one is available.

    -
    Parameters:
    - - -
    [out]clocation to receive the extracted character.
    -
    -
    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::get (char * str,
    streamsize n,
    char delim = '\n' 
    )
    -
    -
    -

    Extract characters.

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, n is less than 1, n-1 characters are extracted, or the next character equals delim (delim is not extracted). If no characters are extracted failbit is set. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    istream & istream::getline (char * str,
    streamsize n,
    char delim = '\n' 
    )
    -
    -
    -

    Extract characters

    -
    Parameters:
    - - - - -
    [out]strLocation to receive extracted characters.
    [in]nSize of str.
    [in]delimDelimiter
    -
    -
    -

    Characters are extracted until extraction fails, the next character equals delim (delim is extracted), or n-1 characters are extracted.

    -

    The failbit is set if no characters are extracted or n-1 characters are extracted. If end-of-file occurs the eofbit is set.

    -
    Returns:
    always returns *this. A failure is indicated by the stream state.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream & istream::ignore (streamsize n = 1,
    int delim = -1 
    )
    -
    -
    -

    Extract characters and discard them.

    -
    Parameters:
    - - - -
    [in]nmaximum number of characters to ignore.
    [in]delimDelimiter.
    -
    -
    -

    Characters are extracted until extraction fails, n characters are extracted, or the next input character equals delim (the delimiter is extracted). If end-of-file occurs the eofbit is set.

    -

    Failures are indicated by the state of the stream.

    -
    Returns:
    *this
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char * str) [inline]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (void *& arg) [inline]
    -
    -
    -

    Extract a value of type void*.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char * str) [inline]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int32_t & arg) [inline]
    -
    -
    -

    Extract a value of type int32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint32_t & arg) [inline]
    -
    -
    -

    Extract a value of type uint32_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (double & arg) [inline]
    -
    -
    -

    Extract a value of type double.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (float & arg) [inline]
    -
    -
    -

    Extract a value of type float.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned char & ch) [inline]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char * str) [inline]
    -
    -
    -

    Extract a character string

    -
    Parameters:
    - - -
    [out]strlocation to store the string.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (bool & arg) [inline]
    -
    -
    -

    Extract a value of type bool.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios_base &(*)(ios_base &str) pf) [inline]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (char & ch) [inline]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (short & arg) [inline]
    -
    -
    -

    Extract a value of type short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (istream &(*)(istream &str) pf) [inline]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (unsigned short & arg) [inline]
    -
    -
    -

    Extract a value of type unsigned short.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (ios &(*)(ios &str) pf) [inline]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (int16_t & arg) [inline]
    -
    -
    -

    Extract a value of type int16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (uint16_t & arg) [inline]
    -
    -
    -

    Extract a value of type uint16_t.

    -
    Parameters:
    - - -
    [out]arglocation to store the value.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::operator>> (signed char & ch) [inline]
    -
    -
    -

    Extract a character

    -
    Parameters:
    - - -
    [out]chlocation to store the character.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - -
    int istream::peek ()
    -
    -
    -

    Return the next available character without consuming it.

    -
    Returns:
    The character if the stream state is good else -1;
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& istream::seekg (pos_type pos) [inline]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the read pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& istream::seekg (off_type off,
    seekdir way 
    ) [inline]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the read pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    void istream::skipWhite ()
    -
    -
    -

    used to implement ws()

    - -
    -
    - -
    -
    - - - - - - - -
    pos_type istream::tellg () [inline]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Arduino/libraries/SdFat/istream.h
    • -
    • Arduino/libraries/SdFat/istream.cpp
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/classistream__coll__graph.png b/libs/SdFatBeta20120108/html/classistream__coll__graph.png deleted file mode 100755 index 537960123d6e5ad429f64ae1345914af33c0b87b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1729 zcmb`IdpOg39LImmHCB<7%X!ic$t`RyAtFQW#wI2U$)%WzFtj>L$2Bn=hM}~%O_;M3 z%4JE-7Aobkq1fXRxkpOQ>O7sE=lpxl^L@VG&-Z!%@%=o{`}_L7zbS4mcHnJ_+W-In z+aHI!3#x};HcN;JRt3uKc|j2iaI}L1Ti-_M!}4r_5N!{)LdF)&kzGTSQOaGdt%E%3 zD>(-WkN3edm5{m{J`^BYE&27m6`bPCs03r;+|Fi0FvBVsbKIFv<($VfnwqOtUEO#%nPdaHXi)|@t%`iqMp&w zgd6N)``@|LfZl}pSq0T3Qv5e$yBWrI~SfZhm8h61jr$bzb<~O%d zyX4yNz$0e%FdC;^-&0#AVQ5_r+X`(otL1&@$f`R1tYck&IRGZHGBLEa5Xh(xJdF-2 zUtV*pqJseBwZYBLy4Xrns)19tT%WfLjdrD^1;1IFSDm2&Zh#KY?f3xdFh=&FUD04` za*aWSG@BJ>@HJjEGo%rlI>zvA9wF1Tzp2v9F}czhZn1|=b$>xDqbi@Sr_nHaYCv)d zVX0WJjRKF}Rjp9Y&r$gO?R!Yvo69aT1^}-9P5k^<&3CMhJ5DH*8cj*#8#c^39F3d2 z8 zFUOiJPIPtbIIF+nD)VXlHSx9v#7AgT9jz%{e-a;NSpL#Ge>!^d+@fAhI~H^5hou*O zy8C}@4aa`X#N_NCgq!Lw0?VDB&!itNu)?IqQ8#6PqriF~H??Eol(z1c5gy+7NwLiu zzz2A4llx3)n;!^VKE1C0jna3}l)r&hBQav7bij_#b4L$WQuZLqm{-cd^aR~&mU#p< z5{UTZ)V^ScB=@>koOw|gM5s^)b^}6+&I@R%i(h*X z-MOCkD1{Lj%0i?;f4sfiPl^?yjFne(Bkg{9n$ejcf4?-~6`$gxe0G(0Uti(f)Fvt2L z8hehSJmENfbq|p)BqN1!!ii`hLFnbGI{ty55d|t(T~)DqMEZ`*NgzR9=S|3zG2ix{ z(8BayBaQFD^3Rq1aP>c`6S#}9+uE3-U0F|WC>`BbRFohKJV)+knw|jCjW@n-FgMuK zJ7+dN9qC2|btC&b+mnV6e9Yk1gAL2EG& zS$FA1y`$u!;^IeY21CN*p^Gi;OLdpZrg2LzX0(=W`VOR3AS(O#?HRT)(8@6P%b~bM zzQ22#EP6=tV7T~z*`C^3nzgIH4s57jth+2Tnn;fm)>^r|OuJhc!#il71W3uf<_wzU zBTIH?S=#W96z4IpQJem&Xqkdw5&2c0^J!jabd$8-ftsQ%vv1M%ug4ceTDO+qChepG mD|A-4FrH=#2*SThfwk4jj8jUNvrZEHNr1hL3;gaeKf+(KH8oTK diff --git a/libs/SdFatBeta20120108/html/classistream__inherit__graph.png b/libs/SdFatBeta20120108/html/classistream__inherit__graph.png deleted file mode 100755 index 0bc39cf6f23f1f0393c505952260ab69cd6fe50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6799 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 - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    obufstream Member List
    -
    -
    -This is the complete list of members for obufstream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    buf()obufstream [inline]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    flush()ostream [inline]
    fmtflags typedefios_base
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    init(char *buf, uint16_t size)obufstream [inline]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    leftios_base [static]
    length()obufstream [inline]
    obufstream()obufstream [inline]
    obufstream(char *buf, uint16_t size)obufstream [inline]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator<<(ostream &(*pf)(ostream &str))ostream [inline]
    operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
    operator<<(bool arg)ostream [inline]
    operator<<(const char *arg)ostream [inline]
    operator<<(const signed char *arg)ostream [inline]
    operator<<(const unsigned char *arg)ostream [inline]
    operator<<(char arg)ostream [inline]
    operator<<(signed char arg)ostream [inline]
    operator<<(unsigned char arg)ostream [inline]
    operator<<(double arg)ostream [inline]
    operator<<(int16_t arg)ostream [inline]
    operator<<(uint16_t arg)ostream [inline]
    operator<<(int32_t arg)ostream [inline]
    operator<<(uint32_t arg)ostream [inline]
    operator<<(const void *arg)ostream [inline]
    operator<<(pgm arg)ostream [inline]
    ostream() (defined in ostream)ostream [inline]
    outios_base [static]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    put(char ch)ostream [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    seekp(pos_type pos)ostream [inline]
    seekp(off_type off, seekdir way)ostream [inline]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    tellp()ostream [inline]
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classobufstream.html b/libs/SdFatBeta20120108/html/classobufstream.html deleted file mode 100755 index 0813a97..0000000 --- a/libs/SdFatBeta20120108/html/classobufstream.html +++ /dev/null @@ -1,1707 +0,0 @@ - - - - -SdFat: obufstream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    format a char string - More...

    - -

    #include <bufstream.h>

    -
    -Inheritance diagram for obufstream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for obufstream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    char * buf ()
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    ostreamflush ()
    bool good () const
    void init (char *buf, uint16_t size)
    uint16_t length ()
     obufstream (char *buf, uint16_t size)
     obufstream ()
     operator const void * () const
    bool operator! () const
    ostreamoperator<< (int16_t arg)
    ostreamoperator<< (bool arg)
    ostreamoperator<< (uint16_t arg)
    ostreamoperator<< (int32_t arg)
    ostreamoperator<< (const char *arg)
    ostreamoperator<< (uint32_t arg)
    ostreamoperator<< (const signed char *arg)
    ostreamoperator<< (const void *arg)
    ostreamoperator<< (pgm arg)
    ostreamoperator<< (const unsigned char *arg)
    ostreamoperator<< (char arg)
    ostreamoperator<< (ostream &(*pf)(ostream &str))
    ostreamoperator<< (signed char arg)
    ostreamoperator<< (ios_base &(*pf)(ios_base &str))
    ostreamoperator<< (unsigned char arg)
    ostreamoperator<< (double arg)
    int precision (unsigned int n)
    int precision () const
    ostreamput (char ch)
    iostate rdstate () const
    ostreamseekp (off_type off, seekdir way)
    ostreamseekp (pos_type pos)
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    pos_type tellp ()
    void unsetf (fmtflags fl)
    unsigned width ()
    unsigned width (unsigned n)

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    format a char string

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - -
    obufstream::obufstream () [inline]
    -
    -
    -

    constructor

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    obufstream::obufstream (char * buf,
    uint16_t size 
    ) [inline]
    -
    -
    -

    Constructor

    -
    Parameters:
    - - - -
    [in]bufbuffer for formatted string
    [in]sizebuffer size
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char* obufstream::buf () [inline]
    -
    -
    -
    Returns:
    a pointer to the buffer
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    ostream& ostream::flush () [inline, inherited]
    -
    -
    -

    Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void obufstream::init (char * buf,
    uint16_t size 
    ) [inline]
    -
    -
    -

    Initialize an obufstream

    -
    Parameters:
    - - - -
    [in]bufbuffer for formatted string
    [in]sizebuffer size
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    uint16_t obufstream::length () [inline]
    -
    -
    -
    Returns:
    the length of the formatted string
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const signed char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int32_t arg) [inline, inherited]
    -
    -
    -

    Output signed long

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint32_t arg) [inline, inherited]
    -
    -
    -

    Output uint32_t

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const void * arg) [inline, inherited]
    -
    -
    -

    Output pointer

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const unsigned char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (pgm arg) [inline, inherited]
    -
    -
    -

    Output a string from flash

    -
    Parameters:
    - - -
    [in]argpgm struct pointing to string
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (signed char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (bool arg) [inline, inherited]
    -
    -
    -

    Output bool

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (unsigned char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (double arg) [inline, inherited]
    -
    -
    -

    Output double

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int16_t arg) [inline, inherited]
    -
    -
    -

    Output signed int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint16_t arg) [inline, inherited]
    -
    -
    -

    Output unsigned int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::put (char ch) [inline, inherited]
    -
    -
    -

    Puts a character in a stream.

    -

    The unformatted output function inserts the element ch. It returns *this.

    -
    Parameters:
    - - -
    [in]chThe character
    -
    -
    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::seekp (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the write pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& ostream::seekp (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    pos_type ostream::tellp () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classobufstream__coll__graph.png b/libs/SdFatBeta20120108/html/classobufstream__coll__graph.png deleted file mode 100755 index 6280da162bc338c85a9628dcd60ed192e158fe6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2541 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 diff --git a/libs/SdFatBeta20120108/html/classobufstream__inherit__graph.png b/libs/SdFatBeta20120108/html/classobufstream__inherit__graph.png deleted file mode 100755 index 6280da162bc338c85a9628dcd60ed192e158fe6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2541 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 diff --git a/libs/SdFatBeta20120108/html/classofstream-members.html b/libs/SdFatBeta20120108/html/classofstream-members.html deleted file mode 100755 index 101a114..0000000 --- a/libs/SdFatBeta20120108/html/classofstream-members.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ofstream Member List
    -
    -
    -This is the complete list of members for ofstream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ofstream [inline]
    close()ofstream [inline]
    contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)SdBaseFile [private]
    createContiguous(SdBaseFile *dirFile, const char *path, uint32_t size)SdBaseFile [private]
    cur enum valueios_base
    curCluster() const SdBaseFile [inline, private]
    curPosition() const SdBaseFile [inline, private]
    cwd()SdBaseFile [inline, private, static]
    dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))SdBaseFile [inline, private, static]
    dateTimeCallbackCancel()SdBaseFile [inline, private, static]
    decios_base [static]
    dirEntry(dir_t *dir)SdBaseFile [private]
    dirName(const dir_t &dir, char *name)SdBaseFile [private, static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    exists(const char *name)SdBaseFile [private]
    fail() const ios [inline]
    failbitios_base [static]
    fgets(char *str, int16_t num, char *delim=0)SdBaseFile [private]
    fileSize() const SdBaseFile [inline, private]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    firstCluster() const SdBaseFile [inline, private]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    flush()ostream [inline]
    fmtflags typedefios_base
    getFilename(char *name)SdBaseFile [private]
    getpos(fpos_t *pos)SdBaseFile [private]
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    is_open()ofstream [inline]
    isDir() const SdBaseFile [inline, private]
    isFile() const SdBaseFile [inline, private]
    isOpen() const SdBaseFile [inline, private]
    isRoot() const SdBaseFile [inline, private]
    isSubDir() const SdBaseFile [inline, private]
    leftios_base [static]
    ls(Print *pr, uint8_t flags=0, uint8_t indent=0)SdBaseFile [private]
    ls(uint8_t flags=0)SdBaseFile [private]
    mkdir(SdBaseFile *dir, const char *path, bool pFlag=true)SdBaseFile [private]
    octios_base [static]
    off_type typedefios_base
    ofstream() (defined in ofstream)ofstream [inline]
    ofstream(const char *path, ios::openmode mode=out)ofstream [inline, explicit]
    open(const char *path, openmode mode=out)ofstream [inline]
    SdStreamBase::open(SdBaseFile *dirFile, uint16_t index, uint8_t oflag)SdBaseFile [private]
    SdStreamBase::open(SdBaseFile *dirFile, const char *path, uint8_t oflag)SdBaseFile [private]
    openmode typedefios_base
    openNext(SdBaseFile *dirFile, uint8_t oflag)SdBaseFile [private]
    openRoot(SdVolume *vol)SdBaseFile [private]
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator<<(ostream &(*pf)(ostream &str))ostream [inline]
    operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
    operator<<(bool arg)ostream [inline]
    operator<<(const char *arg)ostream [inline]
    operator<<(const signed char *arg)ostream [inline]
    operator<<(const unsigned char *arg)ostream [inline]
    operator<<(char arg)ostream [inline]
    operator<<(signed char arg)ostream [inline]
    operator<<(unsigned char arg)ostream [inline]
    operator<<(double arg)ostream [inline]
    operator<<(int16_t arg)ostream [inline]
    operator<<(uint16_t arg)ostream [inline]
    operator<<(int32_t arg)ostream [inline]
    operator<<(uint32_t arg)ostream [inline]
    operator<<(const void *arg)ostream [inline]
    operator<<(pgm arg)ostream [inline]
    ostream() (defined in ostream)ostream [inline]
    outios_base [static]
    peek()SdBaseFile [private]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    printFatDate(uint16_t fatDate)SdBaseFile [private, static]
    printFatDate(Print *pr, uint16_t fatDate)SdBaseFile [private, static]
    printFatTime(uint16_t fatTime)SdBaseFile [private, static]
    printFatTime(Print *pr, uint16_t fatTime)SdBaseFile [private, static]
    printName()SdBaseFile [private]
    put(char ch)ostream [inline]
    rdstate() const ios [inline]
    read()SdBaseFile [private]
    read(void *buf, uint16_t nbyte)SdBaseFile [private]
    readDir(dir_t *dir)SdBaseFile [private]
    remove(SdBaseFile *dirFile, const char *path)SdBaseFile [private, static]
    remove()SdBaseFile [private]
    rename(SdBaseFile *dirFile, const char *newPath)SdBaseFile [private]
    rewind()SdBaseFile [inline, private]
    rightios_base [static]
    rmdir()SdBaseFile [private]
    rmRfStar()SdBaseFile [private]
    SdBaseFile()SdBaseFile [inline, private]
    SdBaseFile(const char *path, uint8_t oflag)SdBaseFile [private]
    seekCur(int32_t offset)SdBaseFile [inline, private]
    seekdir enum nameios_base
    seekEnd(int32_t offset=0)SdBaseFile [inline, private]
    seekp(pos_type pos)ostream [inline]
    seekp(off_type off, seekdir way)ostream [inline]
    seekSet(uint32_t pos)SdBaseFile [private]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setpos(fpos_t *pos)SdBaseFile [private]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    sync()SdBaseFile [private]
    tellp()ostream [inline]
    timestamp(SdBaseFile *file)SdBaseFile [private]
    timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)SdBaseFile [private]
    truncios_base [static]
    truncate(uint32_t size)SdBaseFile [private]
    type() const SdBaseFile [inline, private]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    volume() const SdBaseFile [inline, private]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    write(const void *buf, uint16_t nbyte)SdBaseFile [private]
    writeErrorSdBaseFile [private]
    ~ofstream() (defined in ofstream)ofstream [inline]
    ~SdBaseFile() (defined in SdBaseFile)SdBaseFile [inline, private]
    - - - diff --git a/libs/SdFatBeta20120108/html/classofstream.html b/libs/SdFatBeta20120108/html/classofstream.html deleted file mode 100755 index e86c737..0000000 --- a/libs/SdFatBeta20120108/html/classofstream.html +++ /dev/null @@ -1,1757 +0,0 @@ - - - - -SdFat: ofstream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    SD card output stream. - More...

    - -

    #include <SdStream.h>

    -
    -Inheritance diagram for ofstream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for ofstream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    void close ()
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    ostreamflush ()
    bool good () const
    bool is_open ()
     ofstream (const char *path, ios::openmode mode=out)
    void open (const char *path, openmode mode=out)
     operator const void * () const
    bool operator! () const
    ostreamoperator<< (unsigned char arg)
    ostreamoperator<< (ostream &(*pf)(ostream &str))
    ostreamoperator<< (double arg)
    ostreamoperator<< (ios_base &(*pf)(ios_base &str))
    ostreamoperator<< (int16_t arg)
    ostreamoperator<< (uint16_t arg)
    ostreamoperator<< (bool arg)
    ostreamoperator<< (int32_t arg)
    ostreamoperator<< (pgm arg)
    ostreamoperator<< (uint32_t arg)
    ostreamoperator<< (const char *arg)
    ostreamoperator<< (const void *arg)
    ostreamoperator<< (const signed char *arg)
    ostreamoperator<< (const unsigned char *arg)
    ostreamoperator<< (char arg)
    ostreamoperator<< (signed char arg)
    int precision (unsigned int n)
    int precision () const
    ostreamput (char ch)
    iostate rdstate () const
    ostreamseekp (off_type off, seekdir way)
    ostreamseekp (pos_type pos)
    fmtflags setf (fmtflags fl, fmtflags mask)
    fmtflags setf (fmtflags fl)
    void setstate (iostate state)
    pos_type tellp ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()

    -Private Member Functions

    bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
    bool createContiguous (SdBaseFile *dirFile, const char *path, uint32_t size)
    uint32_t curCluster () const
    uint32_t curPosition () const
    bool dirEntry (dir_t *dir)
    bool exists (const char *name)
    int16_t fgets (char *str, int16_t num, char *delim=0)
    uint32_t fileSize () const
    uint32_t firstCluster () const
    bool getFilename (char *name)
    void getpos (fpos_t *pos)
    bool isDir () const
    bool isFile () const
    bool isOpen () const
    bool isRoot () const
    bool isSubDir () const
    void ls (Print *pr, uint8_t flags=0, uint8_t indent=0)
    void ls (uint8_t flags=0)
    bool mkdir (SdBaseFile *dir, const char *path, bool pFlag=true)
    bool open (SdBaseFile *dirFile, uint16_t index, uint8_t oflag)
    bool open (SdBaseFile *dirFile, const char *path, uint8_t oflag)
    bool openNext (SdBaseFile *dirFile, uint8_t oflag)
    bool openRoot (SdVolume *vol)
    int peek ()
    bool printName ()
    int16_t read ()
    int16_t read (void *buf, uint16_t nbyte)
    int8_t readDir (dir_t *dir)
    bool remove ()
    bool rename (SdBaseFile *dirFile, const char *newPath)
    void rewind ()
    bool rmdir ()
    bool rmRfStar ()
    bool seekCur (int32_t offset)
    bool seekEnd (int32_t offset=0)
    bool seekSet (uint32_t pos)
    void setpos (fpos_t *pos)
    bool sync ()
    bool timestamp (SdBaseFile *file)
    bool timestamp (uint8_t flag, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
    bool truncate (uint32_t size)
    uint8_t type () const
    SdVolumevolume () const
    int16_t write (const void *buf, uint16_t nbyte)

    -Static Private Member Functions

    static SdBaseFilecwd ()
    static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
    static void dateTimeCallbackCancel ()
    static void dirName (const dir_t &dir, char *name)
    static void printFatDate (uint16_t fatDate)
    static void printFatDate (Print *pr, uint16_t fatDate)
    static void printFatTime (Print *pr, uint16_t fatTime)
    static void printFatTime (uint16_t fatTime)
    static bool remove (SdBaseFile *dirFile, const char *path)

    -Private Attributes

    bool writeError
    -

    Detailed Description

    -

    SD card output stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ofstream::ofstream (const char * path,
    ios::openmode mode = out 
    ) [inline, explicit]
    -
    -
    -

    Constructor with open

    -
    Parameters:
    - - - -
    [in]pathfile to open
    [in]modeopen mode
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ofstream::clear (iostate state = goodbit) [inline]
    -
    -
    -

    Clear state and writeError

    -
    Parameters:
    - - -
    [in]statenew state for stream
    -
    -
    - -

    Reimplemented from ios.

    - -
    -
    - -
    -
    - - - - - - - -
    void ofstream::close () [inline]
    -
    -
    -

    Close a file and force cached data and directory information to be written to the storage device.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    ostream& ostream::flush () [inline, inherited]
    -
    -
    -

    Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ofstream::is_open () [inline]
    -
    -
    -
    Returns:
    True if stream is open else false.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void ofstream::open (const char * path,
    openmode mode = out 
    ) [inline]
    -
    -
    -

    Open an ofstream

    -
    Parameters:
    - - - -
    [in]pathfile to open
    [in]modeopen mode
    -
    -
    -

    mode See fstream::open() for valid modes.

    - -

    Reimplemented from SdBaseFile.

    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (double arg) [inline, inherited]
    -
    -
    -

    Output double

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint16_t arg) [inline, inherited]
    -
    -
    -

    Output unsigned int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int32_t arg) [inline, inherited]
    -
    -
    -

    Output signed long

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint32_t arg) [inline, inherited]
    -
    -
    -

    Output uint32_t

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const signed char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const void * arg) [inline, inherited]
    -
    -
    -

    Output pointer

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const unsigned char * arg) [inline, inherited]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (pgm arg) [inline, inherited]
    -
    -
    -

    Output a string from flash

    -
    Parameters:
    - - -
    [in]argpgm struct pointing to string
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (signed char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (unsigned char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline, inherited]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (char arg) [inline, inherited]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (bool arg) [inline, inherited]
    -
    -
    -

    Output bool

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int16_t arg) [inline, inherited]
    -
    -
    -

    Output signed int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::put (char ch) [inline, inherited]
    -
    -
    -

    Puts a character in a stream.

    -

    The unformatted output function inserts the element ch. It returns *this.

    -
    Parameters:
    - - -
    [in]chThe character
    -
    -
    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& ostream::seekp (off_type off,
    seekdir way 
    ) [inline, inherited]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::seekp (pos_type pos) [inline, inherited]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the write pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    pos_type ostream::tellp () [inline, inherited]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/classofstream__coll__graph.png b/libs/SdFatBeta20120108/html/classofstream__coll__graph.png deleted file mode 100755 index 6572f15e49cf66fa8daa33b5e40a3709143888c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19755 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 P4fNd3`ZTqa;(qHNv6+U8 diff --git a/libs/SdFatBeta20120108/html/classofstream__inherit__graph.png b/libs/SdFatBeta20120108/html/classofstream__inherit__graph.png deleted file mode 100755 index 291d52880ae41f08a6a0ddf638967c464d3f8a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6425 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 diff --git a/libs/SdFatBeta20120108/html/classostream-members.html b/libs/SdFatBeta20120108/html/classostream-members.html deleted file mode 100755 index d40c419..0000000 --- a/libs/SdFatBeta20120108/html/classostream-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    ostream Member List
    -
    -
    -This is the complete list of members for ostream, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    adjustfieldios_base [static]
    appios_base [static]
    ateios_base [static]
    bad() const ios [inline]
    badbitios_base [static]
    basefieldios_base [static]
    beg enum valueios_base
    binaryios_base [static]
    boolalphaios_base [static]
    clear(iostate state=goodbit)ios [inline]
    cur enum valueios_base
    decios_base [static]
    end enum valueios_base
    eof() const ios [inline]
    eofbitios_base [static]
    fail() const ios [inline]
    failbitios_base [static]
    fill()ios_base [inline]
    fill(char c)ios_base [inline]
    flags() const ios_base [inline]
    flags(fmtflags fl)ios_base [inline]
    flagsToBase()ios_base [inline, protected]
    flush()ostream [inline]
    fmtflags typedefios_base
    good() const ios [inline]
    goodbitios_base [static]
    hexios_base [static]
    inios_base [static]
    internalios_base [static]
    ios()ios [inline]
    ios_base() (defined in ios_base)ios_base [inline]
    iostate typedefios_base
    leftios_base [static]
    octios_base [static]
    off_type typedefios_base
    openmode typedefios_base
    operator const void *() const ios [inline]
    operator!() const ios [inline]
    operator<<(ostream &(*pf)(ostream &str))ostream [inline]
    operator<<(ios_base &(*pf)(ios_base &str))ostream [inline]
    operator<<(bool arg)ostream [inline]
    operator<<(const char *arg)ostream [inline]
    operator<<(const signed char *arg)ostream [inline]
    operator<<(const unsigned char *arg)ostream [inline]
    operator<<(char arg)ostream [inline]
    operator<<(signed char arg)ostream [inline]
    operator<<(unsigned char arg)ostream [inline]
    operator<<(double arg)ostream [inline]
    operator<<(int16_t arg)ostream [inline]
    operator<<(uint16_t arg)ostream [inline]
    operator<<(int32_t arg)ostream [inline]
    operator<<(uint32_t arg)ostream [inline]
    operator<<(const void *arg)ostream [inline]
    operator<<(pgm arg)ostream [inline]
    ostream() (defined in ostream)ostream [inline]
    outios_base [static]
    pos_type typedefios_base
    precision() const ios_base [inline]
    precision(unsigned int n)ios_base [inline]
    put(char ch)ostream [inline]
    rdstate() const ios [inline]
    rightios_base [static]
    seekdir enum nameios_base
    seekp(pos_type pos)ostream [inline]
    seekp(off_type off, seekdir way)ostream [inline]
    setf(fmtflags fl)ios_base [inline]
    setf(fmtflags fl, fmtflags mask)ios_base [inline]
    setstate(iostate state)ios [inline]
    showbaseios_base [static]
    showpointios_base [static]
    showposios_base [static]
    skipwsios_base [static]
    streamsize typedefios_base
    tellp()ostream [inline]
    truncios_base [static]
    unsetf(fmtflags fl)ios_base [inline]
    uppercaseios_base [static]
    width()ios_base [inline]
    width(unsigned n)ios_base [inline]
    - - - diff --git a/libs/SdFatBeta20120108/html/classostream.html b/libs/SdFatBeta20120108/html/classostream.html deleted file mode 100755 index 9391a64..0000000 --- a/libs/SdFatBeta20120108/html/classostream.html +++ /dev/null @@ -1,1581 +0,0 @@ - - - - -SdFat: ostream Class Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    - -
    - -

    Output Stream. - More...

    - -

    #include <ostream.h>

    -
    -Inheritance diagram for ostream:
    -
    -
    Inheritance graph
    - - -
    [legend]
    -
    -Collaboration diagram for ostream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Types

    typedef unsigned int fmtflags
    typedef unsigned char iostate
    typedef int32_t off_type
    typedef uint8_t openmode
    typedef uint32_t pos_type
    enum  seekdir { beg, -cur, -end - }
    typedef uint32_t streamsize

    -Public Member Functions

    bool bad () const
    void clear (iostate state=goodbit)
    bool eof () const
    bool fail () const
    char fill ()
    char fill (char c)
    fmtflags flags () const
    fmtflags flags (fmtflags fl)
    ostreamflush ()
    bool good () const
     operator const void * () const
    bool operator! () const
    ostreamoperator<< (bool arg)
    ostreamoperator<< (const void *arg)
    ostreamoperator<< (pgm arg)
    ostreamoperator<< (char arg)
    ostreamoperator<< (ios_base &(*pf)(ios_base &str))
    ostreamoperator<< (signed char arg)
    ostreamoperator<< (ostream &(*pf)(ostream &str))
    ostreamoperator<< (unsigned char arg)
    ostreamoperator<< (const char *arg)
    ostreamoperator<< (double arg)
    ostreamoperator<< (const signed char *arg)
    ostreamoperator<< (int16_t arg)
    ostreamoperator<< (uint16_t arg)
    ostreamoperator<< (int32_t arg)
    ostreamoperator<< (const unsigned char *arg)
    ostreamoperator<< (uint32_t arg)
    int precision (unsigned int n)
    int precision () const
    ostreamput (char ch)
    iostate rdstate () const
    ostreamseekp (off_type off, seekdir way)
    ostreamseekp (pos_type pos)
    fmtflags setf (fmtflags fl)
    fmtflags setf (fmtflags fl, fmtflags mask)
    void setstate (iostate state)
    pos_type tellp ()
    void unsetf (fmtflags fl)
    unsigned width (unsigned n)
    unsigned width ()

    -Static Public Attributes

    static const fmtflags adjustfield = left | right | internal
    static const openmode app = 0X4
    static const openmode ate = 0X8
    static const iostate badbit = 0X01
    static const fmtflags basefield = dec | hex | oct
    static const openmode binary = 0X10
    static const fmtflags boolalpha = 0x0100
    static const fmtflags dec = 0x0008
    static const iostate eofbit = 0x02
    static const iostate failbit = 0X04
    static const iostate goodbit = 0x00
    static const fmtflags hex = 0x0010
    static const openmode in = 0X20
    static const fmtflags internal = 0x0004
    static const fmtflags left = 0x0001
    static const fmtflags oct = 0x0020
    static const openmode out = 0X40
    static const fmtflags right = 0x0002
    static const fmtflags showbase = 0x0200
    static const fmtflags showpoint = 0x0400
    static const fmtflags showpos = 0x0800
    static const fmtflags skipws = 0x1000
    static const openmode trunc = 0X80
    static const fmtflags uppercase = 0x4000

    -Protected Member Functions

    uint8_t flagsToBase ()
    -

    Detailed Description

    -

    Output Stream.

    -

    Member Typedef Documentation

    - -
    -
    - - - - -
    typedef unsigned int ios_base::fmtflags [inherited]
    -
    -
    -

    type for format flags

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char ios_base::iostate [inherited]
    -
    -
    -

    typedef for iostate bitmask

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t ios_base::off_type [inherited]
    -
    -
    -

    type for relative seek offset

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t ios_base::openmode [inherited]
    -
    -
    -

    typedef for iostream open mode

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::pos_type [inherited]
    -
    -
    -

    type for absolute seek position

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ios_base::streamsize [inherited]
    -
    -
    -

    unsigned size that can represent maximum file size. (violates spec - should be signed)

    - -
    -
    -

    Member Enumeration Documentation

    - -
    -
    - - - - -
    enum ios_base::seekdir [inherited]
    -
    -
    -

    enumerated type for the direction of relative seeks

    -
    Enumerator:
    - - - -
    beg  -

    seek relative to the beginning of the stream

    -
    cur  -

    seek relative to the current stream position

    -
    end  -

    seek relative to the end of the stream

    -
    -
    -
    - -
    -
    -

    Member Function Documentation

    - -
    -
    - - - - - - - -
    bool ios::bad () const [inline, inherited]
    -
    -
    -
    Returns:
    true if bad bit is set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::clear (iostate state = goodbit) [inline, inherited]
    -
    -
    -

    Clear iostate bits.

    -
    Parameters:
    - - -
    [in]stateThe flags you want to set after clearing all flags.
    -
    -
    - -

    Reimplemented in fstream, and ofstream.

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::eof () const [inline, inherited]
    -
    -
    -
    Returns:
    true if end of file has been reached else false.
    -

    Warning: An empty file returns false before the first read.

    -

    Moral: eof() is only useful in combination with fail(), to find out whether EOF was the cause for failure

    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::fail () const [inline, inherited]
    -
    -
    -
    Returns:
    true if any iostate bit other than eof are set else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    char ios_base::fill (char c) [inline, inherited]
    -
    -
    -

    Set fill character

    -
    Parameters:
    - - -
    [in]cnew fill character
    -
    -
    -
    Returns:
    old fill character
    - -
    -
    - -
    -
    - - - - - - - -
    char ios_base::fill () [inline, inherited]
    -
    -
    -
    Returns:
    fill character
    - -
    -
    - -
    -
    - - - - - - - -
    fmtflags ios_base::flags () const [inline, inherited]
    -
    -
    -
    Returns:
    format flags
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::flags (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flag
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - -
    uint8_t ios_base::flagsToBase () [inline, protected, inherited]
    -
    -
    -
    Returns:
    current number base
    - -
    -
    - -
    -
    - - - - - - - -
    ostream& ostream::flush () [inline]
    -
    -
    -

    Flushes the buffer associated with this stream. The flush function calls the sync function of the associated file.

    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::good () const [inline, inherited]
    -
    -
    -
    Returns:
    True if no iostate flags are set else false.
    - -
    -
    - -
    -
    - - - - - - - -
    ios::operator const void * () const [inline, inherited]
    -
    -
    -
    Returns:
    null pointer if fail() is true.
    - -
    -
    - -
    -
    - - - - - - - -
    bool ios::operator! () const [inline, inherited]
    -
    -
    -
    Returns:
    true if fail() else false.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ios_base &(*)(ios_base &str) pf) [inline]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (pgm arg) [inline]
    -
    -
    -

    Output a string from flash

    -
    Parameters:
    - - -
    [in]argpgm struct pointing to string
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (signed char arg) [inline]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (bool arg) [inline]
    -
    -
    -

    Output bool

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const char * arg) [inline]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (unsigned char arg) [inline]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (double arg) [inline]
    -
    -
    -

    Output double

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (ostream &(*)(ostream &str) pf) [inline]
    -
    -
    -

    call manipulator

    -
    Parameters:
    - - -
    [in]pffunction to call
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int16_t arg) [inline]
    -
    -
    -

    Output signed int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const signed char * arg) [inline]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const unsigned char * arg) [inline]
    -
    -
    -

    Output string

    -
    Parameters:
    - - -
    [in]argstring to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint16_t arg) [inline]
    -
    -
    -

    Output unsigned int

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (int32_t arg) [inline]
    -
    -
    -

    Output signed long

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (uint32_t arg) [inline]
    -
    -
    -

    Output uint32_t

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (char arg) [inline]
    -
    -
    -

    Output character

    -
    Parameters:
    - - -
    [in]argcharacter to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::operator<< (const void * arg) [inline]
    -
    -
    -

    Output pointer

    -
    Parameters:
    - - -
    [in]argvalue to output
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - -
    int ios_base::precision () const [inline, inherited]
    -
    -
    -
    Returns:
    precision
    - -
    -
    - -
    -
    - - - - - - - - -
    int ios_base::precision (unsigned int n) [inline, inherited]
    -
    -
    -

    set precision

    -
    Parameters:
    - - -
    [in]nnew precision
    -
    -
    -
    Returns:
    old precision
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::put (char ch) [inline]
    -
    -
    -

    Puts a character in a stream.

    -

    The unformatted output function inserts the element ch. It returns *this.

    -
    Parameters:
    - - -
    [in]chThe character
    -
    -
    -
    Returns:
    A reference to the ostream object.
    - -
    -
    - -
    -
    - - - - - - - -
    iostate ios::rdstate () const [inline, inherited]
    -
    -
    -
    Returns:
    The iostate flags for this file.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& ostream::seekp (off_type off,
    seekdir way 
    ) [inline]
    -
    -
    -

    Set the stream position.

    -
    Parameters:
    - - - -
    [in]offAn offset to move the write pointer relative to way. off is a signed 32-bit int so the offset is limited to +- 2GB.
    [in]wayOne of ios::beg, ios::cur, or ios::end.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& ostream::seekp (pos_type pos) [inline]
    -
    -
    -

    Set the stream position

    -
    Parameters:
    - - -
    [in]posThe absolute position in which to move the write pointer.
    -
    -
    -
    Returns:
    Is always *this. Failure is indicated by the state of *this.
    - -
    -
    - -
    -
    - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl) [inline, inherited]
    -
    -
    -

    set format flags

    -
    Parameters:
    - - -
    [in]flnew flags to be or'ed in
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    fmtflags ios_base::setf (fmtflags fl,
    fmtflags mask 
    ) [inline, inherited]
    -
    -
    -

    modify format flags

    -
    Parameters:
    - - - -
    [in]maskflags to be removed
    [in]flflags to be set after mask bits have been cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios::setstate (iostate state) [inline, inherited]
    -
    -
    -

    Set iostate bits.

    -
    Parameters:
    - - -
    [in]stateBitts to set.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - -
    pos_type ostream::tellp () [inline]
    -
    -
    -
    Returns:
    the stream position
    - -
    -
    - -
    -
    - - - - - - - - -
    void ios_base::unsetf (fmtflags fl) [inline, inherited]
    -
    -
    -

    clear format flags

    -
    Parameters:
    - - -
    [in]flflags to be cleared
    -
    -
    -
    Returns:
    old flags
    - -
    -
    - -
    -
    - - - - - - - - -
    unsigned ios_base::width (unsigned n) [inline, inherited]
    -
    -
    -

    set width

    -
    Parameters:
    - - -
    [in]nnew width
    -
    -
    -
    Returns:
    old width
    - -
    -
    - -
    -
    - - - - - - - -
    unsigned ios_base::width () [inline, inherited]
    -
    -
    -
    Returns:
    width
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    const fmtflags ios_base::adjustfield = left | right | internal [static, inherited]
    -
    -
    -

    mask for adjustfield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::app = 0X4 [static, inherited]
    -
    -
    -

    seek to end before each write

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::ate = 0X8 [static, inherited]
    -
    -
    -

    open and seek to end immediately after opening

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::badbit = 0X01 [static, inherited]
    -
    -
    -

    iostate bad bit for a nonrecoverable error.

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::basefield = dec | hex | oct [static, inherited]
    -
    -
    -

    mask for basefield

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::binary = 0X10 [static, inherited]
    -
    -
    -

    perform input and output in binary mode (as opposed to text mode)

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::boolalpha = 0x0100 [static, inherited]
    -
    -
    -

    use strings true/false for bool

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::dec = 0x0008 [static, inherited]
    -
    -
    -

    base 10 flag

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::eofbit = 0x02 [static, inherited]
    -
    -
    -

    iostate bit for end of file reached

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::failbit = 0X04 [static, inherited]
    -
    -
    -

    iostate fail bit for nonfatal error

    - -
    -
    - -
    -
    - - - - -
    const iostate ios_base::goodbit = 0x00 [static, inherited]
    -
    -
    -

    iostate for no flags

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::hex = 0x0010 [static, inherited]
    -
    -
    -

    base 16 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::in = 0X20 [static, inherited]
    -
    -
    -

    open for input

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::internal = 0x0004 [static, inherited]
    -
    -
    -

    fill between sign/base prefix and number

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::left = 0x0001 [static, inherited]
    -
    -
    -

    left adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::oct = 0x0020 [static, inherited]
    -
    -
    -

    base 8 flag

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::out = 0X40 [static, inherited]
    -
    -
    -

    open for output

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::right = 0x0002 [static, inherited]
    -
    -
    -

    right adjust fields

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showbase = 0x0200 [static, inherited]
    -
    -
    -

    use prefix 0X for hex and 0 for oct

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpoint = 0x0400 [static, inherited]
    -
    -
    -

    always show '.' for floating numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::showpos = 0x0800 [static, inherited]
    -
    -
    -

    show + sign for nonnegative numbers

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::skipws = 0x1000 [static, inherited]
    -
    -
    -

    skip initial white space

    - -
    -
    - -
    -
    - - - - -
    const openmode ios_base::trunc = 0X80 [static, inherited]
    -
    -
    -

    truncate an existing stream when opening

    - -
    -
    - -
    -
    - - - - -
    const fmtflags ios_base::uppercase = 0x4000 [static, inherited]
    -
    -
    -

    use uppercase letters in number representations

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Arduino/libraries/SdFat/ostream.h
    • -
    • Arduino/libraries/SdFat/ostream.cpp
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/classostream__coll__graph.png b/libs/SdFatBeta20120108/html/classostream__coll__graph.png deleted file mode 100755 index d05dfc1e92cd447002d6742a855556c1be49ab9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1733 zcmb`Ic{tR09LIl*d($dMRB|?UI`-Lpp8a$8`8=QR`+45a_n+_Q^ZI;0S&sHL(o#F6005A- zMZlZ|dP0yC2{FN`bgy_`AYy)YHZWlGOWbKH#|n%DTbQNGMIx{0c%}+m@yf)5Af|LQ z2#jGM;~qeE z-0T7kkxmKa`1KF9hXS7%vIns!3MF9~?c+nPEL)q+sGJ)gui0xM0Zy*~l&>>|qa<6) zFlX<}LP0AU_yY)zN{XJ4r>UJ*ceA>W=A!t=|<2r4v=Txo#r#}h`k#-#E zy@c{!KF?`6Uw-113rdKV2wVm2pEBx*z@Pr;ZoT>GY3Z4jx=*gJI_r@5R`!JtMgwGS zEn1#=jLzl2C(Kc_Wv3)l1uhQH^=f)#i9&gFYcHX!$7@%fU)eqA+#Hmz{CNEED(a1P z6`=s#s{(T~B@L^Cz};2(wfn4+`oZ@CIFQXJu}I+zuq=3^DMx~bCjg`q)S!PYm_JyzA!NhY}0BKzyv z{8@PXs1z{Qzj!23ckILkynPv&$Dtr+zqL(@P_Xttv~hrAKqS zbfnKow9&$h_-LhCegxa7oiy6eV(5C>@u-Abpo+~N!283+UR7CHS?mKB`9b~EJQhzk z474HRlLNz1x*}b-yKGI(Q|ej_4NU5au{SgV5`7ca*z1*-=bTQ3gVXd^xg5 zX{S_7bMs^!lB`xT+=VyW8A+ST^nRoI<0+eL@4eR^o=OTcE@yk)oQ>s#E*gZVup65Z zTHC0a5IpSf3V-F~znGz|85+`gxy3!^2T{2L%*dgDih z9m%TD;?YZ@la>I~Ku0uNRbxTf(t3`dnHHmWJ_e^ACk$ zrYLw3vYZu$wJV&z6pf43zI>g$%9go`&|u*3@NITxeH8?x1)FHy*Wdtt!hn3e;ji$x z^k~RXH9z`)D5C*Kc^?xA(Hj}BY*a#9{O$b zO=Ed~uV!FD_3o{;{%K;e4QEw`qq zo5k3&KFV8V=ZhMr`vere&QsFb9%AR@ANd`sh}$T+*0a>uc;wT!E~4Nm2m*jreY;m z2!XhP&XaZr$kohed+6EPdTmsrcHj6&zkp2J5pgFu@rG_^#O91B@O0E>?&2N208^hA z!YhwjJWF1C7bvsLEa*RnIsT9Q2)-!+ewZcB!j_bbW7)g%38u*-rp8Mm0I|jl=UM|O zhAZ%g3qIoM8dU`^f_p`l?2+(c!Eo>#}?(3e_+?=STJlkI#Ov8br} z{BrD&K~~>$do2&vFzKW?XK5fYgxWYBS2tFhAU+i^{L&jI3J=s9&8M8?ILJPsRa zu6vIeO)IUtj2rK%-_a(W<;fPCGebeBu)}PO1X) z8|C0SFgQbU*R(i?r`C+wDd)YMC=~k~K};Yi6dHqmo!vI(?xx;$MoiyS+uM})?=jp5 uYD#ZKOZtkn#=7&xI2n~787m1eb3whlJlnCv9AYlmOMorh9#&)JllmtdW-*lj diff --git a/libs/SdFatBeta20120108/html/classostream__inherit__graph.png b/libs/SdFatBeta20120108/html/classostream__inherit__graph.png deleted file mode 100755 index 0a10e340971ad17aacad8f40640d7096424aceea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8051 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 diff --git a/libs/SdFatBeta20120108/html/files.html b/libs/SdFatBeta20120108/html/files.html deleted file mode 100755 index 6d42813..0000000 --- a/libs/SdFatBeta20120108/html/files.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - -SdFat: File List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    File List
    -
    -
    -
    Here is a list of all documented files with brief descriptions:
    - - - - - - - - - - - - - - - -
    Arduino/libraries/SdFat/ArduinoStream.hArduinoInStream and ArduinoOutStream classes
    Arduino/libraries/SdFat/bufstream.hibufstream and obufstream classes
    Arduino/libraries/SdFat/ios.hios_base and ios classes
    Arduino/libraries/SdFat/iostream.hiostream class
    Arduino/libraries/SdFat/istream.histream class
    Arduino/libraries/SdFat/ostream.hostream class
    Arduino/libraries/SdFat/Sd2Card.hSd2Card class for V2 SD/SDHC cards
    Arduino/libraries/SdFat/SdBaseFile.hSdBaseFile class
    Arduino/libraries/SdFat/SdFat.hSdFat class
    Arduino/libraries/SdFat/SdFatConfig.hConfiguration definitions
    Arduino/libraries/SdFat/SdFatStructs.hFAT file structures
    Arduino/libraries/SdFat/SdFatUtil.hUseful utility functions
    Arduino/libraries/SdFat/SdFile.hSdFile class
    Arduino/libraries/SdFat/SdStream.hfstream, ifstream, and ofstream classes
    Arduino/libraries/SdFat/SdVolume.hSdVolume class
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x62.html b/libs/SdFatBeta20120108/html/functions_0x62.html deleted file mode 100755 index 33ec064..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x62.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - b -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x68.html b/libs/SdFatBeta20120108/html/functions_0x68.html deleted file mode 100755 index 4242d49..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x68.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - h -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x6a.html b/libs/SdFatBeta20120108/html/functions_0x6a.html deleted file mode 100755 index a06caaf..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x6a.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - j -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x6c.html b/libs/SdFatBeta20120108/html/functions_0x6c.html deleted file mode 100755 index 73e7b4a..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x6c.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - l -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x6e.html b/libs/SdFatBeta20120108/html/functions_0x6e.html deleted file mode 100755 index 874f5f3..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x6e.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - n -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x70.html b/libs/SdFatBeta20120108/html/functions_0x70.html deleted file mode 100755 index 7d55a85..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x70.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - p -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_0x74.html b/libs/SdFatBeta20120108/html/functions_0x74.html deleted file mode 100755 index 6893408..0000000 --- a/libs/SdFatBeta20120108/html/functions_0x74.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - -SdFat: Class Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - t -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func.html b/libs/SdFatBeta20120108/html/functions_func.html deleted file mode 100755 index 9a4a3c9..0000000 --- a/libs/SdFatBeta20120108/html/functions_func.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - a -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x62.html b/libs/SdFatBeta20120108/html/functions_func_0x62.html deleted file mode 100755 index 794b24b..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x62.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - b -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x66.html b/libs/SdFatBeta20120108/html/functions_func_0x66.html deleted file mode 100755 index 93e9877..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x66.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - f -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x67.html b/libs/SdFatBeta20120108/html/functions_func_0x67.html deleted file mode 100755 index 6a7dbf9..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x67.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - g -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x6c.html b/libs/SdFatBeta20120108/html/functions_func_0x6c.html deleted file mode 100755 index 675a757..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x6c.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - l -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x70.html b/libs/SdFatBeta20120108/html/functions_func_0x70.html deleted file mode 100755 index a79c5b0..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x70.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - p -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_func_0x75.html b/libs/SdFatBeta20120108/html/functions_func_0x75.html deleted file mode 100755 index 791c2d9..0000000 --- a/libs/SdFatBeta20120108/html/functions_func_0x75.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - -SdFat: Class Members - Functions - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - u -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/functions_vars.html b/libs/SdFatBeta20120108/html/functions_vars.html deleted file mode 100755 index be85259..0000000 --- a/libs/SdFatBeta20120108/html/functions_vars.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - -SdFat: Class Members - Variables - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - a -

    - - -

    - b -

    - - -

    - c -

    - - -

    - d -

    - - -

    - e -

    - - -

    - f -

    - - -

    - g -

    - - -

    - h -

    - - -

    - i -

    - - -

    - j -

    - - -

    - l -

    - - -

    - m -

    - - -

    - n -

    - - -

    - o -

    - - -

    - p -

    - - -

    - r -

    - - -

    - s -

    - - -

    - t -

    - - -

    - u -

    - - -

    - v -

    - - -

    - w -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/globals_defs.html b/libs/SdFatBeta20120108/html/globals_defs.html deleted file mode 100755 index 70bfe7d..0000000 --- a/libs/SdFatBeta20120108/html/globals_defs.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - -SdFat: File Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - -
    -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/globals_type.html b/libs/SdFatBeta20120108/html/globals_type.html deleted file mode 100755 index 2c346e2..0000000 --- a/libs/SdFatBeta20120108/html/globals_type.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - -SdFat: File Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - -
    -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/globals_vars.html b/libs/SdFatBeta20120108/html/globals_vars.html deleted file mode 100755 index a69d71c..0000000 --- a/libs/SdFatBeta20120108/html/globals_vars.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - -SdFat: File Members - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - - - -
    -
    -  - -

    - b -

    - - -

    - d -

    - - -

    - e -

    - - -

    - f -

    - - -

    - l -

    - - -

    - o -

    - - -

    - s -

    - - -

    - t -

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/graph_legend.html b/libs/SdFatBeta20120108/html/graph_legend.html deleted file mode 100755 index 9c5df42..0000000 --- a/libs/SdFatBeta20120108/html/graph_legend.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - -SdFat: Graph Legend - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - -
    -
    -
    -
    Graph Legend
    -
    -
    -

    This page explains how to interpret the graphs that are generated by doxygen.

    -

    Consider the following example:

    -
    /*! Invisible class because of truncation */
    -class Invisible { };
    -
    -/*! Truncated class, inheritance relation is hidden */
    -class Truncated : public Invisible { };
    -
    -/* Class not documented with doxygen comments */
    -class Undocumented { };
    -
    -/*! Class that is inherited using public inheritance */
    -class PublicBase : public Truncated { };
    -
    -/*! A template class */
    -template<class T> class Templ { };
    -
    -/*! Class that is inherited using protected inheritance */
    -class ProtectedBase { };
    -
    -/*! Class that is inherited using private inheritance */
    -class PrivateBase { };
    -
    -/*! Class that is used by the Inherited class */
    -class Used { };
    -
    -/*! Super class that inherits a number of other classes */
    -class Inherited : public PublicBase,
    -                  protected ProtectedBase,
    -                  private PrivateBase,
    -                  public Undocumented,
    -                  public Templ<int>
    -{
    -  private:
    -    Used *m_usedClass;
    -};
    -

    This will result in the following graph:

    -
    -graph_legend.png -
    -

    The boxes in the above graph have the following meaning:

    -
      -
    • -A filled gray box represents the struct or class for which the graph is generated.
    • -
    • -A box with a black border denotes a documented struct or class.
    • -
    • -A box with a grey border denotes an undocumented struct or class.
    • -
    • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    • -
    -

    The arrows have the following meaning:

    -
      -
    • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
    • -
    • -A dark green arrow is used for protected inheritance.
    • -
    • -A dark red arrow is used for private inheritance.
    • -
    • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
    • -
    • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
    • -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/graph_legend.png b/libs/SdFatBeta20120108/html/graph_legend.png deleted file mode 100755 index f99376d0980ff928458561787721e08a589189ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13683 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 - - - -SdFat: Class Hierarchy - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    Class Hierarchy
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/index.html b/libs/SdFatBeta20120108/html/index.html deleted file mode 100755 index ce3ca8b..0000000 --- a/libs/SdFatBeta20120108/html/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -SdFat: Arduino SdFat Library - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - -
    -
    -
    -
    Arduino SdFat Library
    -
    -
    -
    Copyright © 2011 by William Greiman

    -Introduction

    -

    The Arduino SdFat Library is a minimal implementation of FAT16 and FAT32 file systems on SD flash memory cards. Standard SD and high capacity SDHC cards are supported.

    -

    Experimental support for FAT12 can be enabled by setting FAT12_SUPPORT nonzero in SdFatConfig.h.

    -

    The SdFat library only supports short 8.3 names.

    -

    The main classes in SdFat are SdFat, SdFile, fstream, ifstream, and ofstream.

    -

    The SdFat class maintains a volume working directories, a current working directory, and simplifies initialization of other classes.

    -

    The SdFile class provides binary file access functions such as open(), read(), remove(), write(), close() and sync(). This class supports access to the root directory and subdirectories.

    -

    The fstream class implements C++ iostreams for both reading and writing text files.

    -

    The ifstream class implements the C++ iostreams for reading text files.

    -

    The ofstream class implements the C++ iostreams for writing text files.

    -

    The classes ibufstream and obufstream format and parse character strings in memory buffers.

    -

    the classes ArduinoInStream and ArduinoOutStream provide iostream functions for Serial, LiquidCrystal, and other devices.

    -

    The SdVolume class supports FAT16 and FAT32 partitions. Most applications will not need to call SdVolume member function.

    -

    The Sd2Card class supports access to standard SD cards and SDHC cards. Most applications will not need to call Sd2Card functions. The Sd2Card class can be used for raw access to the SD card.

    -

    A number of example are provided in the SdFat/examples folder. These were developed to test SdFat and illustrate its use.

    -

    SdFat was developed for high speed data recording. SdFat was used to implement an audio record/play class, WaveRP, for the Adafruit Wave Shield. This application uses special Sd2Card calls to write to contiguous files in raw mode. These functions reduce write latency so that audio can be recorded with the small amount of RAM in the Arduino.

    -

    -SD\SDHC Cards

    -

    Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and most consumer devices use the 4-bit parallel SD protocol. A card that functions well on A PC or Mac may not work well on the Arduino.

    -

    Most cards have good SPI read performance but cards vary widely in SPI write performance. Write performance is limited by how efficiently the card manages internal erase/remapping operations. The Arduino cannot optimize writes to reduce erase operations because of its limit RAM.

    -

    SanDisk cards generally have good write performance. They seem to have more internal RAM buffering than other cards and therefore can limit the number of flash erase operations that the Arduino forces due to its limited RAM.

    -

    -Hardware Configuration

    -

    SdFat was developed using an Adafruit Industries Wave Shield.

    -

    The hardware interface to the SD card should not use a resistor based level shifter. SdFat sets the SPI bus frequency to 8 MHz which results in signal rise times that are too slow for the edge detectors in many newer SD card controllers when resistor voltage dividers are used.

    -

    The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like the 74HC4050N based circuit shown in the file SdLevel.png. The Adafruit Wave Shield uses a 74AHC125N. Gravitech sells SD and MicroSD Card Adapters based on the 74LCX245.

    -

    If you are using a resistor based level shifter and are having problems try setting the SPI bus frequency to 4 MHz. This can be done by using card.init(SPI_HALF_SPEED) to initialize the SD card.

    -

    -Bugs and Comments

    -

    If you wish to report bugs or have comments, send email to fat16lib@sbcglobal.net.

    -

    -SdFat Usage

    -

    SdFat uses a slightly restricted form of short names. Only printable ASCII characters are supported. No characters with code point values greater than 127 are allowed. Space is not allowed even though space was allowed in the API of early versions of DOS.

    -

    Short names are limited to 8 characters followed by an optional period (.) and extension of up to 3 characters. The characters may be any combination of letters and digits. The following special characters are also allowed:

    -

    $ % ' - _ @ ~ ` ! ( ) { } ^ # &

    -

    Short names are always converted to upper case and their original case value is lost.

    -
    Note:
    The Arduino Print class uses character at a time writes so it was necessary to use a sync() function to control when data is written to the SD card.
    -
    An application which writes to a file using print(), println() or write() must call sync() at the appropriate time to force data and directory information to be written to the SD Card. Data and directory information are also written to the SD card when close() is called.
    -
    Applications must use care calling sync() since 2048 bytes of I/O is required to update file and directory information. This includes writing the current data block, reading the block that contains the directory entry for update, writing the directory block back and reading back the current data block.
    -

    It is possible to open a file with two or more instances of SdFile. A file may be corrupted if data is written to the file by more than one instance of SdFile.

    -

    -How to format SD Cards as FAT Volumes

    -

    You should use a freshly formatted SD card for best performance. FAT file systems become slower if many files have been created and deleted. This is because the directory entry for a deleted file is marked as deleted, but is not deleted. When a new file is created, these entries must be scanned before creating the file, a flaw in the FAT design. Also files can become fragmented which causes reads and writes to be slower.

    -

    A formatter sketch, SdFormatter.pde, is included in the SdFat/examples/SdFormatter directory. This sketch attempts to emulate SD Association's SDFormatter.

    -

    The best way to restore an SD card's format on a PC is to use SDFormatter which can be downloaded from:

    -

    http://www.sdcard.org/consumers/formatter/

    -

    SDFormatter aligns flash erase boundaries with file system structures which reduces write latency and file system overhead.

    -

    SDFormatter does not have an option for FAT type so it may format small cards as FAT12.

    -

    After the MBR is restored by SDFormatter you may need to reformat small cards that have been formatted FAT12 to force the volume type to be FAT16.

    -

    If you reformat the SD card with an OS utility, choose a cluster size that will result in:

    -

    4084 < CountOfClusters && CountOfClusters < 65525

    -

    The volume will then be FAT16.

    -

    If you are formatting an SD card on OS X or Linux, be sure to use the first partition. Format this partition with a cluster count in above range for FAT16. SDHC cards should be formatted FAT32 with a cluster size of 32 KB.

    -

    Microsoft operating systems support removable media formatted with a Master Boot Record, MBR, or formatted as a super floppy with a FAT Boot Sector in block zero.

    -

    Microsoft operating systems expect MBR formatted removable media to have only one partition. The first partition should be used.

    -

    Microsoft operating systems do not support partitioning SD flash cards. If you erase an SD card with a program like KillDisk, Most versions of Windows will format the card as a super floppy.

    -

    -References

    -

    Adafruit Industries:

    -

    http://www.adafruit.com/

    -

    http://www.ladyada.net/make/waveshield/

    -

    The Arduino site:

    -

    http://www.arduino.cc/

    -

    For more information about FAT file systems see:

    -

    http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

    -

    For information about using SD cards as SPI devices see:

    -

    http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf

    -

    The ATmega328 datasheet:

    -

    http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/inherit_graph_0.png b/libs/SdFatBeta20120108/html/inherit_graph_0.png deleted file mode 100755 index 2b0d4a36418d6513fd815f30fb26e636bc8fcac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 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 S0Izn#d#jA5L~c#`D6wLMnz8- z$B>N1x6}9L9ySnYwU?ZCWNJ141J0mhbFB}j9y?(Wd1P}6vpD0ELuLgE6+)_WH54o4 z4>*s1fagu)?Vd%`9tm48*=HUyW}fFZ z=ULDeg|*XfTnX7&meS^!CXv#X=xKbXH%D`q-{gf)*q+}_{`IQu%Cs-qN~d`ILss6{ z!04-3l=fspv&?RtOS{xMw|mx@6wm&sX722D_T*L5_1jLReiED3J>6ibS zzP++?tIsi`)Jk5pSMv-*60W34d9AfoK3o0w_r2R+_pG|S#NTID{+x=;*q7zq7x#C9 z9f2SgzMi*{dEM5QH8b<)neYC8<6ndGoKPnY#R`U4!&rui#`7zI!N=g~>gTe~DWM4f DFrb}) diff --git a/libs/SdFatBeta20120108/html/inherit_graph_12.png b/libs/SdFatBeta20120108/html/inherit_graph_12.png deleted file mode 100755 index 89883f784e3ad18119ea540ee8a47efdf0c4e707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)6A!Y~j8Ul0d6;6xR0ppuk82~!?A%qYzpmDVA0o(xWlyj+xCxENn=#t$6xC3~U&Ztrj0M2l` z9nb>kil$RHUVj_qL{<%DD?-_dP_`ofk}dTDUet?xD-_4|&>=^k&NI%}zGx(5uS!@B zQkCt(6rJ;Rw?7-Yux49--^ViB?U*6+B~em#k52^f6JS5AEomxVY#uJ@u3U2F8z3Ru ztQfm}PT2XV=OE;*J|Ue`)R;R5ETw&0MTob# zD&%YPT!pa-S_V*|(>+%}+vd_fH>^g$wTLxnbpZWf&5b};Xnq5vR_?kRv_@dbTkfhO ztVe+RmltwfnYbHPBk)a}%hPA2oSIp^AB45eyFJ0~9@J6O~J0000Jju9Wmf>t(WN9%V@j(MwY&Vujk2HjhPQwa(44hzd76BW|!pRK#|)UWg7p# z4%@VJ{?CnOY#fR$0-y3{PPxI{z|YWrF3RmG?*UcbJKEiT4D%S~RBK4hQEm`VneplH z=G8Jx4D+KttlQ4DiO-jl1BOn_TXx2=`rX3U;)~~syxkPD`IzYIc|lIU%6z#$nwV?< z%v^X*r)ZN~W_<4cJG-wrXH7CSyLf2I7sX5WjpjW|sWW>OVY}s4lwSDet;^hkMdco^ z4x6#{eD#tmSIRG6d9)Is0#ooEwFJ5j6`>*K@)s6w_4M!O zt|SJv|?rv>j&NkccTRv8EW3@HV8OzD9Y|+ ZoE_{~vTVV2CtxHnc)I$ztaD0e0syjdy{`ZO diff --git a/libs/SdFatBeta20120108/html/inherit_graph_15.png b/libs/SdFatBeta20120108/html/inherit_graph_15.png deleted file mode 100755 index f8da061c87dc155147842e4c987648343b76e6a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^wm_`P!3HEhK7S|=q}Y|gW!U_%O?Xx{&>1L zhGaCpowir-kO5C?yv4NziL6o*P16K5G$k7oH*u)io^D~PN$*MZP`df!&pvDMNss2t zQ~l4-A`oOb_rZN;i>E$EI;0zlUrcfN&QQj%ZknXzW~L3TYd$vrGtGL&kkG*@HdFW~ zx5h3}AoA+&o44-T6tUQrrH}UiSykF}zn^zvg@t~qznk}#DG54(&$%DpjJmsO@A8l% zx=bJTW$atq6t?s)%iOmbMG;Fc+_`+|U-0S)Vo`5xm(5z4f4Ej}F8AgQdG9a0KYplU zTi=GP_wj#%{>-+WttPK7a+eE&R#sQ>KA52`$ZVFZ9`m6_^Qzsu{11&HC2qAYNjRcg&DJa;X~UG5FC2pIWCNlpX@52SDiol$1V9UXet9e-f{I$zg!r^Uql;CC!~{ zP0k)&N=aXewvlnno7*)dqz~f#0J}o9wH9mTPBW~1vT|}KDIr~}N~=Px3NDRygr%My zZ?0(W=;LL?s!F+L?xr_=1l5wB+d*hmDetvukvY_mZat=@?zMYb{5bN2r{=m74%Df1 z*}ZtzUZ(?PPR?6c_w>Fml||-WOeyIyM9#Iffu$QueQr&g+Ew?Gi+3z-{z%%Z^v#R) z;J=IkP>30Bs0KRG`dJul20}w(8AzkqgV|GAu T?~=T;00000NkvXXu0mjfu8g;- diff --git a/libs/SdFatBeta20120108/html/inherit_graph_3.png b/libs/SdFatBeta20120108/html/inherit_graph_3.png deleted file mode 100755 index c77a10f45b96c1103271d31f5640b9df253e1a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^sX(mC!3HFwRn!*)DYhhUcNd2LAh=-f^2rPgjHR9~ zjv*P1Z)Z3b9ai9R-EY0u&1|oe`CG+ZX9ah?+2sBrv1p>s?)Ry8Tqn;Ando5AH1YBO zG>Lx3<_FCJY#fR$0!7<>-2O>7^iOQdnUc>i-{`W?Q-%kk2R1Hul}=}Wz`BhsT*j~S zOEQ1LH7+?eX(yS0DJ>9W!?wM=vS8=pu0EIB#wj%u7oGVat@Zkp#*t{TME{b#vper; zdS76xKBqm^bz-9Xe`T*Jkv8f#v}0ChZ!9^K_3gx5i_Yb1t{d%}-6`Z6ef1jG_A&>R zP5ftLv;IbZ&3ZfaR*qWpZ>z_aE{oanwoW`W^{a^M-`0QyTPE4ATX(H&+ldQHrfXdL z)|ZvdDffM9Q{eRDlN7dYdhy$}s_L!C+1QBpTRq%nUkF>c=E z{mk`Kr{}~R?X5FWoj&E;o(~(+0>f-Ss{WX6p(vt?Kuce|<~;CQ!`bXa@oV<@AG_HN jzWUn7If4UB{SVVx-g&1KHRADbhkFL(V#qi^AA zKeUw^PhiZ}2Sqn60=%__4ynf$K5Tf<<_Qc>Ve3BkozZ!pYx;86UsNl=u#nvQlsR+y zOTL?>)gh9~+TO#Tz_5LQy9miL`g`E;6ks6*SV#dDQhwIgmeYb~4lOa5@_R0000~U>E6rGg=55^ zj*KK9A2R+AAO!Fv^6>K>A_yUbD9TG>{s?^5bfgg{;47X?i825O;HRWVjd=z3q%{~Z z{Elbl9SD|TQ`wPKAW;k?ih)Ei*gCIwU$`b$_1^FlCD2X?*S(cK240a8q9IvDT$XPc51sWlfP02_}b(lCsa<-{aa{pa7-3P|bh($ diff --git a/libs/SdFatBeta20120108/html/inherit_graph_6.png b/libs/SdFatBeta20120108/html/inherit_graph_6.png deleted file mode 100755 index e867dcf68974125ebfe8f4ed4cd21c7bc4f0150f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)w#4r#A;1{%&aH0z;;JDnlA&&Gz3)=`yKml~X1%<;Z zk~Q*pCh<=utM{E2+p%YziS3O9Ktx1DM07(YrThuN`^Z2jj9&n+0Dfe}Nx9$!zypBK zjzLjOX8?}?F0w*P7T}sF&%Gj|ux72|Ze$d6Y)lq%W3rGNlZD)vEVoZRu&!15H5APZ z{k@Rq+SJy5a{W%pXQ|aVAsi`LYNa=>Ch@#u^c-gwEt6%LnB@tRPn^72DXmWSk@lta zp~X?+ji(foN6k37^3r@a*Lr2iEz9!DrDgIu`6MoX%eveXYt?&Vw&Jm3YB`Q|O|D*R z-$d(Vk%87O!CSA_Ccd{`XCuwfEpD$fi+1DW_EMURwKspndBR%RMkH)EdnAjsRC*7h zkq?gA))F~pQ-t>{v+}v7p9pe?aH)69P5a+tWyx(d+OM3+*-p02(b|{#vc|CzB3)s& zjI;K8mgcrv%Ve>ZTsg_!y0z_ca2GEQxIv#l?}Hbe)(WFa>u3%M~_$c@QD zZcG+(W3rH2={?ImfVWYBP<&dleBt`fMjr!Xp&0%EeD56u5fKp)QFs61Fkn7a8&|ym O0000ei!$Gd)hH-;Gga5gxj&uAC<_ynGerVY2VE@4M;Dtihmf{2R&Eqoz zj6R%t9blQF+bwdZa<#&?3kM#+P~DM5Nv`);)^g1~+I0JO=C9b(U;9Fny!YqbS=?xO z%O!7a%ITv9tlZ4&_2;d7R+FUgtZo((6wQ6?jeWHtk_KU6Fw`_mvnZR2NHzapFTNk#< z&pX%aZT9)hkJo0H)tzk-%boo&KJ(zh#)BIT3Vy}DuscxTh>&fEct`? s0n>xSk=z$|GFY4ybL0R9UD6?a>pb^|b*t(cfic72>FVdQ&MBb@05JW^u>b%7 diff --git a/libs/SdFatBeta20120108/html/inherit_graph_8.png b/libs/SdFatBeta20120108/html/inherit_graph_8.png deleted file mode 100755 index 31bac90a98a43dc2af4b41f4a19be48f430cef76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmV-H0lxl;P)eucScF;FfC4EL5yCoQ zqbPR{*!QF;ioY)UKX%Rr$8nq=B_zf-z^SAWMee`>xJhB2DA)r_;A&{fiY>4PE>cK^ zg+A!c%8?;mN|=>&F*P2xRy=I2c-UIW?XyGZ=uczu9v6fz36U1p#^drmqtFTqZ`1Nw zj=!{2?WfQxfi;)$7(=pFZ8l??`e!|?G0B6vHQEg-CPa7Hr6&oj88+8chG=HZs;Pfg zb7pg-mUvOL!hSP9NjOPU%hgET4Qc@#OBtDxGyQh)kJkfO>3#;?4j}z!7fT5J$#f7#3j`HsF9%4i!=r z>IAnxX^Z}oDiu31&adO9fDl3mF#?rg-vPLkOk_qp0h|ClLdVjWa0IXhaL<_3T-gKI z0=R_^OH7~<@{lW|8B<%1MaeAw9f?UqViJ*)BwhVxSX zNx%}bM)v|OdumMEmhw*qW@UEKUa+;DVxm~0#o~q!q3*C}A-9+xtmg$0kbmu_RRKJE6y+TMyJ#^Ptms;vu;~2taGM!0d;V132C(t>;H!2F_=<4 zGxUeQJ##&AQ+cMwyU5)$WB$spdt-a!TH^R5A;`P|>iB-|_?f~C00000NkvXXu0mjfqtmaD diff --git a/libs/SdFatBeta20120108/html/inherits.html b/libs/SdFatBeta20120108/html/inherits.html deleted file mode 100755 index e99c3b3..0000000 --- a/libs/SdFatBeta20120108/html/inherits.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -SdFat: Class Hierarchy - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    Class Hierarchy
    -
    -
    - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/ios_8h.html b/libs/SdFatBeta20120108/html/ios_8h.html deleted file mode 100755 index 1820151..0000000 --- a/libs/SdFatBeta20120108/html/ios_8h.html +++ /dev/null @@ -1,549 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/ios.h File Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    Arduino/libraries/SdFat/ios.h File Reference
    -
    -
    - -

    ios_base and ios classes -More...

    -
    #include <SdBaseFile.h>
    -
    -Include dependency graph for ios.h:
    -
    -
    - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Classes

    class  ios
     Error and state information for all streams. More...
    class  ios_base
     Base class for all streams. More...

    -Functions

    ios_baseboolalpha (ios_base &str)
    ios_basedec (ios_base &str)
    ios_basehex (ios_base &str)
    ios_baseinternal (ios_base &str)
    ios_baseleft (ios_base &str)
    ios_basenoboolalpha (ios_base &str)
    ios_basenoshowbase (ios_base &str)
    ios_basenoshowpoint (ios_base &str)
    ios_basenoshowpos (ios_base &str)
    ios_basenoskipws (ios_base &str)
    ios_basenouppercase (ios_base &str)
    ios_baseoct (ios_base &str)
    ios_baseright (ios_base &str)
    ios_baseshowbase (ios_base &str)
    ios_baseshowpoint (ios_base &str)
    ios_baseshowpos (ios_base &str)
    ios_baseskipws (ios_base &str)
    ios_baseuppercase (ios_base &str)
    -

    Detailed Description

    -

    ios_base and ios classes

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    ios_base& boolalpha (ios_basestr) [inline]
    -
    -
    -

    function for boolalpha manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& dec (ios_basestr) [inline]
    -
    -
    -

    function for dec manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& hex (ios_basestr) [inline]
    -
    -
    -

    function for hex manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& internal (ios_basestr) [inline]
    -
    -
    -

    function for internal manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& left (ios_basestr) [inline]
    -
    -
    -

    function for left manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& noboolalpha (ios_basestr) [inline]
    -
    -
    -

    function for noboolalpha manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& noshowbase (ios_basestr) [inline]
    -
    -
    -

    function for noshowbase manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& noshowpoint (ios_basestr) [inline]
    -
    -
    -

    function for noshowpoint manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& noshowpos (ios_basestr) [inline]
    -
    -
    -

    function for noshowpos manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& noskipws (ios_basestr) [inline]
    -
    -
    -

    function for noskipws manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& nouppercase (ios_basestr) [inline]
    -
    -
    -

    function for nouppercase manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& oct (ios_basestr) [inline]
    -
    -
    -

    function for oct manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& right (ios_basestr) [inline]
    -
    -
    -

    function for right manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& showbase (ios_basestr) [inline]
    -
    -
    -

    function for showbase manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& showpoint (ios_basestr) [inline]
    -
    -
    -

    function for showpoint manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& showpos (ios_basestr) [inline]
    -
    -
    -

    function for showpos manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& skipws (ios_basestr) [inline]
    -
    -
    -

    function for skipws manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ios_base& uppercase (ios_basestr) [inline]
    -
    -
    -

    function for uppercase manipulator

    -
    Parameters:
    - - -
    [in]strThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/ios_8h__dep__incl.png b/libs/SdFatBeta20120108/html/ios_8h__dep__incl.png deleted file mode 100755 index d9b1bff03243d2f1d6dc3cfe80f8fb438a491d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17602 zcmajH1z42p*Dn4JH3-tB(xZeUp&%(G42m>3BOv7_M7ot`5S0N0l$0*1p^*?IMOr{a zKpIIA>F)nCx_{@K?|k36{(E0udkb$ov7WW=d#!uD!P=U)sVFW`KoCTAM+Kz|K}2u} zf+doZfuCqEi>848keR97MnR{9f79x6q9BM1x`Voj_DEVD_x3SzPnJI!I{bWTk>}2x zM~U%w8u4ilm<;GfJCz-fX*i*&A^{Kcsw-cv-!bG*Q-A`PA4OSH{Ej&GGHB|0T9E%S z#E68{K9nm|x39u1z2oy+!8#tQI}dw2Pft|xJFdow4)q$D^tN4$5O?kIkt=p}>51P> z>WvqL=>GdZI^mz(Af)XAq;DflqC@wRXwM1?%nqbw3LGN*oCVyr@N$21A+hHsT3btY zn-TIMZ#;e&Mau*aCGPAv+TV0O-X2N}2fu}f5NF{3iKkXTp-@@RTVUX28cow!91fTL zz?tyFyCsroWv;*SaxN@O=$vMYSY8>eeQwgDSZ?az&zhmzsCDHPT~3M@GR0@(&dxvY zi&4T!4hJebPnUM87w50cd+}sQm^&*lT}c%d>M$t?*(ZuEuBR4KE3?stpz#!Ta+30GvDn#LAFe7|(hkGG0pa@8Wf_A1Z)7kiJ#gyItS`(-5z zUZ}slFX51Nzp~?$w@VLa+3j9Oi(z1fqje*h&aQ9H=8wCP-jX{|8O%=n*s39)7t0sd zzgb;yXtA%GT-ts~DZ4A7cUuunrO&3V(~>G3F0aD!3!AL=VPCR4#rkyrK209QtG#!Z z<9Cv~Tp222mP8g@j~OsGnBk}wvo1`&cuFEsDPNOZTk4SYGXd&xF}N`>No74vPQfeR z78i_y)W+)79^XK})`}N06snd)E1=KS_QIIDXPp;17aa#T(@pXp+X-TlgCP9Fi*`0^;V9dx{?)IiEgLZF>!wzo-!mYGH5 zwM0vvjL*152tBwWKNo#hDEC{jUD4bAZ&@`0SqWDr0uZyD(3qnng^rGse!#yQ8jX^w z&2-O4$7P{i>Hf?Ig}P1}N{m1t5}y7~yT8V(5*?+@|15~ZtKIEo3tskkWq0i z-GpIWJKF?Fu!}P#HeVx%Uy#|xhFV!egVM(4zP8~~(2zI(ty?A^C+f7`Q19|~cc-H4 zmw(_|9wRPLUA!Y8C@23zHzUYzl3AP4Hrs8Mv(!c29d1(|f`Z982Fx6!Q?Li-X1O}hOJWZLObXdr68`vT z>cO7n6m0Z?5dujM_N>U=(C>7@6(-Bkcm@h5zRG|#n|?0VbTt`2GsO@X*c8d`y?%J( zgsE|yf%xp*ypPQLwoO;b9*AOdlr7BpzirkbZu4Xy{&7~Ajhvj^--S5P%4k$wu!;JN zB;E^iiN3b(+`h|?P4^;(*J?0#S9aaA*dgZv<-kB&31(?lIwnqGC4|czi&;9lv+A`` zn#SjH5foGPF8pU9E_$iAcLzLCs7!}>mZpAi6p$=nH{ul2y>Fqn>D6EM^6@;)wfsj( zQf8x9IV2W79&UeIenxVyKj0%TlQY|)nsTr*>Q;#)SEqs`+fg2pgZa)55%L=5nSh!c z>DbIKV~@P=r87nU(5((5zQZ4Vq@=;{kfjOJFCO~7o}tsBD+PCAdxyj(%eJ%!o>|eb zVc410lZGcJ-{t@OvBAY=vWd6+!G@81^ZtvANQFQJ%-3H{ZOB`F_F~4gilwR zU8A_zbdO1)fmEMjDhCR0{YGRcs3u28Q8;eFYw35E%Kmq8@#z$&vXk6|Pv3?Yos=fY zl?xY`)l;Q5-)bE0p5hC7UeW4!$+#*+zvvxWAJ$i|$~8Oxz?g}8)qml0{0<8=o{fjE zGR{I}2*zKY-yVIJ2}XIXz_;$Py=VCP$(_86n{CCInIephs$EqfR{x$`=;UO@xu5f; z&vKuxWxhn++4C{pRCbfa-i5}N*4qb;k7bGBIdG!nRCEgsnvS8#|3z~h%XvyeS{9F^ zlS)q5fsTS8MgWI;+8`(CzVlntUxVr%@q6+{SA5we`bEz{BNId?3$QHbhrRV>>Djyo z7`i$%=H&W%M%7LSYO}K3ZOqo-QBl6FwByp?N}rjPVEOR7V!PbJuoLKu>2t-pA)bV` zg(XQ7)F82kJk~LPr0e4AdiE9#Rn-2cY3w8V)Z&?U*fHc&GKC_lpxsG~L#p)E%+Zbg z$EKGMwvaw{>>TxO@xpR!a3=$>ms(Hqrlm0B3j5K6S3mSEa|#Rdhbx_B)8dFdbUs641zg4K{W`c@X|*-dh=T~7|hjR8}~ zgesAf^2wRDwIEzrvC;}P%|8sD5RG5!Z^H450Y~f3>tHdvmDia!MXT7fT*Ozroi~)S=B4UGf%7}x4)KnC_XX0fG3`0uI z9UZQaw#0^6CcbJ&^5pZIe3bmX4}{X#RELseo5x~S0 zL*I+=ddi34@-|r3OHSkg8~;qy_9(Ts&XOqz6R#O| zeT)nUn4kiy7Q@O6w-`$dqJ21i#;r|#A!B1;q~>>B_{WjTI!6Uxy2IE|$U0pkc68L7#>5nhBIh{4v9soa(v+r$9_ z&jO~#bQZkm8!1s2^<8%dGN)3U%&g=HNAQ+|SaN9lb!K?>B1}j#wIMyOr8XZjBAGe^sWtzYh@)ylAd%p$4Ak7(SsVK` zaux<7@F{*w^$lj$!;NtECsc`G0YISUzXA`Ug^nZ1PujUj@ap3x4gRZh2(Lio3(R(c z%B4NQ{yZE-SPRVZC78eceM4dSZ_YNw#BRa3ld($o#i^;9IB=MdjLh)a`&=bQ{Fo0k zjf;d)aX0ucIwQ(BUd^EAR{jsu<(~wreqT`V%ESAyzLY_#C_OSjRs90I`v^cZ*uJ4zAsMhiV+FW*3ZoZm2xF332RtBy}Ag4jp%Z zjWVk_!+^QwkN<7e`f}IiZhzarjP=!&EJgoTh%M-&=V^ePy0BHt$+vHNARP2Q($EN9 z7dX0h;(8JJY-rABm868OafIk$I{kH#4Fo_v*V!{8$7!aPp%h{5Lq}q5%Bg-*n}%P? zng9GA+c)mN)?RA~g^REwOvjkvPzhBd@pB4A6lsfZTyBZbRd%jafqoc3Y`NtiupFD|x0XV|p9);)%Q-5=62tJUAxokK*FSz9rJL>gPZ)Kk{?9gH5{VMbAEI}<3 ziw*1Nc9$vq-({&TX1?;}8G(&$y|!y}J{)t~oU`TVY)~C8e!u!~cTBNBbfwEO<6O(l zYqPHAYL)BEu7N#zrtmnPVUg-_9ZKht8{c_p7ze<^&E`s0bxE(dIlr) z$UDNtC(k_DJNtP0P&v|i@zVbrr^neDL{+#tC5*cNes~|hGnO=<^39=orarO8bmc?5 zFz4=^h}p*Hn`METM>6|165}_KoW7TA`@5U^G~}Z=UEiIIby|+|b;bQMjz~P)G1AAl z$!jY-J}KJ=lTB>Us;JGMu1}Ox%3A#}EI@dcZu>OX3C)FuGRlf+SL>l=vez~#>W95U zUMf{eJkk#=Ha;dV18|S|?Ve<9>M&aTEfBtI{N(*=O|x(HSxl!GJWFV_-!CtP)&Gl1 zl`~&LN(8ZuP#5#$ZK0fP-MMzXTX?y#C!%e>)kKUl34ty;x&12DDK74Y?jK~w;|ajO z#;7`Juxo2eDC?f)67JApexq)+b*A2Ep29sfu)|zE%3ow(>7LE@8{5ZWhgGz`4--pi zSIaiWO)gssD33jfnyEKDs?@CjZ@{Wr>vQ+z@w;CW9NnRjiw#pB>EQ9ke~wS8QIl|p zw{Lap4LxOjI1)Q56JNx~ac(2@(BWV~b0wdCXWT9>;?O0Y9}PCmoF%TG;dtfY{jxAg z<06Zky0M+tMaLGyV^Ee<>A<;{0LWRD|W`H;uC zP`@O^0v1;9SCtkoFiV8F^VRf7{3l)GSlw>rxx&cG{J;N83LwmXVUYiW5v#AbI*DN0 zD43q9_P;#8nvyT=5D`K1``z-fPQNF=?bs8_PfPYG_Y7Gdxh1_`@9Wdsc>`iXExb`! zJ*b_fs-@`(MZ#0nXceXAJAC^0#@!%ocJ}j}lP6x+Ys~eoUzm^;ue7iFrT^KjQ)E{b z>SZiBwxZtparpr!rg_Oe!NhQM(CF@rEj}-P{P+5G3B!9DRM5)^nzJv%>o-{X&v(2r zh4v~JY4<<&7VE0YnGV6Bh4XZI@g67)hKTv5Mg%DgpWx&t$($}hH75xkuKo_k^iHuqBzkF5d z>%POY4e+>N;JJHtFTQq{U=-%jS()!%lCkh%o78PN10~SN$W+tfGO4jTZGEJKkdM?< z&GcKQuJPr=8%r*Dw zB`IeAIwdjwI$O{sy%#|eat5XiQ^p7v#;+_f6c3#JPw^}vv|;>?FM?9X`@WP+(PE@b zE{#7fLT0f4a4IotjSr@tjwg0e%h9kskikykZSY!xpHOS+l4D)OyfImi%2&MTe&6aW zCXRhWej><7Q6zl-Y6b$(`y%`C5!nl2(=&)N%8sCO1^S;qynR!R+pu2f8GXTayCK1@ z2AP5H=}*`0|7tdmK=PWrQaMja5__DCe+T<=U*V*NDo<4%rOcG5Y;gxf&+?8WRJ@_l z%x1R{GGi#X(V6WtX$>)=H}iPfCH7oHaL#9^)LH#25%jWSeRs( zO_dPM5#rj;i8e~UC`1DwSA=>E?h38G4DlQ1EMyVU+668UsZ(x$p5r-4lyViy-}PE@ zVD3}HZ1*DWc>{CUoAo3Ln0v?GcJhw=f^zvqunnRyak+0m_|%;LTwO3RlUMh-Oh%sK z`QQ91s`eZl?^yYLp4=_z zr=$z&($~Z8>Fi4)K>)vKaD8zP$M3-2Tzooe^}oRnoq?7yy!$`V5}oAQ2!^2s<*W%80E4-uepakqTA^oFo0#bp z0WccI7U;I9D-=-zK14d!T+GR*8qfke51xaJ9vrk>b!W?=X$*!|LT{D2Ec8s208BK8 z1sCkjr<2*!1O>_iJk@!ZtHh@gU&q`i5A)E(#Gw#3{f=Jo69eRF@rgzZ>X`%7MGRnF zBcrMH!_ipCiygX+iMx%^*oBRUFIu4HUbMhs*r>&{v+o<;V3DE*^i7!SiI>d#^o9nj zIKnGKzy)vLr@zpH8F!|Wg$#WyGb^%eS%IABxL8r;vW&lu!w8p!gUhai=a~7kEB++A znvK`Hg=q4Ay4mSo!3j}4f9enTTP{6;3N)v`_$A`+_hflx+`CApg#s!LZI9H>U1%db zKm%oO9IW?&<-fS&?PhAO6GVJXSV z;A;+^6Tamy!;zl}rW*?8F+ku-&xlPa*-4z3gD!Lq)q0Nix3=vXWrbXU&NJQw5D^y= z0j`O@qeS&i*$ED=xvi$w)+Wobh*1v3`3;m6xC1)w_y&N=Fkql9!JIa);=AVnrc9sCUGOiG7a=;}-?vF9nb~yu{uZPAwMw_CLpfY)cI~nU&O+mi&Gw z3J^UGygGnbiE8QUdL9|L5c-cz17iKxkQjhj{2`F|#`G6or#9WYs|0eiFq$wY)9WEI zH=gXg&{#lZV?qAr#HEZlX=)SZz8xpYJxcIK{%c@t zF<^79Pj9*#*%_3nGKt}9WazDHXnsCchhNN?1&fjK<}!Ag{uR^f{(m?n9Zi$_>&GpM$#CdjeeM0xs)=f!|}Q z=5|-@;ak$sHB24iKWI4PGeD6EZwm`;Yi53`VvNtU=d;;3An)hRV#IKp^iS8f#fWbGE>@54^6EDwH^bQS#fX&!ij; z4fbcSOE7l&*E~m0FJ*KB*2qsqEvC){+(a(Y7Yb)?LXPfC$N^gBM_3zwfMl!D%Su!M zjb+V{aVCC&*yGcTv-H7V7>?+a2T7Il_{#Jb`HfXJ3@AF z4IF0!dWvls2Wh?f{bP1cQVaI9pwM=ku1G>&hhRvk=Ph6yaMy*(hVhxwL3TD9+F)bp zt6zp3rS*!AfXAnE9?bvM1{=F#=3AZcLiwpZ=lZ&=Ufwi? zLgoF~I=2T8#uGGjHf#IR@?>dxB!XBYR_fIT%J+OW(kvj=2i8U=@kZ70 zvPm&tZb(FMJ8@s`lf`iMs@v)ds@YjtOZFTzPw@xWpk2?p()>z$Lry^6ai9Nj)~?fp ztx@-LBZmtNa@geUM?UnjyiV{v^c%b(QnoMFA3r@XB%Cz)Wi7zpJ?ZDf@uBHn?~fm0 z!tp)m9~>}kmroGGjgbrSx493$lE@Fs2}do=o2MwsrQ$XkZKWX{qW#*_ z7rfTRZ+7?E|0NeZ-nH7E^xIwDIkXrE5Vl|oVa+Jcwzt+D6QsOebcsj$KJrnc!K*BH zva_Ndou3|c{$S)VueCd7abD!L&G`Emn_=G5L;+Kwu7pQ>d{Nu01XA&}aMS2i4rLkG z0-IASd&=#X;!}}W)YyKTvtz{V?)UeLRvYFHgQpM59Ewo~!qV6s)7D=^>o7XJx z)O?kXdg%}=W<01qIu|OV!>rHtinYUpJkppu<+o>^&;#}Bf;t}@gr2HDP8hN0TpZDg z9q&Gh-&uHQFjhYI(DSaW@X4V?m}b{jwL?`kdh_ACliOr{=Ikbo$_Q)`oe&+yYTJ+%f+W>p` zdC~Be_IAf>;yXx>euc~xVyDtYTGZkib@0H_b*L~~37r`)8sWS2@_bv;(zduT$phug z*Fm>#`Rx`eZtEG|SbcBZKT+v2QeJgaZ0F$n_sXE4pj1zh3%ja;45d=05I@>IK3T1AHibkY?J*Ms& z2m$&9cJ}thx4&1Oz_5J7GJs_?()R_~jUIGPJ<$456n!ZpGG>eGCMw?AdQqmkY^@v_ z&UiBn_tt|h_P9U$2j}kZVafXiK8HK@V;Iv0ry|QAtFJ63SprBEAWy!uZh(mEO$&Tb zXlajB;Q8oE{d17T`mt~K3(`KJO7Qy4XQBoM!;P0DJuVK&AaHoI&^Cq-wffb6a~qve zDsLTw@VkNGGj;OlhXdigvb+arJPt9c>K2ui* zAZj044j}@9tPV#-g*)5Dr(uY)=B1X~=xfh{56?po>aBNIZ2h%BIvDi2y}%o@PM@~( z=^{~AnUHo^GJnQuZvLhNVSgWr^U%eEgdo4x{rj}jp63^zXu=Rpwv zS@uWv#$Giu`lnP=dWegu2|hVDQ;Rnl>5fzg2)F5}Z;+xmNC$(F{*+y1e!7103~_I5%d&Hm^4?(vyy(Ya>2+vP*cldIJH z(!VMxQ@iL1AVBUK!9!lA{dquyb%eP*0cYg$+To>LYJRJRArQ}K#KeWp5x=df_v_mN ze~n1g{5PCa`uXd@)1CxBu$LVBz^0J!0TEl3p03egXJ_=Ds!?!zn{t7QCUsxF@h+48 zSvtB#TWXxhJV0Q42npOzOuDvH#iC3LBe|QOF4H7z?QXEEgf+NQ2rp)Rs*b7UoYr1MfK)?v;bNOd*S2=qyV_7$jvaIaYYVeaCR#6 zhtq0ZHbeX@K#weax1rw^0*C4o4)M8Vpni(7cK1F$sXK+WH{gCM515>T6fS*zcYZC2 zJh#nRrk8}MD?%hW7`H+2B&wmdL;XynHqV#QuEgJ+-v%(5vN zQ8M3~9u#W7=^xUJON6ZQXyvA_f~IbaE8=xZYGMyMgeagz6nlO*e;SSPk)~ht{qDvK zK%0E0N_6AzVLfr&cN*diIR!bk;4QnW$$4lhDp^kU3(~*kSuZ?f7kWAhSn0E%Ac^Bv z0@mXI&PlScFpks4z(bvB6Oxhz<*z=s?5|JO9^Ro8R9JarXT-0h#0rWoA-J+;P`Zj7 zes|+Ic5eSXR!LB;mpsVZR6IE^2^0Z+@TJa8OL!Ms-{TCa=4PuCMh|?3Bdszz*rOZZ zR{|nLC%1vx)B_2EhJgsn6KT{RdN-h@!M6zK9qqfEBF z+IqZ}D?U5{t92Qi#rn~*00ji3Kb^p?7E-*7Y?9HM`sQbML&s z*$rDKr*SpBB%MN-{SrtSwB69KLS$?a06hhXv{s3LFXI=hfY+{%f4{f=?v|~}2(tLw z9|x58Th{Q7~dZIezx0)Ic^ zz^AK692iFA%nu)z(I7!RwM%*HFq6p*Af1#R(}MD!sv&MH{zg@1%S(R2nVZwn|TY?o>+ZpY(e)-aBngB?$AXwMo&Ha&uZ{H*%U~e)n+^}?VI!;x$$~Za) zw$($aIYSn5SOD7^0z67g1*l=(!^oUbNyepsqEelWG{fA`+FGjy6&0lkU6bC@Qd>A1 zhul2(l;^}wLN3V$LaU?9HLt2Kq_rPvW&b@pew}wk*%TETfz;wNkL2waHoPrTC|Vo!_TRrz6ahT zkCzXc95HQn{hp6PxUfMK;~hy-dV94KKbx^+s9E!L?NvvLaXuZf%L~&AFgucxZZ}#4 z5hOrV0&C0(?Hm4EO|6)OI}xQV1T{CMGH041koF-6_Gh^Em_wQ)#_ps2@d^UyIzH(s z1+{6;&|wK3o*6MX3SBAgxWW;Eddd>=AQ|rmYWPO~0FxwCK~Zy>O6e03wZ@GN39(ZaqHWNINoPDE?Q~vC$-|P#Mu(ACpuX_~#;7EJB;T)Hqx?Sq5Xlbi&;{*%oLj_J`meUL zVPsJwG;MjKK;g3NgCNBw;6S?&H4_U<_n%V;gW!p=Z@DSOjvh}DYp)!)3sTdqyPCs_ z=Py@}D|}V$BBh*a$G%{jn~#64*ffCOAnp2U8KAHr;qmTLhD3hsG*{nEvHrlvHR~fT zF}6E3}Y%h4L^0r3G7<88_BhLASF?DOlkY(7$nqw?SK%E79dn=BXKCN zhRYcXdDEOe^|CaTKqn;u!qK_T{SbRnCmQU62AmrKHJU-i&|di>*Z$zwGP`t3DS75T zLF{hQANfQ)jv_B9H1L$z>FpxzY>Eoi1y-%rlVf2n=21&&YNl2}21IiiTk$pdr93ih6#ZRNOf5rvAE{$0Wo@aWqi1N5%WL^i)c ze$NoZF^Yg8f~3KxP!_-UGr)B6>V+5lYNM5fG=RP(BcAHnjd~$ze@gZNlTifDj&xzu zU67@T{&n!OMhtN3#X}|^ymx_C>pWI29T{=xlMK|SsAxwJ*VB$pinM|ytIU7VG6Q*q ztzqR>7+?#h5Z*{okew2>M$5&_%LKkZBze*&B@N;_1V<`||U}I&o+zK+d(Vkk9-rRJ3lqU-Xsb1(5 zJ)QB&rn_I5gj$Ab<1}`oD9?IM0JC&W;Q~y43 z4e*8M;BvCK{qI9Wk0Gp3<2qbe<*h0s#r8=RK8bXSada^CGmt#tfYA(tQiUf-yPilu zIk~DD8`aN1&i1X!+l2+Z3j$je5%wc~aBxQ)tZ*6NtQ)PXtG`Lsl%dOQMwxvQ0Qh1G zRNh*NPD#;eN6dJnoFR$jv;^lU8w7ci^74W=dHAa8_$O`Q)nFkro;TZ?YzhgcH`csN2ps{ySu;X&+p^N#dD{109P{y zOI_WvdM~Zk*52OnoqaD4LjTMIPmM>wn1y%HV?te)M#G95DfYvumj*p2KqqByXVxQKv6`iax~MI(iJzUiZ@v_Ic}a^uB20B!MH_viS~6JrzyE8FkG`b7cM+`?rm z509A$R#uk#__7xgYKSO;QSBY8MKHX!6{J*q@j`qju}2AAL_H>8U4o>r48uK$6!GGq!tV$;vc27JvYjWayPy=9h=L86~ z$;Ri{HAPg0%$cA-8tHJKvtMW;B33=$6VfMOh#bI5t-?i*eK6|p3f3J7bG}0c_x7Kc zbjg^R%C+v7>1BKTJrcX9j%EkL>_N@a)9v>)HYOJ*f=jKzrG7aVZs;(%m+E(m0)6lV zKwTI)kTs4XREQwWd+w5N70_IuGJa|{>Lr3T4xc&txN7Q^1RgjH9;nIIwl9O#YyOel zrf$WJw;*6z_O?xK1yiUX^$=t|fZL7<1#@}e9ES5VA(6D7QTxO)OGdEW}&{zrRN8P*H??)x)cL;ia5^W22z%}s}>q<7HqvtEf! zK0wswh{5X=t4OC(VReq1^DE9^Hu&+z#u`3I${00yS8u^HBg?YIs6Rfp77(PD`#y(q zBtH$6Ye5l65ykNFN6G@*ZD!aTOM_A>LV@^ta&RY*CU?HUxd!7L&VtHulN&SQAhD?_ zMbE4>Aqw`p)P7%?paBF=lp#FvPo4>z(k5(xKx*80JjM~+(kf5V9*W zXfHpRRh*KjT))76ngXmg`a3~kCLzJOaR%c{{)!W5Bu*cJqky>zyq9uA!_sMd&rMX3 z3fC9U50jINAZdF=Jt%#nNfbVtFxjvrNylbxP+JAliT?uJI)y?F$|-Sjl8J;XTS;ee zhMm5n0u<_ph~CgqY@3)%Q_@vS$kaODRcijIhjO~>d;IZYP*8*?xkt)mkm8;7&#-EG za)A`slp>kbV+khlw;$a>V6Gd)S}7SC4$)MVl#8<2){MG&oVPmE%7MeHUgcCAK>r0y^&RW8enkBoR00HX#q8twb|(q5Q{7+cDA zE@A07;SRBG^jraxV81fOqznJR|6`# z@?g~Tvi4{+H=QuG)T~|YdTZA?_T#8UNsHFRon2H*0MSoaN&2~9T<)v@F;J=HP<}f( zhNy{4DixL)UVER}ec~7yFG1vy_61yW$yocDTxCGpxeVP`PW}skEB(J(3;1KE6{vO- zbN%nem&Fjcjg{P}a8<*dQs?8htuyK?$Ysg94omVTO&ffN<%;5r&rgwG{uQz56GUtm zT@Q__x^#s6o86X5-;AC))~L3V&-wyNPso88^~&lonJWCwz7I3JJAYL#6XSnm4Pyi6A4Vc%cN$c;AWGxLls=2U$-Kz z<3oo8WS&>?_ih^(1Rc6_EF5J}|jTi;@bj-YrH^Nl(E@VpL zO!xL4JeR&Y=Y6rGJmO!4+d9w4_wj$bSL^}>x0f#^ZogSQS~Q^ziOEDq_wTsUf^jkZ zl8jOlTG@2&Tuunoja$wuNB4$JKI*q856)hg;fm=hi^((^oSEH!7k?|7B0@C2B3Z2n zKfbW(*?qH`|C{xok(PN)q4s!+;^!RoI6;FVml4ek?*9G{(f6eaFLGFk#1+rHyuD%w?&D|f2xbG#w z>e*>IPQD?quVj~ma`+C$yUQ(DZ`BxeXew1NUo<}KDEkmE-+wYD5SmyyCg6x)XgN*c z*Q>VYTga|OjQekuY-_jSwXY;~GA4bvhQZr5p zJvf}a{9qKL@@Xkq_FZLVR%!P97qW<)yuKxShq8kBZ3G9+)zY@G@RK>=((grd{nmN2 zm&PXd4RnwpfTBCKm5K-dG*Z9Nqx)QtC?2GUOURUy;$TZskTCIq8UMFKR`aG{RTV=+ zy?px{lrXl!5Od|(bC_g4gc$r`Fl_BXXQ?sfQ_WSNOg33(xLXY%l=94GMFZuU9c^Dc z)MEZ&AoJ$*2{wEFLa*>j_lZ+tx zZfdGv#mHLa<7cL)`E}f59Vf?4tHkS3sG#JJ`2Ep+D&D4UIZfByyMbRn{#`W?m@DF3`Y=`wYm z|A;3R0bMNn++18WjjWaxrl9#Qhv55D2Q z0y<+_!P|W5>-_>k+AqIxBfAOu{*J}4SiHME2wSc5^9|m9s}l=jNt!%(h4I))|KHCY zYp?B?LOt|Nr;rF|)DA1=6C|^`-Dz;RGcNT|0Er<bikyq*ffl3{+Z`KV)LD(wZS zg92A|2YQ32jvkdeB!Yx2o&ey0E)Br|3XDVz{<{yM)1r_=TbtGidI~Bdfv1A--9%#2 z?bEQZ0pIe5h6SqT_&g%ebb}@mTH8A=q`^;{LyTYGptHb=S~FR`;ltyhqPkT07B3Ww zo498FqW^=X8s{XtPRn1ddCh&MRrs1%SDE95b3d2lCC67+4;ZIp$QyNHhLmME$%BS! zZG^7wLSbXvtbGAsg`OQuMfAsRbg!JCfw{J#8NK-P}djrKF@3k6eo{zpc zG9n#bYHvV1b(YRk0aHu^N)wt_^8tkDCGyC@Z#FeGxeGH%Au(4$VpfDuS-G9LMnk<* z8);MjuTFl5cn^VPK^MlnZXe+bjf%{@>Qmq28Ou|Z_sbLVvo_F|y87h<_kb%weP?f2 z(A0FJlI1cl<_vgXCCFerAsW=cd&yz>Pz9i*S0N0fD$&87o6Mull5jMg;4)PMjdeIq^*7mVbj5j-~zl{Wh6scY{ zx4A5*g>nGRH<*=|EjA7l)ti;v{T(=;`fy4V=)nLYPtrP*vBAHhqzn)676kj=-b@x$ z1a~8O#p>A^tG<5tK~r~N0I>&Qi-Yw|sh$sRP`2b+fH{Ob-un?J9u}cxcsWB2=8It( zTAztP3lK8K_6GN8sC@+boSl?FL2MYP@ZA8Y!8`)Y)RnEb0urKYat*%-dQu2wE#(;N zzkOIWFdw>CEP`DoQddh>&VY*I81NaGmep06`zQzP0ZK?_W&P*I$;p(X#zIEtmv7}R z_l(E)1`s1fA+%{jYwApd>?%6uuYB(wvE)q@hZ|d+2>s$X5b(t05O_^k#OjK6%oQk% zXmI<-+KD5yi_);VNbnPQ8=w2&9eDN0)Y2k2CNl!cVOcUWWGecb%379sHE9^8l4pawfitNKz5wCD>JS zk@5b!ey|EYAiv_K@Tb$Mj{Q|W<{C-6#t)~{AuQake>m5Tz~G1rFpwtPiF2wtcJhTv z3=k#iBn=LB(NrvtTtOvKH+m@#EQX_=(f|v42$&}O56Sn+m|m8qD14a++lprocncwm z6OH2f;=C7798`~D>b)Opa-M=T74%bu*!Cn{@iB4SBBS%Ui7`#sdn)XAjUFQo0+}_T zlTMIwDE}8JV&fG~fb*RGp?|ik&Oc%jRT6`PUd42MJP;XX8|f$T8c%2}jk|9cm$D+6 zG5~~TjYF9_ZmWNrfHszJ7e|(E-6{ZmVX#Kn?8yAQ!Q@zNwfC5tc!n84gLZy>U%CfA z%S=at&T_OX*clxEptmZ<{?dgPWadFv+C}U`x;m)~VH4HnZN|;nfpko)pjcTTP_%w% zPGlGMbr)0 zQHS%^ucoFc(BP$GCMam^xam=%is>a@E1&t<34YECj8zq^NrueEVO#@gi6fB{9qxuJzOq!Pp#`?=YLwofI<}Y0_bN~ zNeU9t+dhz%K6BAIpxQC*uT~we^-KKvHdk>_)u!|;#tz#=b0UJw9X!xjz#@NTa0VZPD8^ zhz;z_)C-V^eD|-USLeL-|LBEdgx^^`Ik2_)LNyhNt$k#$1J>JJ3wRl{Jz+%LpuY8p zuKFfM7+QPZmI=D60vp7VuNZ1*T(KG$2s0JTSjLmXyfk=H&vPT)L6W>v-_~{k(FVF1 z`Ec!l;h8`LU1zAV;9~o=jlLMVPN6>()O^?g8v`QUu-pU?PIO%zD|{i!CW} zzL7ir>8dOvy1VNCgY|Gn_U?v+&W4w7SP;iS#~h*}C_IAZ$nMe4;M*B}vPb%64{yPI z;0hR{G}RU$2~h3k$4d8ecfQ8KMIW*S_Vvj(S9Z-%axN`Jw6QuK!761fq*bMEurx-f z2XP^gmq^#F`?+zQB)cp~@-8NnH_S z(b4hHfOB;+DF2X8FeKFIz^4+t2%kzYTm18>gaIQIPjCzDwfDZv7e4PF{PUrA>JOyf z3v|SGEQeZfQ^e?gRz`1t0Li1WgSfiytez12d;CELOK3+#%dTj3@}A#oi~G{SvE23S zRb6urPuzMnV!0Xe2Ez>VV(m8?;%BcsH>xf&%yV^j)mZ31Tj=VanU(EyFLy+kieGKU)LU;Z}cvw2Ch_pATTIPuF9h) z<*0?W1o?ivMn?baf8&Jb@2N;srV?7A)VA)tbZJ*cmx0BSQhVIU^q;OLmNd8Ov9VDu z;~jK=q~#M)|LkK+@6;FSgl{Swt%8px44mGTy=6i2zeJ6wmb-UW&#Ji_sEV=Z7=WMz zb{TvSjIF zwan^`b1of4Iwmz$5B_5N4^4}GM@$iEp?z7x^~@PnQ?3q*FX_c2zcGg&kqq3z^XzxP{3%dyFM~F(^jV81BdFp0mP?xV^tOplUo> z?ZnhX;Gc7+ST_AbqR+)KmV+khH}MTUw8utOo8wiOzz+cyGzNpo>HjJV13wDQ1peUV zT}ld0@G4!9H!KIv>^$=N+3By}4Y^9ba6#K#12gWiq6+ILh$ug;Vzp8H*V=XNLZ|m9 zw6JrxVx&vxSgHyo#_Sh74g4|Bzy@2Rj5Z8Q*S~gEUE|j@7&lO?7>;~vrygKr?UBG6 zg30;vRW`k(z2YP5h3M9ziokeZfRe<{Y-rZu!`h@hZ@(_HrNkAX%*u$hwNBIHzM)^y zx7ax9M5-89$|)~xD?GDY3yi%CFgeb}vatCQI^~tF>v@xX0r^II;RV0+0&4V5Zm#SH zEg%QAr%tVopNZQ?sebk}c>7@b1`H@NyJB)QC5Aq%H3{W0V%1pb}r z@%L)(4d%ucCyW2wH-BE3y&k|lJuDopCu#i*vC!ximXrB8^vTVO2-Vm3$3iMz1`D0a zI|$O{^(Z7rSk!vcV{&%3$Y@cCO4(|k4IokLRgcG~FSKv%SeWsS%5^68SY-FLveU)e zmF)|>N{dl#eXP#|?bH6pDnbaq8r5#ZwhnM7D0uNj#q&)5$3mOkCXv}iAdOuEg8yS} z(_iCe+n*J}_sfx%_x>FfXl_}r-y^_Jt0quAn!1L{6Dn& ze|+ixFTZ@IM9Q9CX+K$^n$sy}LA^;la~nvQ_LOJcIUjN9VhG0My!rIcBkEC40OsV` zTx{9xCBP7zd?bNn%QNKb53-s;6+sv(%uLKe`x68*5L^OOY;y8Q1kBYY(-fIS)!S`v z3QoTeZx{w1hSSRnFsaCXx|O-)6r_y+XCH5-D9$x;=tx{j1d?WEY-jNn49EA+)0_O> zYILClWK$PbhPu&0tD?7IFgP;>XF9p5&NuoO${wOXKB<&#N7u8*Q0O2TXasa{GIfz! zFPs1|+TbPz?2iV%`5c7Ns5ojOFW~n<8}jy7>j`s#8&EYqa2Uu@@7p`AuQMYtQ=@}) z-(FFr2DQOP1A`9mK4 z&&UV*3I-30a8@A}!|T3(^7e+o6{4*T2)J8-ll(zH^vwDNfUWo29My79YR?GyMLNV5?J zV@Un5^k@$a1zZW_Wta~G|)aWQEFPX zH^;26xm(feo?~|pps9}?Xu#J?en3Qynj41+BvCQtwzr$sS!It1nBMGyrW#esAp|$T zN$9jGOTTq~tf%T{s%x9+wCm+rR^gB&!98Hli^Z5v%ySF>N4)sYSpzTspTXq+@+F9c zLlX}U?jY_cjTmQ}*q;x*fA6H*HkIrK3$CzM%~!l5vKO6tTnC(G5v|igqpnhL;^+<` z-yrB$=7beeRo-(ysOuf(ez-JrmE2JttKMf*wVCp?b$Rf8aClR)s@Sebr>M?(vlQ21 zShm2WohsVV&xj0=*V6!U|RE z07K@>S%_$H7~LxocTuz^>ijBt7_~q?uJWqRZMUxH2G4|wM3N&Zx}d23q;DR5phl6& zts(8^Z#p|tpv!hi7VvJfOv^xOB3{yM7aAN~lRQ0g)UE2@Zk>yK_gYo8t=ZT*0h7bH z9SuR;6ckF5>L^jqCTJ3Yj6R`L#k5Ctm`v}l4V@qD8yzf&_Vo~+=yrW?nw;Dwbv5kOPoR!zt2U*{oJSc#be(1Q%9k zcIzxI+B79CKm+m(*iau_@c&VPYTS9RemMR6`s85Ahiu5PPd%H#m(3H2P07nw71lCE zmR^$K+9lQ3Z~DEp(f{T`Lu3XKz0z2UbGLv!Sa(mA(pjzd$8-i0(+(!4alou`?t*BD zY$3F`aHqDVC;Fk^JVMjoP^%~5r0H?s)i(b#y0A7+nW2||Jx4z^_eniR=MK(mt@P+Wpi_A;UvE zK~Hq#s;YXn@p#-W(foR&3zxEjIDhTe{2~lgZt%C`q6A;wJp!TvbUv|(e|z-hcJ0Ev zkproXZ&egdzz315V7tumW`4~ZH$IcR z>LK0=AoI2w?^xh(@bonkPg;A{gBsk_*0c=W*f4!%Y+JOx!7i%`>r?BMRBaKkQqp1q z6j6obzV9rww5&dM=phik;6%(nbJ)Epk^5PNl0Xbav06e7|=luw4tZ zd9Md!yr1J9s-`fL3wbJ|dZ0}zfH$|%t7SJuec_~FjQKz5?62g>sgdEz|6Lg$fT(!F#8lKW2(-lT?AOUhLeF&?pT1230E zuU+1PU2;E#&R6$c1L`zQ8do;zccP3c4VVj@X16|Fd-`V_aK08kP4cKjDqQg?D7{qW93~J*5Z2in9cfEWVZ@U1oo@?_r5N?8T9wU z?Y9wV>&HvCS{}>7-oJf+U{JHM$bl?>^~1ZihGe*29pw6YsOH>icRYbJcwu zsC@}Q`s&ODd*flN0RMHUS}~Z#2MmC|+Eucr1aKK`-CZhzJM}u<`##$~2#b9?zB5%= zI8vd$Kk)mvbEav>CLhm!h>;T83l$J8pk-EI9=8Qc97Q65N4i^2?5zjOWm z0M<`3V+imEETeLflRX~p_YB^Oze=qoJN6) z<60KqY{un)x8XR}E6XxSJ2hC}HWOee&IBE#rYrd9l|$7R;0&%eX*^1e;i8>#YV3?$ zu|go3wAsU#GcPwzMw9;3lF1?xc@h$8du2Q7jr1`UHQGE9^#5@HBCp`S% zg=p>eZnF);n*TB#A>n?5Ugbu~rxnL6LC3WSIpltxKccOCVPo2k{x5}gD8|sBC-Aav z;ymVw#=xk=xbu!907YHJ%yhoUDVooUDI7BgS1Xtr+@a;@9p>MZT~$IQlBeFJb8Q}> zz1HSGMQYxEIPdqpcTg+jnwut3rK|p#?wu3f}D)#kM~W)Vnt zu${YlBKG&$|A_;f>{@}^T5eNwX3AzfTx}K-H^U4t+H5w>vVMCtffJ)W(Hd|EF2eCbL#JKo&Q|?pP|6gPN}`j zA`mMmd?3a3VcJdq%rQbouX247x5Jz2cjVn>p!9}2`}GZiL`p+5fX7PW=#kcN|B|v9 zNBZh_0{8+(E>0Z=G#2F@e=g4YBWm47P|{!W?wyOv*`oos&kl+0b$~wTSRL3>B>8YKD=X27 z7nGT7iXjG50>-B1vLWB*Ybw`^>90~%M_&TV=H|Tyg*w-!O~hZ_W@Nse==qGu1zZ^( z>~5w*;<5;&PLk}gvXoSe?SrK3FSYxv-*(Vs_YP`D3UX%c91(liuob{0d9C6XIl-DE z^jrXa6L!SHz7!J5)EXUa&2=N!$PWoGYj=!RvSJd!sxNZdAk9(61&Ov0-QVu!wdsDa2-X(@ly?MF{Z}nFzpO@%*jRMTl7ID9*?|v!z_RP z9SzStKR=;F9h0M72wjy>#=*e@HhQJlx?#t9OIj*983iv+fzrL)^-$mDa1O*f3U<)Y|N1B|GX3fm&1HpJ@79LoDKF*H+jbw)l@XNaAdDL; zOp_};^YC2;{j;@P#D-z~Kf%6()4SN&S}t_OanR7*`EM{lAX{i<-n;ugx9EzU>hFh=%%=VX%(TDpMRmK zSSA+t!?UYj0|_O07lYy5ujQ_^>vi(}KI`k}Pvk;<{_x6-6SVFLDg@c$an1jT@#D7r zVs&3n?&_wM?i(kkmTGVS&zfz1Opr9HN98@frPnzSjhMeyWW*$=huhLZj2Xl`=@PTS^ROJ+Dk7RU)%rzBWQ#gi2aohZ!WA~72^!J5iAmGjc% zdZ5{9upQ*M&~%ms_w5nFXW5OVr_O7|xyw#iio!4izQ{$p&C|sii?RPskoy>n;Bh!@ za*Vd-J6D&({+g-!-;xr{&JFCa0*2bx`CRE*dxu@+Yr}2l_GYY`pDBC0Pds2B-m^El zcl8rWf-yv(l}EN_K{P?1V2`VQ+AeKHaK7gtZrP5Ny(X}o4Un4No%5Nl|Iy3#sA2TN z7M0im^Uo0|mK7+RB=-|>!7Sfom|%U5nh2NwAyeb!-_(@WQIxB|gMJ11uQd1V;l1^& z%5#k3!EHfeZE9`J%cYu{BF`+(4svh}7*bOX&O;7ky9K5U9L zT(>Q(S-FY&37N9*JQ%NMYiLKlgmnfHe|c1DRw;6@Z@o&iXD<8M>otz#(JHvx5ks@6 z4Q4<%Ayw{MMVChpTOSY83z-53k>49C?(L$MphHhT2Jf&X-8-1T2Xkghj9v$=8 z-5}dtt6}Rn(&b9jwlr`_F=MPl|0W!Pe67uXQ^4!wjD?A5T^D6X19%)ce9X4~;|BHO zN5?>ppVN%UtgTde7Q~g6ci6#rAfBwYlhTk>0&TVFP$z}};X5JMj$?3V_rftrZ^adZ z!S1k9F4N)Og&mwqUkwBarSDy5lp}6S71$T@8!uWs!e+bF>6~CEDqZ9()05|Owr> z4-xOst6S?C+_ERgg+PDA-_XS`!BP1%eHuU_=~Puc^L4TcoI=;#uJd-Mj8(Vdz^*R= zm}imRD*{p4id`QjAK!B0B->&Q(oVJXf=9(S&b0?cM=v{~1gSml<_09QhY`~HyVBi| zLt~s+&^m=oVjw=hOoJ~Ozf12^iyjEn6Y1peK+vIy)o+S*fAIR)=q``?4$EMvyH?CA zl_%M8_Z7{|M+R}?0{C-TR@JQ4!-74zsaEO(aDX1G~3cT&bjf!wL zK;pA`hO5Keb!kTY@^xKw zzB?8gLHkrt%%o+zf*$@lnwFbsm&ydoOuXOZ?tI|U;e^KRS3DZa(<-9MU40HPQvSIa zqnYpeW>eS3?SjdcrH25(!DxYW7#bIVdx@?seib72=8$LU*Z92u<5QI^^-7<)Ybkd} z&m_Snq>(5We$*+J_oZXca80%TGaT)+_dPkW6 zM9&*>AUUF&a&)}-%S8tH`E2ly7(nc`;lHz8(ZGt@Cxaem`QM*Mxg4&Uo0Gks`$2O@ z8P}Hid_PvQiYnsHU`OV2r-L8gni>uOm-QA+T*|X*fS}!%=4g*;@V;2d0{~z`G z4IB8}UkiZke_dxW9FKTC9sxQ`n)mW$xKjNN9bmw%wrGjkT1vjl7DrVi0yMt%V`=3E za1*P8dA5jX{&kq;i^2J&?j#Rm|I@VB8}+9f^9Yj`?Xee6v&rsRTKIdH=J8Y%XpdSV z3DNVAKj$8)W1%KHbes{W2g5lQZ4ib5ux%}n7)O?>ix9+yDXl`W5j0Q~o^%(2hig|* z^-4T-6=H&_iR14m(Io*Pu~HHOgO2pDbOkU)%=vsff>H!R=I&t^w8D!(L}h-V$W*A! zuhz3XE)R8~E4LmlYS`m{SBXNkQ z=Tg#myb@{dEnn}7Qogon%5+%XZ-VFHuW1!=&%Ycrvpfn{j*qOSYXWad> zA6((Jdt7^cY)F3X&zA;R#X1E)@7lE{9Q%xgaP#L&HPL8}?5cc;vA&7N4KjJFrK*Bo zjOgTj&u$Bz73Ju~FikmQ8@@k#srB&8BlAGc z{y6E-4C^92X@iV~!Z2%|B$#Mw?#fS>c$LQ--kNeJ%x`ondwaBQO{buaM!7oke}iP_ zIgHZhUW8suSNUc5h18h%9o607HjSVv&s$jA%e@8_#d0rli@dNNtu(Kw$R(#qV#5Mc zUzPhwStM8aMd8Qh3TY{uo@1Oi?JVgQP0Id;e0x;;+rq`e+>y^WBsl0)GFWc&W-*TG z^Jw6{g=>{Y{nBn_58m_3z9O{e@whybfmr=scJ+>R-bAat`~8&R#1+MGxW)sSVN_E^ zUv5AhxY@1kaiqt=&-63wa<6BP^iu?_Kb6b%v1qkVuA@C!G|*o_wKopi@0%jP?D&@K zg|W`}4EZcnP>+6bgI3`2&4ok8V2YNzVg0IVbTu@c!X#PR=OMpUZh4t88icKHzdTdq z8NcE2pnglvJ#_cHHuA*bmH+i#CO`~QzU{8uAxx6XFl}As-4nTbTB_--l|vFa2N!1F z?Y7PIA>_D(nMpWG^xvBF6!_DBVeV!2mOrNLVL^(Gq}Pgx2jB5ka+cg+PZ|EIvZ#8! z`jn#Z6I`q{6H)&a!(lAe_cWnfpgY+4rDfUXZ>vyKONnvumNU;?kKooMg`~S*FjtpX z{H3nUaCfOEzu`!a*L+T_e#__iR`0!qk0~*U@?5E0!1}F$=NODqZYBYDgkGzEkYjv7 zq?g7%_rj9t1R22uV2E9_k^Bj|4om}HCksm#SX=QwPr*q4)D5Lk;{$iYh&ac9_F_K1 zzAM;|G|)JZJ;zMliNe)D8h;?kQ-qUzG3`X4AMOc*+k+zFukn?vx6)sN^*)RMZMe$d zOpe6>z48O_shkOcSFPiu0En@R*SF`JixelkQ!x2peRMy7_V9`AuvTZQhet$%wfWZ~ zE33Z}jEzMKqr;-Tq=qfMs!uJHrWYXcQ7vc~f^Bh~v?a_$69dOnvqM2y!J z$kK+7BloqtO02HE&-q3|Lc)5_^z;$U&vNUUsz|RFZ*q~in#gtAk*|MIZ5A~wVb_`n zECd}O$cfEIPn!QGVU;D^Eexg`e2VSntzCl3{{D>P0!xLflVz`)H@zi>ytz~_dM~bV zZ8$B4NU)Zb7j3qn5=5rm%;4n(+H^1f>4e=q23RMY*(QMtHca{`$IV=i78U+Z)V`dI z>fn4s>U~shc(l`GMHgzpd^&VfKd3$-p=acIxlKJh9XNTqXWvy4?d;T2L6_l`u0GGe z3G2ia+l}$TMqpn~(pPvR*@mUwQbW%~&}<=^%#=FBhL!JJFFXSKd|VErid^+;K_V*# zr&j=NRwhjg_a|BkTy9PtwsWXotKa%wA`P8jCDMGZQffMP8fdV0ek6h{W@7h&hQDRb zUhr>voSSrdSKu?7G>kC{q@Ae^gH2bqv86AZLk12W$VyXaFNLPXp%x+dWFJN#c{7|lqKg)(s(NR^dn~77@ zy%Me6x{vxv*S8sxl@!dxKYDd}5_WgoqC$z*-}Dk34EH0Nzt%cCiJ1I%lNF?3X(zHn z4=Dl8t(r=8&3q`t_2s9J=qT@qe zz?v!Qylx(`X=|guWj8Qt?uo|{F^v{-sMve0o2Y1Tmw!{1n&{6ZT}B;}JP!~gh>%tb zItWP1%bULf(#ki8h91F2Xo!ZALatTugUlevP6n%j6`Q+ekHV_;>1MIm#V1N;X(AZR znJir;xR(w$68r{kiK*GCqb&Q|io}4;q#ZI#WeViQ+2lEm`~sKdp8f{63@lvs;Pz1L zSxCSKPyw*;TpS`6eb|R1TBlEyp=q*pcQ;a{FI{-iUVWueWp*o%jqgoO%c2|0p__i2 z9`yV!+FkZ?wYpCi6;3}q{s$KzPQzK;pLrI zuZnK~l6>lJ*`os6wIQdTGTs=Br#dPD`B4sBn64SG70eFEU14@gyuBuFG}S$79I$#* z?uWF4px5x^d!C?IyE57vf)YH8T58zbT-*A90q;%$E)>?+(XY#Cb#2*IKBp=xaGjKm| z4BBwWiWQOtZy!^S)9R-QzOJn@h6pER(XUsTdDP*Osb_BZBRrLJPqxpqd`P!w4YgV< zDz5$pi)Kd`zr9fVM1zJ!?7cqXDu2fCTr9R(%@l7ZZXPRHdBV6kRY0{gZmW|gp`L`D z*XWh@T;cUFRFrF#kN4O|M7nX-rt0`ZvOPuMppw_C)ea_OZQ(DRpduILj~~>JlFVzp zszM?u#StsK%Jo$vP!1CygAfBY7f`NLh0`GKKq_1vDQjD{Ts z-bh;if=$$55us>pAr-%#8Jhf5T&Ju?YtK{@V z%S2m!i;Ks6*wWtwgZ>3*CHi81xWjNBAZ1va{Mr3v<-mJ7lrKfvYqb!~OSIRZ&h7O8 zY(>(;*#x)ZX+i?}09;$Or$PoY606`FB9dfU>o7UwkG@CSq$+8Hf(9@dszmCN-u)mj}e@DiS|d?OD(T>yY6}2Mvk{evK$%O3H(V zSC!Ukpf!G2@kG7^SIr#6Gww@@R35TFL<2gldF-){jA(zfQ*Q3nv@jB$=P ztJmVcTpv0tu0&XmUj*ZL56^FlBy?`C=22TGNFFynK{^es70K)|X^1I-W%rAVVSSII zi(C!rGd7?Cml&b2U$ODE`TZl&v$Qs0tE0D_j?dt%tdC&n4>Sf3Li1FEv`dR4YgdU4!TsFI!@(+$6ej4=t(6AZiM;rD zDM5Pv4bg;Tvot|zd?V>JO_Yz&5ol-cqU+DSyrx$GM&7rE#VfqPeL=B>4A`KzZN;1d zXLNxgr_mD0Bl8MeKJbC6ZS=@Qbi$eZe&`b&-1UZbOpbh+29b?u?QsS+B8U`Jqm+Kc zc~bP6M!nlJk42%q?|HS!7`KW^#F8Vq-NDLLg8Ywex?&g7e3`&@`!)+Vu)sdYMm6}4 zVraYB4i-vql(5;>U?Hwp?l8Grg>z4~?vkjfHeym*8okGye5nsTwUDKT@DlGa0J}ik z=x~hH*w@#idDw@VC-gDhqO)eu>O^5YwBv7y}JXWcO{aIIMUPY z6WgVLYA_;{tndz+|5GOx9Jz!xMJ3<3OkR=vr{pq6g8J_y1l}hlFn|geK*>c zuCMgzv-6MQEpvB8z%3M4UNfs$)Dck`xaw z@bL;wf}B#2=f@MzrDk$i0#RK=jLn2=$D0AS3Xt#SK|1-8kv!ARZ?Jmb>i^%e2gHwS zO_N~U=U@);7WEnh^JgOTlc#&V?7azM-9>x&c%uf=&BB-&D%5OdxZCP_i>IvPc*W<~ z72cIE9iNBT8@qrKmfNd5X35)`|2?DV=SioQQ29gErt@`khIT#L^z{QYfMy{Q-2-bw z7ys0;?>L0I;E{j%bK#p)B@k7r!AUk6${)b$(08j3hA4=;mrb7R$JEo4uPiL0P5#uJ(5>0B!7yeP$jD51_tNd{IrmLg3FCzy&7v;KV{%w6eJj@xV zOjP@$p`F(Mwhur<>PR54QPe{6VZM1*c^IvgbptP2fnVwR0#a*Z{j}C#=AS^qFR|Yu^xa};QZr{ea&-cnyGEhFG$|aE@`g4eL zWo#UJtxAlxYM!z9wKrhPvy_ z%j*RV0&S>&w8h3(j2BENs~4O=MC%v1-&@L$mQY&i&>%(YD*irD1L%XYAk#kcsp-^> zmFq04)*jhcoSZbcMh+scRMgEAjVB8{xE?R5mYH_(%WkYmb!|GBg>E0 zfb3oM3Co!B&&g!wq9xoLsGr_u1q)go_==U6m#Z4;1{W>MbdO#6Jdh83E&0^9b4MVp zyX3JZeE+4;t5qL%H0gt*CrksCzF5ntCQOOM@sJObI<)T=?B49FrCLhO^BGX!rJo=midPkP`bJa%`T!O~s#1 z*)V&BKj1Ni9MI#Q?;UahoSl7>t`XbtN1#wJ{R=2B@FCvvgl945OPSyc!vH72aww12 z6vw}WK&PxGX8HMyg%==u_xB|wKp7pSXCzJmHN~gH3MxOUsT%JUjyr!{;l-AhA-FIz zR?u?`{N6UU`w1crl=`KA*#*@}1g^}9*RDKD%_bOm5ck6rTS}wmjCWaHM41L^5mMlU zEsZT%N?zZ`iOQi0^=m3J%=UzW7-lQzO{4havi{@|m0##b?(LU?4GI(&k=}2%yW=(C zNUI@iHF7i!I9Kpil?6>&eolEj{Oi!IQ#EZIKHz?wpP>3#-FhkD^bBvdC0n((`3b+V zHf!7`y%h_;SF z5+2M;I{BEVTxrodkI;e2W=*;-$)h3kL1iBYd3%=n3$ao%V>=wCIldfPRkhg}9WJ^i zU19Z}*!@x#3ubP`3g;kidOQx^ysZ_G`XKH%hY}Zek+UMv669NbHrIg&DW4*EG2GU--A)MoH5%XOTXfw`M$ zR)7j1_cNI#&Qe@44ukR5rQ`9#O5F9hyy;Coy1iJ#F$Zj%MOj`|uO|*&c_6>y8xO@V zT0RKa2>{Xg`HmYnCrwV{Ap~Dt}VNwivJXG||*ef)kSf6`p>G2q^ zOKT7~W8qhlfJJaKQ1Eqy9bYz2A=-jK*G@mfOqeuaI?1a1m}iWkUvk&=###8x%9$7L zV!^@cjVl|d_9ruOKRMYsK8VRZ*Ry9hmi)&I5(K%On9#$kt0aqY-RcTYSF8AU z8ES6mYY%1PM2MS?>f-sBLs(%S2tPKC^l`u#2|=ti`DB`=K|~6wB9B!DbQB&T8aO`G zc(_MPnt-0P5DKOrH)q|ZCea7lns_q{_~pbwN+>EB^_^PT>{j}Bu-C9BnpmXi!cn52 zdN=Vq15k)(15$)J_rc|8XTUQC2bPvEx1_%4r z?GP0YFiE1AvGqrsg@XM2zh6HmU#3KRUYVa!Ur*zB-4?L53{@+qz>A5?`N%Q{O7?0O z7uz9tsiyMMO^U9PZd6MIsDAVEud(E_J1sZV0xq>aOMffCT?Z{v00-J~<~$-WBl z`jMhAazFtrre%%?1aK11Os`OvfZj{ao&*~sDdQ&^i@*+Chmq|u%cdOGTJR{2{NlJf zd+3a>g-7+%0n)%sf^Mbsab9uRlBhKs;UE3RvxRiz` zU1L``eaZYdN}ujsN9hrjkz#kRf43V8QO?>+!HqOkeDv~^k;cxE0aoKDOla@$nHd;@ z6V8KQ)5L$2=hUdR0y$pAhO7V~|4%MSE4;^V3mg*7N!fWI6TKs%PM3v+Sv@yE=Du)5 z7zibO&-x4yFXNn83SBkT59KHPwCPr%T$(=pleZ%J2N;k;5UMQ>5= zYK)i6MX=D@F^|CUK*_rw2m{COsIB0!H6TpER}+YhRhS*Xmj2<0>h}d`>l@Z@fEUen zW71JdpIJ#wxBxZAt)hJ%5~Q$XGK0uTFvxQ93)la#=BF%Em#t+No@ej z7jGo4c<;;eBIM~pTO_fdNE4o8q=Y_3pGpU!) z3h2_QIBJM!PNElWFdb;ExVyMzqCZ+|eD9 z{plEO1@0XV*ci-RuQt}>cI?1PbE;#d?9Fgfolt`1%5|EhC+RrwND~I$885V6hdZjn zXf9h+42eTu5w#CaPHNQ~i7SJJY3ownsvC`^vX*Sqq31;%lC~-g9d`0aDSSX7{-Oeq z`Zb4-Vk0ss{J0Xy*sVZ8my+3Y5&V{yg=^=nYz$_`XnOO)3RY~Dw4(P>^ff2y20jP0 z^YrOV0)}4FhdfMLC>Y~|CUSkiQ&CQFDi8HEG#rawc z6z;!hTDOQ~(st$K;qAl~PGF|G;2KEQ6~LqOI@PCB+|9FCM#n<_>rEZI;v1x2TTAv_ z2Xuf&rwl*Bk)D#h$KXY3)@^Y)r@3=9Gk1C$D421059)>VGG;!7BZcrYlckQDAe-R? zjKqI}Tf~XJNfw`X3=O(Xa!_<2 z5ZCNmg=UG=FWF}qBPAoqT8nuZqY_35YZC|4)gKUGa+@#l~s zNo#i%PShH+EUP@{++l2IFJ2lgVm0C@LlT;k1hUu__)uX6SG`rC%3z@*`RiE}9{*8- zsC=5H?MBIQ#HF%wUmd{AN2_O)?gN0>lv14EI}Hd1EPI2pif&|dF@Ai?`0+iZ`0#rl zMnq}oQK zF2uq?&6@*|m>Qt?V(~QgS1i^WZ2~@S|+e zZIIpwoS9<3J8e;c#NA5|(7L0na8b*A4rZL$H5=Fj6exi)19|KtN~Y+#mm&3C$_O^i zK|-Y^cE&6CF3=~z?Du}gWvkwEk}LEWx{8uw>2(#mmt|`c!W^rxVvHNnK*`LV7E?vK z{nQZ4oqHsU_Ygt6htU1Yl0Hd0>4~Z?VwX>*lJ^l9-HK2@T&T7V`~dhswjwd-Y4~#s zSsMdoX;(NB@PAtZit7-FDpx!!`nfq=hVs=f%@Q~Cn{G+35=SDYn9_V z&X)KEzd)}VP8uIzCx`tS0t|gn%o}bjrYX-FIq@!s#@kgmpGaQ1s*sx%_e-|;XNI@X zDNZg1#|qph?-I>*X);*}wv6C(V{L!d6@Siw6AtPip=yI$An-!YSi`>P{i-kxbRtK` zMMu5V`&*F^-<|wNH2f{(6$}=0oa^j$0C3n(R=Ui-MRIJ1l?Q#;`h=&u5jdj!ACRP7kR7mhiJ-N z44BaZX_y`JH4sEe5${srprS5NBbQPu@b4blw8J6!hD0I5&844l(_c*k>#l>M zXuU7;O2<^a$-K|T=byZNB`P_q(p7@ZnIo2!Au+rIV3w~W4;O!bCyTSI{h5Nnb^aY) z53Z|A@Pz(VGq5cp70moN?BkEyh*e~QncqAq%78!U8e4fR`vu0x_pBAqtLs)QD*!bC zGrRR{x~L%Myri{zqVlK^f_&AS)zhahvT@wNX4_Ypk*AJzRgs8~_*E04Y4i6c?~OP; z5%zjS6pY4^q+)*$RGw6FGnj zh($Nya#A;oMoT#~AiuL^3IoKUpMYZpni*e^1kzdLrJyFvq?2W#IrGNT&m<`p|2;j5 zYU$I>#U%0zj5(^}f`h@$LJ+>1K*t|v^^K)*7aermSu`~jDbWeL1ucd!6aMt*>I=U4 zuzM6jR@gj~8A8B5F*4#}465Jh+u~erq-Nv(cdpbH?^L^8o2x}|R6|Bm!p8w)>a@F* zNbmb6<*3AGBDr%BXdB}DSXf8NV-6MS)Bp&yHkDCa^j!U{y1KsWzG&D8rKUqm%Si!M1u1RxI)K9c$~mX#uF+)2Vs~%|VE)fkM_^#@k_MkZrJe=Y9KF49%{XN3Jb1ZW{AY zPQptLAR$?8$b+x>6&iYc#9YNJ2V(7^l>d6=QVYLEi^8Ci9Q!jC$W^FQxbt-dI>PAN z_12_**c)xtBy4#gGbQ&)DhY@>0X~p`@WPpCtv#9rY zRAHj@{nG^`-;`X9Sn3R*NByQeJw%(Pk$#o_vO>>+SCG+!KSVhG_-^)9S*+bj#QWj2 zQhEE~e1k@mE@aQvM+vniM&b|uCq9USbu(+&ff}rYSVz^v^bV}_zGKc~6e%yoTZq&M zSo%$@|BLq@SW^+wDU(CP3;2+>tyl?3li2Oh=;GxOCA4LtezSd@35Az5Afr5ewgaQ- zJReLy7{^t6CBC2y3y!|+_a@XmnUWAj_+3V!)cL+!&;cT3=Z>-kD-Vknja@{xI-! z9TYc*Sv+s^-^j+PK_{nd*w7@X+B+W-AjbvP^9O~6M-{NT#Q3rSl>u>(tnh@V)cDO#70&xeZ;^26MM^jAa?QEt#rGkoA~pg;r!w5 zKV$7^Nk}BE#`cz=(G;&&f2+>#4_|`kF3O=m_eHfWOJD8`n$pt&4rurg0|C#B+-+KJZQK#0FE&Q=2?&M>Y!;*K8 zBNdzsDaJ*ttJ4T^SoYi*QjvakhVK2$+aMFd13&w-^^G&_X;1|;A z7CMGn;_v->5uwk>2t4R7$yR6oz)*G%f%Y5SYz$NJKDysk{MNMEYQkwoAl z_~3sWW&NKIW#%LX8StcVu^ebDp9q@sZa%#={(e&`_(~B-#22@hUF%#3$g`3t(i>Jb zxK~$aq_-b6rHb`_tMj13D{VX>=MNrC(@NIA*-xg?z0Hm(FoYkdL`kfO1e=a4hIB!1 z;tP5KeCIiew@O%`{a1U;#`;1cU%Tpl_-UPW7*Vg$bGZDxUQQW@x;0)OwjNf{W3|3i z&D#eas)4HI{;`MiCRoXRvgbzHcZBJ41`ny;vtEo(qYp{Gz9!XKR<|qmQaf-{iVmN+ zz>(O7#Y&mvz~X#e-i2jb$&IkK>h-|#2A%d~2EL^{^iIi~_|ydhp!$KS%GucYrnT0ZGI>cqAK^epbv5V_f>* z2lxM{L$;5`5Rn@aK)sDPQQcDwF>xJGY{as#oZb1Cc!nSQC=8;_!m?v z@dmxre!+@hH#hnemTF^Ubwh*HVson-V1uRHjVh<>UVp-&-`rt^)JG*1X+T`@6CP& zXDn)kF|=>prU$I2WpoI)j0mp8azq4{OJAOR$sWHae4nOQ9lXW#v1xk^x@|k9|5lRm zs(w{pqx?Uwvze$r-?l{5RU8ZJ78DPy{3z!-1+W}pXg7!4p=DdoySGoE3+fSskah50 zmHp;aCpC0?>ymH3Cn~B&Mp&4pR{?DOq1LdXe^*wd8scUYZ45`D%_+fibO9NsA(e9U z+X4!xQ`&WYKO+4phtOt%zka%vHc6|_HMT-_8yzO<-N|*wT8LnZ8&lpH18z(EcNVn` z3>w@{_Eu!#MMb`f5L^+Zsng$#z=#g~sH&N?Nt8HTY;9<;H2RFe=oeKoLpOz-ybTYD zXy3gcf!aA)SgcH9NiDv=6Ro9Hy`VnUln9r2Y|I*Cc6@mkwFryBnRPbIV&5$%0NXYwd!CH}F>!D8(3RM|A~Vyv#!|Eqg! zr_0ZzN`_z_HqUO|y}S~-fF%W-<=7#lMv|;Pzc&vX-nxg}DJUp7AKSYM{^HGleS%M^ Y&x9#HyA{l0@b{iSRY4R!HvI6v0G^0|nE(I) diff --git a/libs/SdFatBeta20120108/html/iostream_8h.html b/libs/SdFatBeta20120108/html/iostream_8h.html deleted file mode 100755 index 3317397..0000000 --- a/libs/SdFatBeta20120108/html/iostream_8h.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/iostream.h File Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    Arduino/libraries/SdFat/iostream.h File Reference
    -
    -
    - -

    iostream class -More...

    -
    #include <istream.h>
    -#include <ostream.h>
    -
    -Include dependency graph for iostream.h:
    -
    -
    - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - -

    -Classes

    class  iostream
     Input/Output stream. More...
    struct  setfill
     type for setfill manipulator More...
    struct  setprecision
     type for setprecision manipulator More...
    struct  setw
     type for setw manipulator More...

    -Functions

    ostreamendl (ostream &os)
    ostreamflush (ostream &os)
    ostreamoperator<< (ostream &os, const setfill &arg)
    ostreamoperator<< (ostream &os, const setw &arg)
    ostreamoperator<< (ostream &os, const setprecision &arg)
    istreamoperator>> (istream &obj, const setfill &arg)
    istreamoperator>> (istream &is, const setprecision &arg)
    istreamoperator>> (istream &is, const setw &arg)
    istreamws (istream &is)
    -

    Detailed Description

    -

    iostream class

    -

    Function Documentation

    - -
    -
    - - - - - - - - -
    ostream& endl (ostreamos) [inline]
    -
    -
    -

    insert endline

    -
    Parameters:
    - - -
    [in]osThe Stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - -
    ostream& flush (ostreamos) [inline]
    -
    -
    -

    flush manipulator

    -
    Parameters:
    - - -
    [in]osThe stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& operator<< (ostreamos,
    const setfillarg 
    ) [inline]
    -
    -
    -

    setfill manipulator

    -
    Parameters:
    - - - -
    [in]osthe stream
    [in]argset setfill object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& operator<< (ostreamos,
    const setwarg 
    ) [inline]
    -
    -
    -

    setw manipulator

    -
    Parameters:
    - - - -
    [in]osthe stream
    [in]argset setw object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ostream& operator<< (ostreamos,
    const setprecisionarg 
    ) [inline]
    -
    -
    -

    setprecision manipulator

    -
    Parameters:
    - - - -
    [in]osthe stream
    [in]argset setprecision object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& operator>> (istreamobj,
    const setfillarg 
    ) [inline]
    -
    -
    -

    setfill manipulator

    -
    Parameters:
    - - - -
    [in]objthe stream
    [in]argset setfill object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& operator>> (istreamis,
    const setprecisionarg 
    ) [inline]
    -
    -
    -

    setprecision manipulator

    -
    Parameters:
    - - - -
    [in]isthe stream
    [in]argset setprecision object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    istream& operator>> (istreamis,
    const setwarg 
    ) [inline]
    -
    -
    -

    setw manipulator

    -
    Parameters:
    - - - -
    [in]isthe stream
    [in]argset setw object
    -
    -
    -
    Returns:
    the stream
    - -
    -
    - -
    -
    - - - - - - - - -
    istream& ws (istreamis) [inline]
    -
    -
    -

    Skip white space

    -
    Parameters:
    - - -
    [in]isthe Stream
    -
    -
    -
    Returns:
    The stream
    - -
    -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/iostream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/iostream_8h__dep__incl.png deleted file mode 100755 index ba82d4eccf57aa1c126a02f23f40aeaec9c4068f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11184 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 KLX>IPKl(4nD0CnI diff --git a/libs/SdFatBeta20120108/html/iostream_8h__incl.png b/libs/SdFatBeta20120108/html/iostream_8h__incl.png deleted file mode 100755 index 0ca6ab88d8e4ad4e9800ce3b8be8233977b12425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23643 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 - - - -SdFat: Arduino/libraries/SdFat/istream.h File Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    Arduino/libraries/SdFat/istream.h File Reference
    -
    -
    - -

    istream class -More...

    -
    #include <ios.h>
    -
    -Include dependency graph for istream.h:
    -
    -
    - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - -
    -
    - - - -

    -Classes

    class  istream
     Input Stream. More...
    -

    Detailed Description

    -

    istream class

    -
    - - - diff --git a/libs/SdFatBeta20120108/html/istream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/istream_8h__dep__incl.png deleted file mode 100755 index 6cda13bd203d42bcb187bfeff2c647dcf6d7409d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12520 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
    =|oUF3u!HH-+5fYl^mCG*c$8^8( zQtfemc7(T03tjV-AN8r6YR-;w*^h*AV;g4W+C%m}2?8Lh`n+~Og0BA#!o3`GtcfN{^&g(bjhBHL%;7O=Anq`LJMLXLxq2Q| zImY+u6f;@%Ph%2fKXj~?B%@pnSXdAHLjG%K?-U!tV(>Onx?njKV%$egc_GHDUh(5)-#64$s71 zyh;Og_2O!bhJI;i9m1Ibr3l=777jEYwc86)m63wIOlY4f6F02A@U+6;)U-k7?-5P08s-*4&$0th02bsF{@%uF`SUcX zVxi*S+K@A;(hE7cMuO+2-2-uUk{&u>LGE1{%$(<5ic8>nuagOI8G;|_28c<4Y$$jL zsTgBIhe{;vgIC#_sMfZ<@4;=h>i{JMv zA+C#%&)HN}w9T5?f1FIZT&#*qU)lw~f4_&+Ut{O{Ymg3N4;erMvVSJe$(WL|(f45m z21tBs{d$o9+&+MFsPWrgZou;|>^))dZH#^UM8$)J>tI6$FFrH0Gd4#P#7$O7okp@= zks{ETZ!e7O4JIl}OLyF%Y7Ab<*%0HcGZ%eN&w1gB1Y3Ggy`$9$ zA{w?crK~-$G*GRwe)VcfkKjSU{29q}aXge;t#j&@InTS9sWu*Eb8L}pj7`&zatl^q z2HJlW*STVPde+WEY%wVrG58R*3OmiV=NlhFjN_zQ@O#VNArBx$WkuT@xfKYqnK(y$ zuiG&ymjiCGM#G@=a>Geq6WC6j3dD2?j;dsXr{U1vrw{(J^+_ZS1pDmJ9vLwiJA-(L zMe1zTPS+bSpLNMASP-V0LOhouFgZEyrpRQ1**cPy;jE2!Oc9@vpWYG{e6Ou5ohrgW zdv-#fD!>Ue?hYJzfsoS2a&Sln=L6KMPk(G;nU@tLm7+R3a)3(^z}Kl;b-rK2UMVBD z5DHg^6YwuX7P-$V2Q`Y-0kb=5#i-W{Ef&>kima*p3*S0vKkDs)Suvm6$a9Ak;thS; z8zL0cV(aGrgdpzDtYO4El|05}$d&|42sj&VRXU7HuS@0Bto+`Yh|vDDBnXJxNa2NK zIL8seTr%TFE2h#2q}Gr?16|z9yD6@RW|4IZ2&+1RXHN4P?iFAH9ns-npA)Mnr zmByZ)XMzAP({UWgN}6FZ2H{16$b&PC4;Si6E10-`EkC;$5Ft0A=i|;yi%|3hdm6_l zGKx}OpU_=hSo0?Q#fa3ncq<9jU)Otmh1&N%oxz%d+-{)q0HM#K1}}2ePVNdM1U?_k zwNg{!_nak=a4xxn3S|FtfPaLJk$?=y~7I*J) zO}2$mCWSx!7z`ZpE}ViHSP1na$E3`LXw{8!U^Vr{7GJ_#M4hvQRjL&oh4_KSKNi1*A}yVF`t{oiZX*d$7hhW)31w_^U9;tw$Kf&#>_J51 zTc~_O1czRD`XX77&y~UFgEK2|#iU~{rJO$gO>?Tb(ea-;k3RrKAX2}GCZ#BB^`ot` z%Q(_`5$a#^&afoXlC1M-$+EapDJvKz7?KfVEMc?%fsZ{F*E7ajWJDS1wVb5W;8WvS z1upHq5SlE1)_j48FO$;iD6`8E{7r)!b`!b^IKf@_&gllhHg@>{Kad0$nE{EE>5I7p zTiX_8)-Q<*mwv;A21gNx$58^mTVo6T0&=rB_G>y~ZlCS6@}$|SE+`wg6t}O~;;s;I zwz-SS5~Q~uJ${{dt#;C5Y-#-!&`TTjeKxi-{ieeQ`GUo|gMxUbv53-xPXr$~YPt@L zl!q@)iXNQpjP)%kyZBR%t??|L@J#&IpqiBix}VMqi(j zacj0m8LZr`%nyW;jaZ-6v@xoNo5hwYnqSwOoEC@b9Rrp>Lmp|t}>Wk-Aq54UFM@2)XB`&dq1 z!e9MUDPBFe;kdZIb)OlP`s=sbC4BHnTNhT8iSjvL)GtbqxX&!RmISK&57fV(5=I)p zK8X`Gr{wN^d<}d>5HvYWt(oxd=~KqJF2TZX15Y=4KD#ot9zwR01R|UXy3UQXPC%1K zX@N|D#Ds&t*Y?02q+ujZc|dsX?{BKXxA0ICPoIJfQ37FLSZB`FxR|_sap73Bwpz1w zWNx4bwq(w~hn#JKYNhBvh=6>ZQHLWisoQoiW76iX^NOdvd26`tch`Cr9PtC}rMcl$ z79pU(P~TBPlOIy!oKmrO)E3rBh%=5NNmXRKO3aNhaU4ZSjnONgs%!A{A;tw_rf%O^wj(k{uPuVO8W zwPRSIwpU<7TCSk|=?~84c~HhE0Xh#2$zZO!|BdE%YD5pfBA5huLWgRv!>OvQI`u%* zP!Do8T0iVDF8*NrqFs7U?G5w^SI%Dc*0VheKcJ2QFTz0yzx^Gu_eV_{t4Aw}i1JNR zHd_G=AjI+8s2n_>61?S4)m#QUHUn$do7Spvw)OTC=T?9PEGl60WflgMKf+(XFi4<4 z`hCr@Y+=c*SZqBy(3aEnHaRN=QHhcegCsu<=>zTm5r4cXiWi>0HrKASZQ8U5FtKf8`qN>$qENf6s?ek9uPQPrTiVwzh)z9-xvU z$7P|L6AD^@7iR%Bdl{4|a2&dNH>-?Wnzi{uNz!r5D)*hT4TZY#!?$_Bg#=1aim$&G zr{Pd}d80oM!XyOBdLQ3wzlW29!boXmMkwSC9YEYT0s=cb-~JMy5pM+v1c^M}mjy{% zLAgKT05$v(G1wy3r4}dZwP-y)SQ8~W6u;L63fJJT2mZ|l6C6IbANmQKX`hkq1B)_C zuLr>(%#K0Hkj&1x)o%SFHDcw>^Su9Y-#c9dNp1q(Ji}Ao1h$dD%%f)Pub=VI3Wa@c zq=EjoYqY8_|NJD&j8dN2!1&~20(fw+)$RVd>o;X4qFJTf)*DN23_;q=310LM16&pn z-}{M&s>Khwnjplnr!#0!juXMoIbFG8$_q&-D3!(Wny=j{IK`QJ_A4mzDV+Ca)2|zQ z*%PWx=){}8QQBBrIpUV;S!obXZL1R#gOZw>NE(y1j+35y8-=h3Qwe({x2gofS>P94 z{9}lZud@hSLSthaqng!N2`GS-W|(rKL^(oS8kg^BFeLl3KNWj%7YSa(0`FE_c>scT zb<5U+Pk?6UKkC2@{QYxB z86+6)vek{<_hW7*=>Dr2uYm`E{9zUMl{3I+pldDLr+OZ-s^;yLNUf+{g#${>+6wPE z8%M!B?`T(o6QDStv12;FC#7kttPo#HVEPe$x1 z_u(;PSk0TSCKkYn6XG%}p)M%GR0ksPVq2!b%uB+nJ2X*S8|#s%GAC9hD0oW>f41jo zhXgyQI~hR4nl%W%$aWHC{I8*j7&qXO|DS1oKgLeE;-RFu$@CI#&VaW20+ySYuTS75 zyY&T19v=5=)hsw(XHY9r5i;Q3`b>hkh78BaO1Cs`<8|BvHeIF;n-D(Rv9ZT?L)SDR zyWUXoY4>P*Im6lkag~sN8%&N-EXRa}rrtuu zp8ZTL{KDy*avC`F7p_R26&BI(l_N;{_97Wkz|Z{PPzzwy`#~GSP*Jd2e^hMRG{*so z8>33SOfrS_glkveIrb!C?SW0*;>9sL7k*TpcERF8%uOB!<74q|(kl&u zFqlu|+I@%8?_b{)Q9-Ifl`igmF_9EdmMmsmQT={8F-Y4lN~$u%N;W)nLe(5nEz z(=gU=^gCoOMo8?%VoUPFPeC8S*I|OzJY+~`$-7C@Kqe7!K?Yo8ft)|zvY6zSU#j^8 zH49{44SA8ce6R2Cx|$u&a=bh)${27_7NZ}f6+^oulT?gLjDQARS&70es{)VYVa?pZ zxhrI_xxukDsFzc%X(MI8tq;5fgvPuBSxrQlCaz|PwfzY8%~+dlOD4RPycMl0m>vx0 za$emFidl7Qg~Ujy^0NKg+mPfV#^t1uO$M>Z*eN?ux%d*W0(_Xk`wf2&wkmaOb%bhn znvgr{a=l;*=D^>R8e#?CD32?0hu{!nidi8*`)`aDj@EWmPhPny`n~3nOvrjIcu^d> zPSl|!%~w|R+Z;jNU7q^qZPY(kDiBCNQwd;w_;=-YYmQOr0(T;0mJxMdRq7~GOk+&} zGfWMbd?{*tBh9yCbZx{m2J2uy3l6n@0p1Hklj2ZF3)Vak%Pma~>K=X#P^E32`S{&8 zZy23wI9}}^hK9BA5-#58-Yo?k_yMs)PcrfIB%8%|+LkH8Tq0G~^s+iX_)*DVGvFTk z!t0r#Y#a>_(k-1wOTWP4>uMyH$0dF1Jq7g+B}s5)F|L1^E2!;{D>Q8?nYNcF4!_Mn zPGj7j$=(k7VrjWawEd%>4$FP=3DZ=H@tejj^x?TwVPs7SMnLAau7(DZlw{8OcjHG2 zEPnB9Hw3}C1LqhvB*UGg3>0~k_-=yfreHx^sZ8(!dH^Z&V{O6%nNUTX^9}u@`;O(A z>pN}?{EGew2vh?oG>x0oC(gvz8{I4Ns1o4IlcB#U!iDyevp=WAdy>87g=kc^VhZ=c z!*A&5f(zm;5PdB$2Y2y>v{NtZE<>29xq%PHCQuMS4ppMBr*IG80nma3+di!WT$hu^ zE4;#5QHY_=d+*P-A;zZ~?MEtSoxVt;8;**8gwkMjc@z8^zwrSiVe9bF;apU;DG&fi zdvSjkAPLk&Gh0o+or`mtk~EncO^ETA`m zs!^yGZ3h!?P$`}S6yGv;<*4MAV4`PNSv_C|35dq<9$s7vWMJ3XdO5+kjPKIX+*CP* zT_A?Y;T-;%?v*PlK!diu#-Y5JNrw=@kNnXDNSI|H6#}i6X-c&-(Es#Jn_WR1fx0AS zTP-W$qS{G`V!e$gr?Bni(GsG#94Ln@g`O!+?MEz$99`DxA1-rRFU+8P;;uH=LY-UFo=BxhgHJ z$mKVV*#`80-Bj~Ws6dA&HWeGgn)FG9sUS-)f;32I5PnMV3XqaZ!o!uNmw~=V^v{+J z+9Bsh$s!xW_8#^G6(p_X{jb@k5$CSvMEH(va%1m$)g5(d+^ZgXq>#zqQWo{FY#}ok z9P5ySCs03;&}#c#kmT{D-(3uQmn+3J@RaY>u2;W@q`%LnWLa_VKJgPjHlZ!?zO(wK zRN~!$J*lm;+|uO08y2D>)o%6lt6PE{|MGeF*x1PC zE4Pucj*jWA#pK4w0h_)s)equ%a~T=IzRyZuEqHHK`77O-fA73{(;?jHgKUGm9Ny`` z`g*~ZLbjDlFONxOO3BsiS$({#l#Hn8URc}Q3NfoHM*vm#d661NZ`;YOyp!aGkmNm4 z+p2wK+XFkJ)>g@YWY>DCxVPCkR|wr3zjyB1r)zGQ>Kje&#i%C@xQe&G*QvD|vlC|x zL3fC!sB+|%H2Rdy{nYyI#WTP0SbSOiAR<$ZgU%&95Pnn{hs1EdYnZPDBdTdSxI-=22-Btbv zL+z!^ERA<~cpHxfLa2$;;*%r~iWN8Bz4I`kjS6(T%$Qo%;Ned8I{cXsm*&6K5ZFjl z_T?t@4zz4~grVUk)cE90_2A%Ol54MN1e&Y1|H>wu*?0M5XD6@MVM4^s#>~uSY^Shm zetv$-p=OD0MA7~s&n5Yt=glc0=wc*&f4FVQi5WLfN_g~xt46aruF`XhWbr+h#rlD) z&)P=rLsn)l=DdFP^?hFw#UkhJ+&G%m)YYeAwNH_vrw+qpe97qO2lQqmC2P8l^_LVM z!@{PF-JwN%g359Y#ZYG}xSFo9a^bZ9QJ;F1r2pxU`_GodymwhsXe+UsX!K*_bV;g;ThDAVt^uk(?CP!4-Ow6 z2;BwWWBn&VGz>d2RXVoua@ufX2jF7P8e1s#_!xlIHJ|Aet1O?fIs0~xyA0fhpKOrI zUIEJMVvuX;?s(AaVybokKnS@8q=Pg5|LhX@M*^O1*}<7=w-p@4CpH@M^72H-saulV z)Bob>2jWpZ-TH$*wjNR_3Z9#j+zLf|?e#pSMvjy#nr!K|bL7nYNp5;pI3(h}cJspS z#f!NFj4gl?=9l=8*8j8n|08Zo{kbz|-!4>0s>!T<&HSskf#u8Ii4$#i2YJ7IgjUFz4dg?y?Z;0e}8@*D16~QFv+}^wKTGuALQe9 zyt@nF4g|@gOhrEBmJv*QMsYdnmnn73T~4vg!N%*v!H+Cu*(P#Ns)pEze!es$BG{s^Ooq0wc4A?~*Cz%cq#T=U7FQnmYX7c!aIw z=)=S9`DZQfhhP0DUy+a%?sBA=|K6YLtFk&e+K(SQRu}y6W20H_x?Kzj22ba_@9UVY z^ysBlU;Y2T^M5~X%|9Pf_^0DXjmsTjV3>VT1ZJyc%YnMyt=QF}<>T+~9~R4e!47MQ zW57|=|DFAdBv1?cT9#>Px49e-Yyt-4g$f3}3x>d4S>^e6jh|NB>C*M)eQQc? z_^Zt~s~UJ69GI$(9(4%LTmES8rn^V4TfN*owYHJ>fROZs)z_4IN-nhfT#hh4W6?G2T;G zVBDLsbU_f?va9#9uY?=_Hr=gnZ~&ZF(ThyvECF=xu9wGFu3ULHR6KB^wDO~ftF8=h z1t&DDJ7FpBt9f@`(67v^TSHWreo47%3Owuz4np4j&)8m4^!~<)CXkq?tDnm{r-UW| DP|ayO diff --git a/libs/SdFatBeta20120108/html/ostream_8h.html b/libs/SdFatBeta20120108/html/ostream_8h.html deleted file mode 100755 index 55a4213..0000000 --- a/libs/SdFatBeta20120108/html/ostream_8h.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - -SdFat: Arduino/libraries/SdFat/ostream.h File Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    Arduino/libraries/SdFat/ostream.h File Reference
    -
    -
    - -

    ostream class -More...

    -
    #include <ios.h>
    -
    -Include dependency graph for ostream.h:
    -
    -
    - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - -
    -
    - - - - - - - -

    -Classes

    class  ostream
     Output Stream. More...
    struct  pgm
     type for string in flash More...

    -Defines

    #define pstr(str)   pgm(PSTR(str))
    -

    Detailed Description

    -

    ostream class

    -

    Define Documentation

    - -
    -
    - - - - - - - - -
    #define pstr( str)   pgm(PSTR(str))
    -
    -
    -

    macro for flash inserter

    - -
    -
    -
    - - - diff --git a/libs/SdFatBeta20120108/html/ostream_8h__dep__incl.png b/libs/SdFatBeta20120108/html/ostream_8h__dep__incl.png deleted file mode 100755 index 6ff6d1ffb2c1bc9ac5f70e44d8f8c3ab56d6bb83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12523 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

    _33Kv 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 I&MBb@0H$M&YXATM diff --git a/libs/SdFatBeta20120108/html/structdirectory_entry-members.html b/libs/SdFatBeta20120108/html/structdirectory_entry-members.html deleted file mode 100755 index cd535d6..0000000 --- a/libs/SdFatBeta20120108/html/structdirectory_entry-members.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - -SdFat: Member List - - - - - -

    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    directoryEntry Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structdirectory_entry.html b/libs/SdFatBeta20120108/html/structdirectory_entry.html deleted file mode 100755 index d7bb9ce..0000000 --- a/libs/SdFatBeta20120108/html/structdirectory_entry.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - -SdFat: directoryEntry Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    directoryEntry Struct Reference
    -
    -
    - -

    FAT short directory entry. - More...

    - -

    #include <SdFatStructs.h>

    - -

    List of all members.

    - - - - - - - - - - - - - - -

    -Public Attributes

    uint8_t attributes
    uint16_t creationDate
    uint16_t creationTime
    uint8_t creationTimeTenths
    uint32_t fileSize
    uint16_t firstClusterHigh
    uint16_t firstClusterLow
    uint16_t lastAccessDate
    uint16_t lastWriteDate
    uint16_t lastWriteTime
    uint8_t name [11]
    uint8_t reservedNT
    -

    Detailed Description

    -

    FAT short directory entry.

    -

    Short means short 8.3 name, not the entry size.

    -

    Date Format. A FAT directory entry date stamp is a 16-bit field that is basically a date relative to the MS-DOS epoch of 01/01/1980. Here is the format (bit 0 is the LSB of the 16-bit word, bit 15 is the MSB of the 16-bit word):

    -

    Bits 9-15: Count of years from 1980, valid value range 0-127 inclusive (1980-2107).

    -

    Bits 5-8: Month of year, 1 = January, valid value range 1-12 inclusive.

    -

    Bits 0-4: Day of month, valid value range 1-31 inclusive.

    -

    Time Format. A FAT directory entry time stamp is a 16-bit field that has a granularity of 2 seconds. Here is the format (bit 0 is the LSB of the 16-bit word, bit 15 is the MSB of the 16-bit word).

    -

    Bits 11-15: Hours, valid value range 0-23 inclusive.

    -

    Bits 5-10: Minutes, valid value range 0-59 inclusive.

    -

    Bits 0-4: 2-second count, valid value range 0-29 inclusive (0 - 58 seconds).

    -

    The valid time range is from Midnight 00:00:00 to 23:59:58.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint8_t directoryEntry::attributes
    -
    -
    -

    Entry attributes.

    -

    The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that. See defines that begin with DIR_ATT_.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::creationDate
    -
    -
    -

    Date file was created.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::creationTime
    -
    -
    -

    Time file was created.

    - -
    -
    - -
    - -
    -

    The granularity of the seconds part of creationTime is 2 seconds so this field is a count of tenths of a second and its valid value range is 0-199 inclusive. (WHG note - seems to be hundredths)

    - -
    -
    - -
    -
    - - - - -
    uint32_t directoryEntry::fileSize
    -
    -
    -

    32-bit unsigned holding this file's size in bytes.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::firstClusterHigh
    -
    -
    -

    High word of this entry's first cluster number (always 0 for a FAT12 or FAT16 volume).

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::firstClusterLow
    -
    -
    -

    Low word of this entry's first cluster number.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::lastAccessDate
    -
    -
    -

    Last access date. Note that there is no last access time, only a date. This is the date of last read or write. In the case of a write, this should be set to the same date as lastWriteDate.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::lastWriteDate
    -
    -
    -

    Date of last write. File creation is considered a write.

    - -
    -
    - -
    -
    - - - - -
    uint16_t directoryEntry::lastWriteTime
    -
    -
    -

    Time of last write. File creation is considered a write.

    - -
    -
    - -
    -
    - - - - -
    uint8_t directoryEntry::name[11]
    -
    -
    -

    Short 8.3 name.

    -

    The first eight bytes contain the file name with blank fill. The last three bytes contain the file extension with blank fill.

    - -
    -
    - -
    -
    - - - - -
    uint8_t directoryEntry::reservedNT
    -
    -
    -

    Reserved for use by Windows NT. Set value to 0 when a file is created and never modify or look at it after that.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structfat32__boot-members.html b/libs/SdFatBeta20120108/html/structfat32__boot-members.html deleted file mode 100755 index 3139e82..0000000 --- a/libs/SdFatBeta20120108/html/structfat32__boot-members.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    fat32_boot Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structfat32__boot.html b/libs/SdFatBeta20120108/html/structfat32__boot.html deleted file mode 100755 index 5f010f1..0000000 --- a/libs/SdFatBeta20120108/html/structfat32__boot.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - -SdFat: fat32_boot Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    fat32_boot Struct Reference
    -
    -
    - -

    Boot sector for a FAT32 volume. - More...

    - -

    #include <SdFatStructs.h>

    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    uint8_t bootCode [420]
    uint8_t bootSectorSig0
    uint8_t bootSectorSig1
    uint8_t bootSignature
    uint16_t bytesPerSector
    uint8_t driveNumber
    uint16_t fat32BackBootBlock
    uint16_t fat32Flags
    uint16_t fat32FSInfo
    uint8_t fat32Reserved [12]
    uint32_t fat32RootCluster
    uint16_t fat32Version
    uint8_t fatCount
    char fileSystemType [8]
    uint16_t headCount
    uint32_t hidddenSectors
    uint8_t jump [3]
    uint8_t mediaType
    char oemId [8]
    uint8_t reserved1
    uint16_t reservedSectorCount
    uint16_t rootDirEntryCount
    uint8_t sectorsPerCluster
    uint16_t sectorsPerFat16
    uint32_t sectorsPerFat32
    uint16_t sectorsPerTrack
    uint16_t totalSectors16
    uint32_t totalSectors32
    char volumeLabel [11]
    uint32_t volumeSerialNumber
    -

    Detailed Description

    -

    Boot sector for a FAT32 volume.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint8_t fat32_boot::bootCode[420]
    -
    -
    -

    X86 boot code

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::bootSectorSig0
    -
    -
    -

    must be 0X55

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::bootSectorSig1
    -
    -
    -

    must be 0XAA

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::bootSignature
    -
    -
    -

    0X29 if next three fields are valid

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::bytesPerSector
    -
    -
    -

    The size of a hardware sector. Valid decimal values for this field are 512, 1024, 2048, and 4096. For most disks used in the United States, the value of this field is 512.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::driveNumber
    -
    -
    -

    Related to the BIOS physical drive number. Floppy drives are identified as 0x00 and physical hard disks are identified as 0x80, regardless of the number of physical disk drives. Typically, this value is set prior to issuing an INT 13h BIOS call to specify the device to access. The value is only relevant if the device is a boot device.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::fat32BackBootBlock
    -
    -
    -

    If nonzero, indicates the sector number in the reserved area of the volume of a copy of the boot record. Usually 6. No value other than 6 is recommended.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::fat32Flags
    -
    -
    -

    This field is only defined for FAT32 media and does not exist on FAT12 and FAT16 media. Bits 0-3 -- Zero-based number of active FAT. Only valid if mirroring is disabled. Bits 4-6 -- Reserved. Bit 7 -- 0 means the FAT is mirrored at runtime into all FATs. -- 1 means only one FAT is active; it is the one referenced in bits 0-3. Bits 8-15 -- Reserved.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::fat32FSInfo
    -
    -
    -

    Sector number of FSINFO structure in the reserved area of the FAT32 volume. Usually 1.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::fat32Reserved[12]
    -
    -
    -

    Reserved for future expansion. Code that formats FAT32 volumes should always set all of the bytes of this field to 0.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_boot::fat32RootCluster
    -
    -
    -

    Cluster number of the first cluster of the root directory for FAT32. This usually 2 but not required to be 2.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::fat32Version
    -
    -
    -

    FAT32 version. High byte is major revision number. Low byte is minor revision number. Only 0.0 define.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::fatCount
    -
    -
    -

    The number of copies of the FAT on the volume. The value of this field is always 2.

    - -
    -
    - -
    -
    - - - - -
    char fat32_boot::fileSystemType[8]
    -
    -
    -

    A text field with a value of FAT32.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::headCount
    -
    -
    -

    Number of heads for interrupt 0x13. Not used otherwise.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_boot::hidddenSectors
    -
    -
    -

    Count of hidden sectors preceding the partition that contains this FAT volume. This field is generally only relevant for media visible on interrupt 0x13.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::jump[3]
    -
    -
    -

    The first three bytes of the boot sector must be valid, executable x 86-based CPU instructions. This includes a jump instruction that skips the next nonexecutable bytes.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::mediaType
    -
    -
    -

    This dates back to the old MS-DOS 1.x media determination and is no longer usually used for anything. 0xF8 is the standard value for fixed (nonremovable) media. For removable media, 0xF0 is frequently used. Legal values are 0xF0 or 0xF8-0xFF.

    - -
    -
    - -
    -
    - - - - -
    char fat32_boot::oemId[8]
    -
    -
    -

    This is typically a string of characters that identifies the operating system that formatted the volume.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::reserved1
    -
    -
    -

    used by Windows NT - should be zero for FAT

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::reservedSectorCount
    -
    -
    -

    The number of sectors preceding the start of the first FAT, including the boot sector. Must not be zero

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::rootDirEntryCount
    -
    -
    -

    FAT12/FAT16 only. For FAT32 volumes, this field must be set to 0.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_boot::sectorsPerCluster
    -
    -
    -

    Number of sectors per allocation unit. This value must be a power of 2 that is greater than 0. The legal values are 1, 2, 4, 8, 16, 32, 64, and 128. 128 should be avoided.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::sectorsPerFat16
    -
    -
    -

    On FAT32 volumes this field must be 0, and sectorsPerFat32 contains the FAT size count.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_boot::sectorsPerFat32
    -
    -
    -

    Count of sectors occupied by one FAT on FAT32 volumes.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::sectorsPerTrack
    -
    -
    -

    Sectors per track for interrupt 0x13. Not used otherwise.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat32_boot::totalSectors16
    -
    -
    -

    For FAT32 volumes, this field must be 0.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_boot::totalSectors32
    -
    -
    -

    Contains the total number of sectors in the FAT32 volume.

    - -
    -
    - -
    -
    - - - - -
    char fat32_boot::volumeLabel[11]
    -
    -
    -

    A field once used to store the volume label. The volume label is now stored as a special file in the root directory.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_boot::volumeSerialNumber
    -
    -
    -

    A random serial number created when formatting a disk, which helps to distinguish between disks. Usually generated by combining date and time.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structfat32__fsinfo-members.html b/libs/SdFatBeta20120108/html/structfat32__fsinfo-members.html deleted file mode 100755 index c894795..0000000 --- a/libs/SdFatBeta20120108/html/structfat32__fsinfo-members.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    fat32_fsinfo Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structfat32__fsinfo.html b/libs/SdFatBeta20120108/html/structfat32__fsinfo.html deleted file mode 100755 index 8849cad..0000000 --- a/libs/SdFatBeta20120108/html/structfat32__fsinfo.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - -SdFat: fat32_fsinfo Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    fat32_fsinfo Struct Reference
    -
    -
    - -

    FSINFO sector for a FAT32 volume. - More...

    - -

    #include <SdFatStructs.h>

    - -

    List of all members.

    - - - - - - - - - -

    -Public Attributes

    uint32_t freeCount
    uint32_t leadSignature
    uint32_t nextFree
    uint8_t reserved1 [480]
    uint8_t reserved2 [12]
    uint32_t structSignature
    uint8_t tailSignature [4]
    -

    Detailed Description

    -

    FSINFO sector for a FAT32 volume.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint32_t fat32_fsinfo::freeCount
    -
    -
    -

    Contains the last known free cluster count on the volume. If the value is 0xFFFFFFFF, then the free count is unknown and must be computed. Any other value can be used, but is not necessarily correct. It should be range checked at least to make sure it is <= volume cluster count.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_fsinfo::leadSignature
    -
    -
    -

    must be 0X52, 0X52, 0X61, 0X41

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_fsinfo::nextFree
    -
    -
    -

    This is a hint for the FAT driver. It indicates the cluster number at which the driver should start looking for free clusters. If the value is 0xFFFFFFFF, then there is no hint and the driver should start looking at cluster 2.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_fsinfo::reserved1[480]
    -
    -
    -

    must be zero

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_fsinfo::reserved2[12]
    -
    -
    -

    must be zero

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat32_fsinfo::structSignature
    -
    -
    -

    must be 0X72, 0X72, 0X41, 0X61

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat32_fsinfo::tailSignature[4]
    -
    -
    -

    must be 0X00, 0X00, 0X55, 0XAA

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structfat__boot-members.html b/libs/SdFatBeta20120108/html/structfat__boot-members.html deleted file mode 100755 index 570cbbd..0000000 --- a/libs/SdFatBeta20120108/html/structfat__boot-members.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    fat_boot Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structfat__boot.html b/libs/SdFatBeta20120108/html/structfat__boot.html deleted file mode 100755 index b5dd917..0000000 --- a/libs/SdFatBeta20120108/html/structfat__boot.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - -SdFat: fat_boot Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    fat_boot Struct Reference
    -
    -
    - -

    Boot sector for a FAT12/FAT16 volume. - More...

    - -

    #include <SdFatStructs.h>

    - -

    List of all members.

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    uint8_t bootCode [448]
    uint8_t bootSectorSig0
    uint8_t bootSectorSig1
    uint8_t bootSignature
    uint16_t bytesPerSector
    uint8_t driveNumber
    uint8_t fatCount
    char fileSystemType [8]
    uint16_t headCount
    uint32_t hidddenSectors
    uint8_t jump [3]
    uint8_t mediaType
    char oemId [8]
    uint8_t reserved1
    uint16_t reservedSectorCount
    uint16_t rootDirEntryCount
    uint8_t sectorsPerCluster
    uint16_t sectorsPerFat16
    uint16_t sectorsPerTrack
    uint16_t totalSectors16
    uint32_t totalSectors32
    char volumeLabel [11]
    uint32_t volumeSerialNumber
    -

    Detailed Description

    -

    Boot sector for a FAT12/FAT16 volume.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint8_t fat_boot::bootCode[448]
    -
    -
    -

    X86 boot code

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::bootSectorSig0
    -
    -
    -

    must be 0X55

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::bootSectorSig1
    -
    -
    -

    must be 0XAA

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::bootSignature
    -
    -
    -

    0X29 if next three fields are valid

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::bytesPerSector
    -
    -
    -

    The size of a hardware sector. Valid decimal values for this field are 512, 1024, 2048, and 4096. For most disks used in the United States, the value of this field is 512.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::driveNumber
    -
    -
    -

    Related to the BIOS physical drive number. Floppy drives are identified as 0x00 and physical hard disks are identified as 0x80, regardless of the number of physical disk drives. Typically, this value is set prior to issuing an INT 13h BIOS call to specify the device to access. The value is only relevant if the device is a boot device.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::fatCount
    -
    -
    -

    The number of copies of the FAT on the volume. The value of this field is always 2.

    - -
    -
    - -
    -
    - - - - -
    char fat_boot::fileSystemType[8]
    -
    -
    -

    A field with a value of either FAT, FAT12 or FAT16, depending on the disk format.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::headCount
    -
    -
    -

    Number of heads for interrupt 0x13. Not used otherwise.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat_boot::hidddenSectors
    -
    -
    -

    Count of hidden sectors preceding the partition that contains this FAT volume. This field is generally only relevant for media visible on interrupt 0x13.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::jump[3]
    -
    -
    -

    The first three bytes of the boot sector must be valid, executable x 86-based CPU instructions. This includes a jump instruction that skips the next nonexecutable bytes.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::mediaType
    -
    -
    -

    This dates back to the old MS-DOS 1.x media determination and is no longer usually used for anything. 0xF8 is the standard value for fixed (nonremovable) media. For removable media, 0xF0 is frequently used. Legal values are 0xF0 or 0xF8-0xFF.

    - -
    -
    - -
    -
    - - - - -
    char fat_boot::oemId[8]
    -
    -
    -

    This is typically a string of characters that identifies the operating system that formatted the volume.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::reserved1
    -
    -
    -

    used by Windows NT - should be zero for FAT

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::reservedSectorCount
    -
    -
    -

    The number of sectors preceding the start of the first FAT, including the boot sector. The value of this field is always 1.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::rootDirEntryCount
    -
    -
    -

    For FAT12 and FAT16 volumes, this field contains the count of 32-byte directory entries in the root directory. For FAT32 volumes, this field must be set to 0. For FAT12 and FAT16 volumes, this value should always specify a count that when multiplied by 32 results in a multiple of bytesPerSector. FAT16 volumes should use the value 512.

    - -
    -
    - -
    -
    - - - - -
    uint8_t fat_boot::sectorsPerCluster
    -
    -
    -

    Number of sectors per allocation unit. This value must be a power of 2 that is greater than 0. The legal values are 1, 2, 4, 8, 16, 32, 64, and 128. 128 should be avoided.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::sectorsPerFat16
    -
    -
    -

    Count of sectors occupied by one FAT on FAT12/FAT16 volumes. On FAT32 volumes this field must be 0, and sectorsPerFat32 contains the FAT size count.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::sectorsPerTrack
    -
    -
    -

    Sectors per track for interrupt 0x13. Not used otherwise.

    - -
    -
    - -
    -
    - - - - -
    uint16_t fat_boot::totalSectors16
    -
    -
    -

    This field is the old 16-bit total count of sectors on the volume. This count includes the count of all sectors in all four regions of the volume. This field can be 0; if it is 0, then totalSectors32 must be nonzero. For FAT32 volumes, this field must be 0. For FAT12 and FAT16 volumes, this field contains the sector count, and totalSectors32 is 0 if the total sector count fits (is less than 0x10000).

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat_boot::totalSectors32
    -
    -
    -

    This field is the new 32-bit total count of sectors on the volume. This count includes the count of all sectors in all four regions of the volume. This field can be 0; if it is 0, then totalSectors16 must be nonzero.

    - -
    -
    - -
    -
    - - - - -
    char fat_boot::volumeLabel[11]
    -
    -
    -

    A field once used to store the volume label. The volume label is now stored as a special file in the root directory.

    - -
    -
    - -
    -
    - - - - -
    uint32_t fat_boot::volumeSerialNumber
    -
    -
    -

    A random serial number created when formatting a disk, which helps to distinguish between disks. Usually generated by combining date and time.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structfpos__t-members.html b/libs/SdFatBeta20120108/html/structfpos__t-members.html deleted file mode 100755 index 3558bc9..0000000 --- a/libs/SdFatBeta20120108/html/structfpos__t-members.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    fpos_t Member List
    -
    -
    -This is the complete list of members for fpos_t, including all inherited members. - - - -
    clusterfpos_t
    fpos_t() (defined in fpos_t)fpos_t [inline]
    positionfpos_t
    - - - diff --git a/libs/SdFatBeta20120108/html/structfpos__t.html b/libs/SdFatBeta20120108/html/structfpos__t.html deleted file mode 100755 index 589cd52..0000000 --- a/libs/SdFatBeta20120108/html/structfpos__t.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - -SdFat: fpos_t Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    fpos_t Struct Reference
    -
    -
    - -

    internal type for istream do not use in user apps - More...

    - -

    #include <SdBaseFile.h>

    - -

    List of all members.

    - - - - -

    -Public Attributes

    uint32_t cluster
    uint32_t position
    -

    Detailed Description

    -

    internal type for istream do not use in user apps

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint32_t fpos_t::cluster
    -
    -
    -

    cluster for position

    - -
    -
    - -
    -
    - - - - -
    uint32_t fpos_t::position
    -
    -
    -

    stream position

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structmaster_boot_record-members.html b/libs/SdFatBeta20120108/html/structmaster_boot_record-members.html deleted file mode 100755 index 50acd69..0000000 --- a/libs/SdFatBeta20120108/html/structmaster_boot_record-members.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    masterBootRecord Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structmaster_boot_record.html b/libs/SdFatBeta20120108/html/structmaster_boot_record.html deleted file mode 100755 index a727d18..0000000 --- a/libs/SdFatBeta20120108/html/structmaster_boot_record.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - -SdFat: masterBootRecord Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    masterBootRecord Struct Reference
    -
    -
    - -

    Master Boot Record. - More...

    - -

    #include <SdFatStructs.h>

    -
    -Collaboration diagram for masterBootRecord:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - -

    -Public Attributes

    uint8_t codeArea [440]
    uint32_t diskSignature
    uint8_t mbrSig0
    uint8_t mbrSig1
    part_t part [4]
    uint16_t usuallyZero
    -

    Detailed Description

    -

    Master Boot Record.

    -

    The first block of a storage device that is formatted with a MBR.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint8_t masterBootRecord::codeArea[440]
    -
    -
    -

    Code Area for master boot program.

    - -
    -
    - -
    -
    - - - - -
    uint32_t masterBootRecord::diskSignature
    -
    -
    -

    Optional Windows NT disk signature. May contain boot code.

    - -
    -
    - -
    -
    - - - - -
    uint8_t masterBootRecord::mbrSig0
    -
    -
    -

    First MBR signature byte. Must be 0X55

    - -
    -
    - -
    -
    - - - - -
    uint8_t masterBootRecord::mbrSig1
    -
    -
    -

    Second MBR signature byte. Must be 0XAA

    - -
    -
    - -
    - -
    -

    Partition tables.

    - -
    -
    - -
    -
    - - - - -
    uint16_t masterBootRecord::usuallyZero
    -
    -
    -

    Usually zero but may be more boot code.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structmaster_boot_record__coll__graph.png b/libs/SdFatBeta20120108/html/structmaster_boot_record__coll__graph.png deleted file mode 100755 index df5013f0354ab00e2cac53942adff99cf8ab80d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1517 zcmZWpc`(}v6wXgZC_=2WafKE|m$GV0yFxZW94U&nk*bX&h;tpKj%K%tq7_6bL0fFA zu4o?Cbzc5My|&GdoLLg7cP17JlNSMFmk_idMTr0nCI)3~TS7h^ zpy*@Z)rm*`&;YFilbb`zg3;$ajln9xFYRq0;fbMHnWNTlY?3+ZaTcI04@T)gQqeLF z36Jz{_~;dM3X)V5GJ8ka(Sz@*Vi&@VZsd?1hi_k_Ojd$D`3RxRjEAH=wfp9AmR(}s zi$-Qjnc#89QS$7OnMTe)-b6h)8Q*q3jHc%yrxUwVuTgB_KPjPM$$oNc3tpVrQgZ3M z0m{X_FS#**TZs)Lt)^9~E+gESOZIaWyFr__p#YZSbN^a{uwo^c*d=S`G9UTb^9o}J z_H$l{nf`;#qe$}dvff_#YTW3amLEsx;xe>i<;)&icBBnDx4ow;Y%k;EyQMNE!D2Q*4QMG_HyU3v?kkR|`~nDs zbvqmo{6`~N=i7^CgA3#&SC_R6=Ei(#DQ61!)-rDH&W0K=XdTU~2L8KwyKLbdesNko zAKf_u2;vgf!=MBg?}lG$yq&fN0wxqo93?7eoYtP1wyWZD`D--K)7ge<)VP`pPL#Gt z8Iv?8&{~T(7mp3V+{}?dnqz2rt_c!37-h}ORFB(JN& zzA^oJ6ptwm!uW^rEwdOXdLIErt9#YC5z$zWm91~jIKLl&5V%84Q|--{v{WROoH7G_-dIG1g~P{hwI=aY|ANd2R>s zbw4!PL#bWMU)6+mFdq5pm`{lQ@KAatxp|s38~!IggNRC;|1togygQu&C16#X@!Y7^ zndDi*l5p%vcr!l8Jguva9?0(Q23lHM0V4&br9;K=v;Ka^0|9OyPe}Z0O%X%XgX5tV z9Zd>51!IAaua}mVHkOm&tr})p0neKuw*yBf_Q=FkSW#G2bFP=Y7dK%wH>AJfRUBcUYKL1=sQGeyaoXe+ArQ&3UVwDXa0sNp z3E`>Zr15;ud=@vGXEmz1ezlM?*`vhu=}S(TW|lQ!-^7m4ERzbXB(NvXZ4PO3DQ - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    partitionTable Member List
    -
    - - - - diff --git a/libs/SdFatBeta20120108/html/structpartition_table.html b/libs/SdFatBeta20120108/html/structpartition_table.html deleted file mode 100755 index 75c0778..0000000 --- a/libs/SdFatBeta20120108/html/structpartition_table.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -SdFat: partitionTable Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    partitionTable Struct Reference
    -
    -
    - -

    MBR partition table entry. - More...

    - -

    #include <SdFatStructs.h>

    - -

    List of all members.

    - - - - - - - - - - - - - - -

    -Public Attributes

    unsigned beginCylinderHigh: 2
    uint8_t beginCylinderLow
    uint8_t beginHead
    unsigned beginSector: 6
    uint8_t boot
    unsigned endCylinderHigh: 2
    uint8_t endCylinderLow
    uint8_t endHead
    unsigned endSector: 6
    uint32_t firstSector
    uint32_t totalSectors
    uint8_t type
    -

    Detailed Description

    -

    MBR partition table entry.

    -

    A partition table entry for a MBR formatted storage device. The MBR partition table has four entries.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    unsigned partitionTable::beginCylinderHigh
    -
    -
    -

    High bits cylinder for first block in partition.

    - -
    -
    - -
    - -
    -

    Combine beginCylinderLow with beginCylinderHigh. Legal values are 0-1023. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    uint8_t partitionTable::beginHead
    -
    -
    -

    Head part of Cylinder-head-sector address of the first block in the partition. Legal values are 0-255. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    unsigned partitionTable::beginSector
    -
    -
    -

    Sector part of Cylinder-head-sector address of the first block in the partition. Legal values are 1-63. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    uint8_t partitionTable::boot
    -
    -
    -

    Boot Indicator . Indicates whether the volume is the active partition. Legal values include: 0X00. Do not use for booting. 0X80 Active partition.

    - -
    -
    - -
    -
    - - - - -
    unsigned partitionTable::endCylinderHigh
    -
    -
    -

    High bits of end cylinder

    - -
    -
    - -
    -
    - - - - -
    uint8_t partitionTable::endCylinderLow
    -
    -
    -

    Combine endCylinderLow with endCylinderHigh. Legal values are 0-1023. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    uint8_t partitionTable::endHead
    -
    -
    -

    head part of cylinder-head-sector address of the last sector in the partition. Legal values are 0-255. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    unsigned partitionTable::endSector
    -
    -
    -

    Sector part of cylinder-head-sector address of the last sector in the partition. Legal values are 1-63. Only used in old PC BIOS.

    - -
    -
    - -
    -
    - - - - -
    uint32_t partitionTable::firstSector
    -
    -
    -

    Logical block address of the first block in the partition.

    - -
    -
    - -
    -
    - - - - -
    uint32_t partitionTable::totalSectors
    -
    -
    -

    Length of the partition, in blocks.

    - -
    -
    - -
    -
    - - - - -
    uint8_t partitionTable::type
    -
    -
    -

    Partition type. See defines that begin with PART_TYPE_ for some Microsoft partition types.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structpgm-members.html b/libs/SdFatBeta20120108/html/structpgm-members.html deleted file mode 100755 index 37d9801..0000000 --- a/libs/SdFatBeta20120108/html/structpgm-members.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    pgm Member List
    -
    -
    -This is the complete list of members for pgm, including all inherited members. - - - -
    pgm(char *str)pgm [inline, explicit]
    pgm(const char *str)pgm [inline, explicit]
    ptrpgm
    - - - diff --git a/libs/SdFatBeta20120108/html/structpgm.html b/libs/SdFatBeta20120108/html/structpgm.html deleted file mode 100755 index 4b2831c..0000000 --- a/libs/SdFatBeta20120108/html/structpgm.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - -SdFat: pgm Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    pgm Struct Reference
    -
    -
    - -

    type for string in flash - More...

    - -

    #include <ostream.h>

    - -

    List of all members.

    - - - - - - -

    -Public Member Functions

     pgm (char *str)
     pgm (const char *str)

    -Public Attributes

    char * ptr
    -

    Detailed Description

    -

    type for string in flash

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    pgm::pgm (char * str) [inline, explicit]
    -
    -
    -

    constructor

    -
    Parameters:
    - - -
    [in]strinitializer for pointer.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - -
    pgm::pgm (const char * str) [inline, explicit]
    -
    -
    -

    constructor

    -
    Parameters:
    - - -
    [in]strinitializer for pointer.
    -
    -
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    char* pgm::ptr
    -
    -
    -

    Pointer to flash string

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetfill-members.html b/libs/SdFatBeta20120108/html/structsetfill-members.html deleted file mode 100755 index b3dd230..0000000 --- a/libs/SdFatBeta20120108/html/structsetfill-members.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    setfill Member List
    -
    -
    -This is the complete list of members for setfill, including all inherited members. - - -
    csetfill
    setfill(char arg)setfill [inline, explicit]
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetfill.html b/libs/SdFatBeta20120108/html/structsetfill.html deleted file mode 100755 index 3cc5a09..0000000 --- a/libs/SdFatBeta20120108/html/structsetfill.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -SdFat: setfill Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    setfill Struct Reference
    -
    -
    - -

    type for setfill manipulator - More...

    - -

    #include <iostream.h>

    - -

    List of all members.

    - - - - - -

    -Public Member Functions

     setfill (char arg)

    -Public Attributes

    char c
    -

    Detailed Description

    -

    type for setfill manipulator

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    setfill::setfill (char arg) [inline, explicit]
    -
    -
    -

    constructor

    -
    Parameters:
    - - -
    [in]argnew fill character
    -
    -
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    char setfill::c
    -
    -
    -

    fill character

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetprecision-members.html b/libs/SdFatBeta20120108/html/structsetprecision-members.html deleted file mode 100755 index 1b6caec..0000000 --- a/libs/SdFatBeta20120108/html/structsetprecision-members.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    setprecision Member List
    -
    -
    -This is the complete list of members for setprecision, including all inherited members. - - -
    psetprecision
    setprecision(unsigned int arg)setprecision [inline, explicit]
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetprecision.html b/libs/SdFatBeta20120108/html/structsetprecision.html deleted file mode 100755 index e256923..0000000 --- a/libs/SdFatBeta20120108/html/structsetprecision.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -SdFat: setprecision Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    setprecision Struct Reference
    -
    -
    - -

    type for setprecision manipulator - More...

    - -

    #include <iostream.h>

    - -

    List of all members.

    - - - - - -

    -Public Member Functions

     setprecision (unsigned int arg)

    -Public Attributes

    unsigned int p
    -

    Detailed Description

    -

    type for setprecision manipulator

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    setprecision::setprecision (unsigned int arg) [inline, explicit]
    -
    -
    -

    constructor

    -
    Parameters:
    - - -
    [in]argnew precision
    -
    -
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    unsigned int setprecision::p
    -
    -
    -

    precision

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetw-members.html b/libs/SdFatBeta20120108/html/structsetw-members.html deleted file mode 100755 index e039e7d..0000000 --- a/libs/SdFatBeta20120108/html/structsetw-members.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    setw Member List
    -
    -
    -This is the complete list of members for setw, including all inherited members. - - -
    setw(unsigned arg)setw [inline, explicit]
    wsetw
    - - - diff --git a/libs/SdFatBeta20120108/html/structsetw.html b/libs/SdFatBeta20120108/html/structsetw.html deleted file mode 100755 index d52831f..0000000 --- a/libs/SdFatBeta20120108/html/structsetw.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -SdFat: setw Struct Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    setw Struct Reference
    -
    -
    - -

    type for setw manipulator - More...

    - -

    #include <iostream.h>

    - -

    List of all members.

    - - - - - -

    -Public Member Functions

     setw (unsigned arg)

    -Public Attributes

    unsigned w
    -

    Detailed Description

    -

    type for setw manipulator

    -

    Constructor & Destructor Documentation

    - -
    -
    - - - - - - - - -
    setw::setw (unsigned arg) [inline, explicit]
    -
    -
    -

    constructor

    -
    Parameters:
    - - -
    [in]argnew width
    -
    -
    - -
    -
    -

    Member Data Documentation

    - -
    -
    - - - - -
    unsigned setw::w
    -
    -
    -

    width

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/unioncache__t-members.html b/libs/SdFatBeta20120108/html/unioncache__t-members.html deleted file mode 100755 index 3536d95..0000000 --- a/libs/SdFatBeta20120108/html/unioncache__t-members.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - -SdFat: Member List - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    -
    -
    cache_t Member List
    -
    -
    -This is the complete list of members for cache_t, including all inherited members. - - - - - - - - -
    datacache_t
    dircache_t
    fat16cache_t
    fat32cache_t
    fbscache_t
    fbs32cache_t
    fsinfocache_t
    mbrcache_t
    - - - diff --git a/libs/SdFatBeta20120108/html/unioncache__t.html b/libs/SdFatBeta20120108/html/unioncache__t.html deleted file mode 100755 index 4e2b4fc..0000000 --- a/libs/SdFatBeta20120108/html/unioncache__t.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - -SdFat: cache_t Union Reference - - - - - -
    -
    - - - - - - -
    -
    SdFat
    -
    -
    - - -
    -
    - -
    -
    cache_t Union Reference
    -
    -
    - -

    Cache for an SD data block. - More...

    - -

    #include <SdVolume.h>

    -
    -Collaboration diagram for cache_t:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -

    List of all members.

    - - - - - - - - - - -

    -Public Attributes

    uint8_t data [512]
    dir_t dir [16]
    uint16_t fat16 [256]
    uint32_t fat32 [128]
    fat_boot_t fbs
    fat32_boot_t fbs32
    fat32_fsinfo_t fsinfo
    mbr_t mbr
    -

    Detailed Description

    -

    Cache for an SD data block.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    uint8_t cache_t::data[512]
    -
    -
    -

    Used to access cached file data blocks.

    - -
    -
    - -
    -
    - - - - -
    dir_t cache_t::dir[16]
    -
    -
    -

    Used to access cached directory entries.

    - -
    -
    - -
    -
    - - - - -
    uint16_t cache_t::fat16[256]
    -
    -
    -

    Used to access cached FAT16 entries.

    - -
    -
    - -
    -
    - - - - -
    uint32_t cache_t::fat32[128]
    -
    -
    -

    Used to access cached FAT32 entries.

    - -
    -
    - -
    - -
    -

    Used to access to a cached FAT boot sector.

    - -
    -
    - -
    - -
    -

    Used to access to a cached FAT32 boot sector.

    - -
    -
    - -
    - -
    -

    Used to access to a cached FAT32 FSINFO sector.

    - -
    -
    - -
    -
    - - - - -
    mbr_t cache_t::mbr
    -
    -
    -

    Used to access a cached Master Boot Record.

    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - diff --git a/libs/SdFatBeta20120108/html/unioncache__t__coll__graph.png b/libs/SdFatBeta20120108/html/unioncache__t__coll__graph.png deleted file mode 100755 index ed15385bd15742c1f79c9f4cacc1f3894ee16552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9173 zcmaia2Q*w?yZ6yW2%-}`Ax2B|UPlt5jf{wrkq|xlAUa9(mP8Pp5sXe4eURwHAbM}n zqxWd{_}};Y*7vUWyXzin&6soc-e>Qp?cekKc9^dALkcoxG5`Q5)E`0h003VV{C|R! z82ogIjY|Q)h|L~9gaVgWe;L@^SODMv)S=4oHz^xa-aaO7sgm2hM?b%+8z<3sVM069 z2p%4=geR$MWC!Vyp*qS7!^dmQ z_%>2R)$J_Qgdn;mLMl(j#X5hUDEL`Wo|r2@wyNedBl3uD?B0ssJkeuC zux$D4`9`nUzrh!$hHczEe23K|Qm%<_ejD5sE)VuP$Q&-ohp1f`nUcIB1t*RgPgtdb z72VbMJLG`D-h7D+MPCf+aemg$+a3Aql|lBh7o65c2NDCXEvR;(!_PDLvM4Gr<@30o zC6?b`p12KI#~(utkC;_eC$=>+xAG4hNY zl-S3TGDa@0d2D4gd?T>t)ni_6sfJ}63PL)$6XJkeDyAas>#!R^oQ*yQw?^Fbj> zMA6KS^lKRa94h^c<#6hLO%8i3{*(Pf!x)>>@7E)(`1%*}Zf!hp3r(=SNe$~qRSsO^ zfP6@It34#qT;_xj_cC#Dp>~cLX?2G@J%T5jHABFgS89ZGu@;>_BsjJs%|IdWtA8SS zP-dmzWKk$Wfh|3}n*hg$fKY^m3=Qo5)ly*2Ep^QPH4sBu(xXc9TUH`B|8@U6s_2{- z?-$AuOU0W>ktGLzARcn1aXL->&Tb+`rqdJ^7U-hwlf=;QRx?llWH}H6{(CR~xZ(%m zZ>?Ty*A|b9Kr{YhN*wZYUnu%Dmx-f7t)3(Lm7ohP|McL3B&b^4Zl1kHg*D2o&l4UZ zzf!~JDhG5n#6Sh965nsR|9(DKUx2n>>Pp_I`X18O8DZ4J-;DNy-{jaJSxMio2HNHQ z%Sn_0X-;GV@bh=62Vh~lbU)?EsHyw?(%ecyFIEM6!`#s!>0uq^06<5&?M<@-_6mgv z*~&6wQiF0_spum9Q@j6<60cqo>J#-ZXW0@3HM@}IQmM%}W+_7qn!|ryup+$yybi@T zHuB)JlcX;Z(y08V=2uWC z+(zI%I=|EkoUF#30sR-N#UkDMRN07^58x92C<6YCPB5?ecJtl|E(ZPT%2oc)vZ7+T z#&Wo?g2DfC!91b%%l+0J@&m{lD6^fM2q;tx!Tx@QI!6_h;=d&HpW);`{NsAkl}N<3 z7hfmd`__Xb2jkEGc0sV{4LN3t8mlCnGF;#vQM9eUqmuuDBt@BB*#{SwMnCZj#(-Uz ze#}c?PGCa<@!F%(Twbwyy8Bql{TH7MU*BuFknimYFoe$2?{#lZlt$m^h%lyFSHBlA$U0 z7e&XRYSB>w?{$6YN^jp6vPs_$HWd@#*3!vM8+P@#2Y|FIV*%s9znjp13kdU?S2rev zt2;~sZh-tbGt{?~jeBBWQex6oHofNQ3p>wGu&**Yd@f$5(5+7%r5{ZPEB4HZ?RBw5 zm33!)7)h0JSo@3fc*eK;*{j}2GR?hEY@oa3&Vr#qYXiw%VoBtQEZszyzbl8Nd583K52W;@ub>0ZU)H@^j0sk6L`=!t4u%+O^AjC*=8VLzRx&J#jK6 z`J)Va#VGC*FkL^fS$Kg>QRvcJG&K&d}<$^R@o%5~HkCJ8_y?igz%D zb)7_6)oRcZ#ckRzN+hQ1Z6z1@VGU{-HFA^kxAPrKAqLjQmZ!lI)0@46#V;%EFY;IA z)lXm9#;R2A?bIt$YMQPc!HU!P93rw|TBl3-aEeyl=S8~g{1zUr(q8XIxf9a8h=$ha-Gu9n~da-J@ zf*8wVZ@IlZ;ykR$>StM3Oi`@MJ*;D~M)nGm#)ww(7IB<|37^xm${n(}jg-vSWS%_- zkP&y?N6B;(H)?hxAM#a|+dj3HwG^E`a$hS|NiY>A^Axr)HVATPTy$tew)xozSV{*q z;C6ichQe(}B@NCSGTD?y z+k~^_-s%&)7pJprsX68F4?714Qe~y-3AwtHuY7YhF=x)Ld(EAky~rG9BqZQcs5KH* zKA+3|p`PR5g#BViNX#hK!LgLbM|_|{(SPxRwQ*)o(OctVRy6BJ8>L#amHU7l9$^=K zZZy_>UOgnm_n3|sT&ouuDfD&;eu;Q}qUUNb`MVJ_(}~X!!sGHB%F@iW^Q~a zk4YKxX@hMk+(p8(#GT(lDlVha7564L?dvp`3zRP@X4CY3K7uk7beSnVXjAaVQ5*2+ z-)C*wuhPs=Y9f0EWQ5BXTyDoPJO&qmy)pX{N${q|gK7W0`SLRerAoH48t-q>D1fYg zBUO7MZxOfbAwTyl1igY^tRVLpBg&Oi83l@oWG1ki+dgoMXv zw8=P&3nIp-3?a<)%-P<5r7EXwT4V0fJ~=tsFis|s2MYJ92_9&CPjVuZH~ zLAtA@jF57cbiX5~hjK`wfRYz8F=N<`i86p9t?Tq5NwUX&@TB7*#{Q%roaBJBcUPfA zsS+O!JR{Q#T%m|xVT$W|+WjfbP5RJnj{P24cikkMP0_O-lR&n8z25CSSCs7gyN}h_ z`kOU(u?;mWl&hH3M}zJX93OmcLY@c6p_=R*Sq#PUlzzNLs!eWxx|&F7V24{ot1b~K zv~JQ#GN6_0wuLFfvI3d@tYjy2TNh7ZD=cl%bGQ<{aVEp;a=CLjrlZ*_WzL)+l)G^! z)Q{7+WJ+OPdA}gF?6AUsv(FUSYs^kNYyQSA21*dXU%OniEFEq!OtJHUROn_0+pCK^ z&Xi5sblA$b{nn9-oJUyLgl7kfgO7Tkqsl%V-TBJ&_a*MS$?cnXPjmK-VpJ9n0v3A~ z!hS7&H$%VWayXWyFKr?S{@o-g`B{o!}$6lKqWU@p`_2|;YN~6e3+)+Kn>=A zNT*(hYfn0pE4~WdZR3skRI?(C-`PYJz(W`H$DUE1Yrf(+=%2oqy;%7)jKj~lzl0n* zJn{ut?%|8a=9%labTTAfcy`#+b)RM`-FWxoNk7x7yC&9Ef;BU2Hjd1vuG?mzr=siY zh&xViHrJ7zD=YsEUi^`P$>qr^MU6+^%Ho^T8c3EdR`RA}-8fW85lkwUBD!qv@-+SU z-dANJo)XZ-`mx$Kt1RGi0;rK2O=bDDmL3C-+H=_zeLIjjUTtO_A7qVAV{QWk_^R-!>DIb(-@W_SgtuvF zwE)_;FCW(rU|+qEfo_GYY`v z*vSe)YKb9Rv~esl3x^OO6c=9Atf6q@5ukK4Ouw47?%Cg#G5Zi&N{Gr@{Q}c#oiHtQ3b^HOIB?I@G7cwN#ZmpltO5c{6ss zew7>Dpj82=Rw?aa9SwU^@LEICI9&J#*{pVV1qMti9^t3PoBaiV+zZ1rR_Ep|3r@K4 zai$?jZRT*K?wJ5Jl=d$*P@;m=@B6hfFSya0gfrlOiXqozvwb9YH|^~1%_>J0*+R$7 zHr4vMHWHx1xCwPb@~kxTi@wcjidGNJLly*+>n|%K{K#iCAvd1yb|39XmTF}D(*dj1 z7`*a)AUL_9!s+y<*inyO&BCDl0AkvG4d+1WABur`S+xqkUlcUxulqn+98Lan+(Cwh zE~ZsCwWi#+dnZfXE(~BNae8xa78^nYvnfoeYOq0$e3s30DGL``aTy;@#=!;uj#s{y z>vh><9xGS*c%kc`$bIraM@jX66x!B2};g*0iBS) zs<4yyR-Tk@E#scY{k+e}PrfV~Dr4%e!x!06mE|z_W(CiNVSB7`SblT3C|mNU$q8iL z%Iq9~6Hm>Zz6GvOn)28HXnZ>Rl%LwxVlU*>jGc-(ow5*^fKMd$U6q|o<#Y=KfFwJ5$&YN3ozD~o~vTj?sg zbpUN$yVlMO`kEx?Ur}mb&A>j4^QrSdjctE^d|>BTu!n=aZ(tA=o?Kv($cjCaRP1}Wq!7<39Bra_NF4q-JbW|HJ?F6*b zeLyFb2XB%0p5EOKw$5f{-ZQu@j+9SP&RUR*j5RC)% zToB4Xw&SOXV#_e+WYniQErz_`E_5p5x&lK#NVFT69?K){x8aP-qn?#GB-c65|DJ0z zmY=1Gw-S_0%^e3(PaIX$?N3tA1C%L`(*V=Se!1g;O^Q7l8y>z^i8z_m-_nt5R1uu{ zQZUbZwz3283gI%3`Ef}7T2`97&%wTt?XTSrvLnnpn|OV<cU*de-O@Y_heYn3g(!gL9Bsa-%6m;j8IdW|-gd`) z)0#<2j#1O32*s)^eXR+A$3L8Ruc74r{ddWrj4}?rAwb~73ayh(-8LZn6RY5rb}=+{~?^PgO5S*f0MiQ~CCMt3Ogpsl1HM zqLSe_IG`VhZW~EdvGD9jWx=Fg$~L>3QpKg`t;~yDB23FBK1X|&QtjTCxOW2Mlvkzm zi~%RVMH9EByg1hXV*bZ^)z1s_X!T#d3-TQ4jvaY>=vTeE#kWX~Z7x3-kZ`BFi~Y@H zO{Gf@QrZ>ybE;M9p}f!cX4r_bdTYG;eEp_y@rMn}X!9%mk%0$`&1szZe7>AVqYl~E{}|n5*zx6|plO-Da7nXA%WlK9xa)M)j{}Y#q*NY3=MQ@< z?!G6B4*pSpr@i3;oSSeR3N17Ay;eIE1kH{f&+f z6eS4!{VvVQjiCBouljm6OCtgiB1{AqYT#k>!UXJ1LpTQ{TAR)G>D`VflGh9*TU5D@ zCG)>&1U%B)KLN{dV4_q~YrokRM)Y&7NwURcnG8PZW^8OaU1!%t!YsGGhR?%)u&$nJ znl}Q=@iefn`|5i7hd1Y;RjU=#Go86T=R+RG7*1M|vZD%}&7Ad?f~LqA3(B@W7K`@g=o z&82_AJ%kJW0W0ubs$i;$USWPS3RXy~_--J+DBbf~dxKEvje)7lxHE^!lt%{q^?ZM17y?OYGia2&0nhFl6YS?cU} zUBSp4*Em(N-)RN$Rak^6I}BtSIvBw1S{?O`Ab_O5PA$7+fWlEcwLlj(QA5{6pw?N|SD#?awj+)5aW$oQ{SaTVFpk)PldbORCEBa_$u{<4;PjSXGV&Ck#PEa@T zwv_=Ll|>;;JsoI*1vz_*=2Lgp@g3#7&l*)0+0`soBX;_7ckAo!M>YSFPEK<4nXgbD zkPa^^^xgZY+-r0f5&`T#oZQCbh*Imb(5wD_>}zjq>76!&H!A`JXn5Rqn6Z@5zX12w zn{?+A0U`SP`9it&F{_$z`FPye;N%xlL`5U;7YL9C8cI<7bt#nx!3)&-tl&s?-IflD zcSpsLiD)@?=VnEb)Lg1l{~rs=Xt{)Coj1Cv#$cfHl=@{B{!!7~vEKJVV#6Z7FGeZk`t`Pu~h=6X&K?d`w79wCR`Syrmnn zQ5a;clQ6K9gnJYOCPmBwy?-g`u*%S_C$qJ73y0bRHF|>Sbp9SqyYzW0Ts2e;ld zQu}rxb6&44w#@2{dJw3+)|<@+GuMq!%q4gqNqg*#$F>Vq-1}tb_#68blV61eda@h=xSillNUZ+fnusKue*9tU$nvMfZa*a!Q>kOlZN zt1jbd=>1(9Z(fJj*38TSi}vB;xKH4gko$`%U+cERWz*m{gDW$ybzSq^F0}s`XvpME zdlJh8jRScrbR;wHrf0&k;T~bNgstpE#;@c@gj*LamGL9|WoPSEy*^Je8Px2LEb*Q` zY%Y5O?sAIPp!{V%+8~s!&rbFw+9Vrg zfNxD)icrfE)*3s&Y8>E$D>4h6=KK)iF20Gao%FaJJ&w}=LaXQOx@uBv2PrU?@8_+Q z_aOi~@jZ$r9W{#sYp!Fb?C_UdU6c`=C^92yeg*rM-D0W?0;K{V;wrV&5L5&aAuvgj z;eY$f@d`!qa{bdh3j+|rAu{5Ria{sK%OeLNZW4YB!5e0X9e&{Nq&sDYGhezuvJD;w zrYS!W;HX8vx}UST%uLwHUbfNu6FxMZ<^V2QMlh{O+p6KD$K#6i@^Fsu7kYPy_dhUP~S)&rAb>j4$uLc zg6-cz(ceJEOTR>2SDF+xlYW2nOs{045Xx0;cB#egTf%!Q8G`Vk2q@?D8o0rGHl#O` z;&eHcA^aq+fFmnc*&+u2NM%3A223NQ=Ce(hsS|&IgqgmBT1VBP+Qx{Ub-i$+ak+}^Nc)C~#$ z=W3VPU{xjW^Ioy|73ycwBo+!;F={Nij`C^;?UEP-yCDx!w(YVTJm;?@N`l|Xu39m6 z6Pv+3jMxv%&=(|##cS%t8bIMJpk(@u3vHRc)JuM;W@)O?U5#wn7;62QYwM3u_{~;; z0ujSce4!1eW}Rdlcs^i<&=w^#$l@aWw7>USpOx0FT8~cQnJWGnn-XyK#+m*sn5ks7 z{bFk=3D*#si??B>+Ks-4Gy}Ymno>N!*w@&5ec~~W3g0-X>j_Z_o_#d{;_Zr2_ipfG z+PF|#M$k}YDh`86bkao6Q!>qY8kUnsMPIHm=rqVy{yp(Oz1Z@&^tzY6N`zlM>fBS; z;Im~z;=fYfD0i06fe`vrRgpF=?=*U$$W7D;0K7VhqR$^bP(1RQ*D1lT#(ePQKAc49~sah0RBU(F6j8J^-w<#9_T(`~ok|!@7}ghrR-2ez%5? zqft35TdEvhVEKBjrAb+>ci}Ui>;CvcV|?T|PVKSInZ0@E(|goIbRca9Pv2ikc5JKn z+|yjXXWJZ1QN0*%3~a84-o4&^b@YOZEB1PK%j#8i8&bW=H#uH6dD4Y}|z!fC@FU}%~9<1$=wDm}6 zt(CqWc$M5cN`4ag5DFJy@;atNqkhATai zGm)NqONqFbgTWLmPThi4z~l%ujQ$GdEPP`XGS{J^j$;7}3nI}(l+=kWH0ZGZ`P9R| zvz?C62k;Om=x;2V%V=UQk^Fob&1DYMS}S-sVu({em1Nd>KsrA#zrk9D;D4Z>Vfx3H Zf8ywmw#4q6fai1obv12hvC50L{{_9Bp0fY| diff --git a/libs/SdFatBeta20120108/readme.txt b/libs/SdFatBeta20120108/readme.txt deleted file mode 100755 index 9d03a65..0000000 --- a/libs/SdFatBeta20120108/readme.txt +++ /dev/null @@ -1,170 +0,0 @@ -For those who don't like too much documentation read QuickStart.txt. - -The Arduino SdFat library provides read/write access to FAT16/FAT32 -file systems on SD/SDHC flash cards. - -To use this library place the SdFat folder into the libraries -subfolder in your main sketches folder. You may need to create -the libraries folder. Restart the Arduino IDE if it was open. - -SdFat assumes chip select for the SD card is the hardware SS pin. On a -168/328 Arduino this is pin 10 and on a Mega this is pin 53. If you are -using another pin for chip select you will need call -SdFat::init(sckRateID, chipSelectPin) with second parameter set to the -chip select pin. - -If you have a shield like the SparkFun shield that uses pin 8 for chip -select you would change the line: - sd.init(SPI_HALF_SPEED); -to - sd.init(SPI_HALF_SPEED, 8); - -If the example uses - sd.init(); -change it to: - sd.init(SPI_FULL_SPEED, 8); - - -You can also edit Sd2Card.h and change the default value for chip select. -Replace SS_PIN with the new value for chip select in the following definition. - -/** The default chip select pin for the SD card is SS. */ -uint8_t const SD_CHIP_SELECT_PIN = SS_PIN; - - -If you wish to report bugs or have comments, send email to -fat16lib@sbcglobal.net - -Read changes.txt if you have used previous releases of this library. - -Read troubleshooting.txt for common hardware problems. - -Please read the html documentation for this library. Start with -html/index.html and read the Main Page. Next go to the Classes tab and -read the documentation for the classes SdFat, SdFile, ifstream, ofstream. - -The SdFile class implements binary files simular to Linux's stdio. - -The new classes ifstream, ofstream, istream, and ostream follow the -C++ iostream standard when possible. - -Many examples are included in the SdFat/examples folder. - -There are many tutorials and much documentation about using C++ iostreams. - -http://www.cplusplus.com/ is a good C++ site. - -Arduinos access SD cards using the cards SPI protocol. PCs, Macs, and -most consumer devices use the 4-bit parallel SD protocol. A card that -functions well on A PC or Mac may not work well on the Arduino. - -Most cards have good SPI read performance but cards vary widely in SPI -write performance. Write performance is limited by how efficiently the -card manages internal erase/remapping operations. The Arduino cannot -optimize writes to reduce erase operations because of its limited RAM. - -SanDisk cards generally have good write performance. They seem to have -more internal RAM buffering than other cards and therefore can limit -the number of flash erase operations that the Arduino forces due to its -limited RAM. - - -The hardware interface to the SD card should not use a resistor based -level shifter. SdFat sets the SPI bus frequency to 8 MHz which results -in signal rise times that are too slow for the edge detectors in many -newer SD card controllers when resistor voltage dividers are used. - -The 5 to 3.3 V level shifter for 5 V arduinos should be IC based like -the 74HC4050N based circuit shown in the file SdLevel.png. The -Adafruit Wave Shield uses a 74AHC125N. Gravitech sells SD and MicroSD -Card Adapters based on the 74LCX245. - -If you are using a resistor based level shifter and are having problems -try setting the SPI bus frequency to 4 MHz. This can be done by using -card.init(SPI_HALF_SPEED) to initialize the SD card. - -A feature to use software SPI is available. Software SPI is slower -than hardware SPI but allows any digital pins to be used. See -SdFatConfig.h for software SPI definitions. - -An unmodified Adafruit GPS shield can be use on an Arduino Mega -by defining MEGA_SOFT_SPI in SdFatConfig.h. - - -This library was designed to be used on 328 Arduinos but smaller -applications can be written for 168 Arduinos. This library compiles -for the Mega Arduino but has not been thoroughly tested. - -For the AtMega168 be sure to reduce the serial buffer size by setting -RX_BUFFER_SIZE to 32 or less in -hardware/cores/arduino/HardwareSerial.cpp. -I use 16. - - -The best way to restore an SD card's format is to use SDFormatter -which can be downloaded from: - -http://www.sdcard.org/consumers/formatter/ - -SDFormatter aligns flash erase boundaries with file -system structures which reduces write latency and file system overhead. - -SDFormatter does not have an option for FAT type so it may format -small cards as FAT12. - -The example sketch SdFatFormatter.pde will format smaller cards FAT16 -so they can be used with SdFat. - - -The SdFat/examples directory has the following sketches. Older examples -are in the extras/examplesV1 folder. - -AnalogLogger.pde - A simple data logger for one or more analog pins. - -append.pde - This sketch creates a large file by successive - open/write/close operations. - -average.pde - A demonstration of parsing floating point numbers - -bench.pde - A read/write benchmark. - -bufstream.pde - ibufsteam to parse a line and obufstream to format a line - -cin_cout.pde - Demo of ArduinoInStream and ArduinoOutStream - -eventlog.pde - Append a line to a file - demo of pathnames and streams - -fgets.pde - Demo of the fgets read line/string function. - -format.pde - Print a table with various formatting options - -getline.pde - Example of getline from section 27.7.1.3 of the C++ standard - -HelloWorld.pde - Create a serial output stream - -OpenNext.pde - Open all files in the root dir and print their filename - -QuickStart.pde - A sketch to quickly test your SD card and SD shield/module - -readCSV.pde - Read a comma-seperated value file using iostream extractors - -readlog.pde - Read file. Demo of pathnames and current working directory - -ReadWriteSdFat.pde - SdFat version of Arduino SD ReadWrite example - -rename.pde - A demo of SdFat::rename(old, new) and SdFile::rename(dirFile, newPath) - -SdFormatter - This sketch will format an SD or SDHC card. - -SdInfo - Initialize an SD card and analyze its structure for trouble shooting - -TwoCards.pde - Example using two SD cards - -To access these examples from the Arduino development environment -go to: File -> Examples -> SdFat -> - -Compile, upload to your Arduino and click on Serial Monitor to run -the example. - - -Updated 01 Aug 2011 diff --git a/libs/SerialPort-master/.gitattributes b/libs/SerialPort-master/.gitattributes new file mode 100755 index 0000000..412eeda --- /dev/null +++ b/libs/SerialPort-master/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/libs/SerialPort-master/.gitignore b/libs/SerialPort-master/.gitignore new file mode 100755 index 0000000..b9d6bd9 --- /dev/null +++ b/libs/SerialPort-master/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/libs/SerialPort-master/Doxyfile b/libs/SerialPort-master/Doxyfile new file mode 100755 index 0000000..548822b --- /dev/null +++ b/libs/SerialPort-master/Doxyfile @@ -0,0 +1,1751 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "Serial Port" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = C:/Users/bill/Documents + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = YES + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = YES + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 28 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../Arduino/libraries/SerialPort \ + MainPage/SerialPortMainPage.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = DOXYGEN \ + ARDUINO=100 \ + __attribute__(x)= + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/libs/SerialPort-master/MainPage/SerialPortMainPage.h b/libs/SerialPort-master/MainPage/SerialPortMainPage.h new file mode 100755 index 0000000..9af4865 --- /dev/null +++ b/libs/SerialPort-master/MainPage/SerialPortMainPage.h @@ -0,0 +1,163 @@ +/* Arduino SerialPort Library + * Copyright (C) 2011 by William Greiman + * + * This file is part of the Arduino SerialPort Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino SerialPort Library. If not, see + * . + */ +/** +\mainpage Arduino %SerialPort Library +
    Copyright © 2011 by William Greiman +
    + +\section Intro Introduction +This library provide more options for buffering, character size, parity and +error checking than the standard Arduino HardwareSerial class for AVR Arduino +boards. + +The API was designed to be backward compatible with Arduino Serial. +A number of functions have been added to the API. + +To install the this library, copy the SerialPort folder to the +your libraries folder. + +Please explore the above tabs for detailed documentation. + +@section howto Quick How To + +This was posted in the Arduino forum by user sixeyes. +It is a nice introduction to to the SerialPort library. + +The core Arduino based serial code looks like this: + +@code +void setup() +{ + Serial.begin(9600); + Serial.println("Using Arduino supplied HardwareSerial"); +} + +void loop() +{ +} +@endcode + +So if you've copied the SerialPort folder from the zip file into your +libraries folder (So you have Arduino/libraries/SerialPort/SerialPort.h +and Arduino/libraries/SerialPort/SerialPort.cpp) +you can write the following code instead + +@code +#include + +SerialPort<0, 32, 256> port; + +void setup() +{ + port.begin(9600); + port.println("Using SerialPort class"); +} + +void loop() +{ +} +@endcode + +Just remember to do the following and you should be alright: + + - Include + - Declare new Serial port including its parameters + - Initialise (call begin()) and use the new serial port (NOT Serial) + . +The configuration of the serial port looks odd to anyone not familiar with +C++ templates, but it's easy to explain. The first parameter inside the +angle brackets is the serial port number. Unless you've got a board with +more than one serial port (e.g. Arduino Mega) this will always be 0. The +second parameter is the size of the receive buffer in bytes and the third +is the size of the transmit buffer in bytes. + +You can ignore the stuff about editing SerialPort.h. You'll only need this +if you're short of flash memory at which point you can come back and ask +more questions. + +If you do by chance refer to both the new SerialPort and HardwareSerial in +the same sketch you'll get some error messages about duplicate interrupt +vectors. + +Hope that helps. + +Iain + +@section logger SerialPort Sd Logger + +The folder, SerialPortLogger, contains a demo data logging sketch that is +capable of logging serial data to an SD card at up to 115200 baud. + +The two programs, SerialPortLogger.ino and SerialDataSource.ino, demonstrate +high speed logging of serial data. + +For more information see the readme.txt file in the SerialPortLogger folder. + +@section examples Examples + +A number of examples are included in the SerialPort/examples folder. + +ArduinoSize - Print the amount of free RAM using Arduino HardwareSerial. + +ArduinoTest - Arduino HardwareSerial version of test sketch. + +BufferedSize - Print the amount of free RAM using SerialPort with + buffered RX and TX. + +BufferedTest - Test SerialPort with buffered RX and TX. + +HelloWorld - Simple first example. + +MegaTest - Test all ports on a Mega using SerialPort. + +MegaTestArduino - Test all ports on a Mega using Arduino HardwareSerial. + +ReadWriteTest - Test that ring buffer overrun can be detected. + +UnbufferedSize - Print the amount of free RAM using SerialPort with no buffers. + +UnbufferedTest - Test SerialPort with no buffering. + +WriteFlash - Test write() for a flash string. + +@section config Configuration Options + +You can can save flash if your buffers are always smaller than 254 bytes +by setting ALLOW_LARGE_BUFFERS zero in SerialPort.h. This will also +increase performance slightly. + +You can save substantial flash by disabling the faster versions of +write(const char*) and write(const uint8_t*, size_t) by setting +USE_WRITE_OVERRIDES zero in SerialPort.h. + +If you only use unbuffered TX, edit SerialPort.h and set BUFFERED_TX zero. +This will save some flash and RAM by preventing the TX ISR from being +loaded. TxBufSize must always be zero in SerialPort constructors if +BUFFERED_TX is zero. + +If you only do output or if input buffering is not required, edit +SerialPort.h and set BUFFERED_RX zero. This will save some flash +and RAM by preventing the RX ISR from being loaded. RxBufSize must +always be zero in SerialPort constructors if BUFFERED_RX is zero. + +You can disable RX error functions by setting ENABLE_RX_ERROR_CHECKING +zero in SerialPort.h This will save a tiny bit of flash, RAM, and +speedup receive a little. +*/ \ No newline at end of file diff --git a/libs/SerialPortBeta20120106/SerialPort.html b/libs/SerialPort-master/SerialPort.html similarity index 100% rename from libs/SerialPortBeta20120106/SerialPort.html rename to libs/SerialPort-master/SerialPort.html diff --git a/libs/SerialPortBeta20120106/SerialPort/SerialPort.cpp b/libs/SerialPort-master/SerialPort/SerialPort.cpp similarity index 78% rename from libs/SerialPortBeta20120106/SerialPort/SerialPort.cpp rename to libs/SerialPort-master/SerialPort/SerialPort.cpp index 44b62db..909f641 100755 --- a/libs/SerialPortBeta20120106/SerialPort/SerialPort.cpp +++ b/libs/SerialPort-master/SerialPort/SerialPort.cpp @@ -17,9 +17,16 @@ * along with the Arduino SerialPort Library. If not, see * . */ +/** + * @file + * @brief Serial Port class + */ #include //------------------------------------------------------------------------------ -/** \return the number of bytes in the ring buffer */ +/** @return The number of bytes in the ring buffer. + * + * @note This function must not be called with interrupts disabled. + */ int SerialRingBuffer::available() { uint8_t s = SREG; cli(); @@ -28,7 +35,10 @@ int SerialRingBuffer::available() { return n < 0 ? size_ + n : n; } //------------------------------------------------------------------------------ -/** Discard all data in the ring buffer. */ +/** Discard all data in the ring buffer. + * + * @note This function must not be called with interrupts disabled. + */ void SerialRingBuffer::flush() { uint8_t s = SREG; cli(); @@ -36,9 +46,10 @@ void SerialRingBuffer::flush() { SREG = s; } //------------------------------------------------------------------------------ -/** get the next byte - * \param[in] b location for the returned byte - * \return true if a byte was returned or false if the ring buffer is empty +/** Get the next byte from the ring buffer. + * + * @param[in] b location for the returned byte + * @return @c true if a byte was returned or @c false if the ring buffer is empty */ bool SerialRingBuffer::get(uint8_t* b) { buf_size_t t = tail_; @@ -50,12 +61,13 @@ bool SerialRingBuffer::get(uint8_t* b) { //------------------------------------------------------------------------------ /** * Get the maximum number of contiguous bytes from the ring buffer - * with one call to memcpy. Do not use this function with interrupts - * disabled. + * with one call to memcpy. + * + * @note This function must not be called with interrupts disabled. * - * \param[in] b pointer to data - * \param[in] n number of bytes to transfer from the ring buffer - * \return number of bytes transferred + * @param[in] b Pointer to the data. + * @param[in] n Number of bytes to transfer from the ring buffer. + * @return Number of bytes transferred. */ SerialRingBuffer::buf_size_t SerialRingBuffer::get(uint8_t* b, buf_size_t n) { buf_size_t nr; @@ -77,9 +89,9 @@ SerialRingBuffer::buf_size_t SerialRingBuffer::get(uint8_t* b, buf_size_t n) { return nr; } //------------------------------------------------------------------------------ -/** initialize the ring buffer - * \param[in] b buffer for data - * \param[in] s size of the buffer +/** Initialize the ring buffer. + * @param[in] b Buffer for the data. + * @param[in] s Size of the buffer. */ void SerialRingBuffer::init(uint8_t* b, buf_size_t s) { buf_ = b; @@ -87,20 +99,22 @@ void SerialRingBuffer::init(uint8_t* b, buf_size_t s) { head_ = tail_ = 0; } //------------------------------------------------------------------------------ -/** peek at the next byte in the ring buffer - * \return the next byte that would ber read or -1 if the ring buffer is empty +/** Peek at the next byte in the ring buffer. + * @return The next byte that would be read or -1 if the ring buffer is empty. */ int SerialRingBuffer::peek() { return empty() ? -1 : buf_[tail_]; } //------------------------------------------------------------------------------ -/** put a byte into the ring buffer - * \param[in] b the byte - * \return true if byte was transferred or false if the ring buffer is full +/** Put a byte into the ring buffer. + * + * @param[in] b the byte + * @return @c true if byte was transferred or + * @c false if the ring buffer is full. */ bool SerialRingBuffer::put(uint8_t b) { buf_size_t h = head_; - // OK to store here even if ring is full + // OK to store here even if ring is full. buf_[h++] = b; if (h >= size_) h = 0; if (h == tail_) return false; @@ -109,12 +123,14 @@ bool SerialRingBuffer::put(uint8_t b) { } //------------------------------------------------------------------------------ /** - * Put the maximum number of contiguous bytes into the ring buffer + * Put the maximum number of contiguous bytes into the ring buffer. * with one call to memcpy. * - * \param[in] b pointer to data - * \param[in] n number of bytes to transfer to the ring buffer - * \return number of bytes transferred + * @note This function must not be called with interrupts disabled. + * + * @param[in] b pointer to data. + * @param[in] n number of bytes to transfer to the ring buffer. + * @return number of bytes transferred. */ SerialRingBuffer::buf_size_t SerialRingBuffer::put(const uint8_t* b, buf_size_t n) { @@ -137,12 +153,14 @@ SerialRingBuffer::buf_size_t } //------------------------------------------------------------------------------ /** - * Put the maximum number of contiguous bytes into the ring buffer + * Put the maximum number of contiguous bytes into the ring buffer. * with one call to memcpy. * - * \param[in] b pointer to data - * \param[in] n number of bytes to transfer to the ring buffer - * \return number of bytes transferred + * @note This function must not be called with interrupts disabled. + * + * @param[in] b pointer to data. + * @param[in] n number of bytes to transfer to the ring buffer. + * @return number of bytes transferred. */ SerialRingBuffer::buf_size_t SerialRingBuffer::put_P(PGM_P b, buf_size_t n) { cli(); @@ -190,19 +208,25 @@ inline static void rx_isr(uint8_t n) { // SerialRingBuffer rxbuf0; #if defined(USART_RX_vect) ISR(USART_RX_vect) { + rx_isr(0); +} #elif defined(SIG_USART0_RECV) ISR(SIG_USART0_RECV) { + rx_isr(0); +} #elif defined(SIG_UART0_RECV) ISR(SIG_UART0_RECV) { + rx_isr(0); +} #elif defined(USART0_RX_vect) ISR(USART0_RX_vect) { + rx_isr(0); +} #elif defined(SIG_UART_RECV) ISR(SIG_UART_RECV) { -#else // vector -#error No ISR rx vector for UART0 -#endif // vector rx_isr(0); } +#endif // vector USART0 #ifdef USART1_RX_vect ISR(USART1_RX_vect) { rx_isr(1); @@ -237,17 +261,22 @@ inline static void tx_isr(uint8_t n) { } #if defined(UART0_UDRE_vect) ISR(UART0_UDRE_vect) { + tx_isr(0); +} #elif defined(UART_UDRE_vect) ISR(UART_UDRE_vect) { + tx_isr(0); +} #elif defined(USART0_UDRE_vect) ISR(USART0_UDRE_vect) { + tx_isr(0); +} #elif defined(USART_UDRE_vect) ISR(USART_UDRE_vect) { -#else -#error N0 ISR tx vector for UART0 -#endif tx_isr(0); } +#endif // USART0 TX + #ifdef USART1_UDRE_vect ISR(USART1_UDRE_vect) { tx_isr(1); diff --git a/libs/SerialPortBeta20120106/SerialPort/SerialPort.h b/libs/SerialPort-master/SerialPort/SerialPort.h similarity index 73% rename from libs/SerialPortBeta20120106/SerialPort/SerialPort.h rename to libs/SerialPort-master/SerialPort/SerialPort.h index 3efeec2..4f028ad 100755 --- a/libs/SerialPortBeta20120106/SerialPort/SerialPort.h +++ b/libs/SerialPort-master/SerialPort/SerialPort.h @@ -1,5 +1,5 @@ /* Arduino SerialPort Library - * Copyright (C) 2011 by William Greiman + * Copyright (C) 2012 by William Greiman * * This file is part of the Arduino SerialPort Library * @@ -17,18 +17,19 @@ * along with the Arduino SerialPort Library. If not, see * . */ - /** - * \file - * \brief SerialPort class +/** + * @file + * @brief Serial Port class */ #ifndef SerialPort_h #define SerialPort_h //------------------------------------------------------------------------------ /** SerialPort version YYYYMMDD */ -#define SERIAL_PORT_VERSION 20120106 +#define SERIAL_PORT_VERSION 20140216 //------------------------------------------------------------------------------ /** * Set ALLOW_LARGE_BUFFERS to zero to limit buffer sizes to 254 bytes. + * * ALLOW_LARGE_BUFFERS controls whether uint16_t or uint8_t will be * used for buffer indices. */ @@ -36,13 +37,15 @@ //------------------------------------------------------------------------------ /** * Set USE_WRITE_OVERRIDES to zero to use the Arduino Print version - * of write(const char*) and write(const uint8_t*, size_t). This will - * save some flash but is much slower. + * of write(const char*) and write(const uint8_t*, size_t). + * + * This will save some flash but is much slower. */ #define USE_WRITE_OVERRIDES 1 //------------------------------------------------------------------------------ /** * Set BUFFERED_RX zero to save flash and RAM if no RX buffering is used. + * * RxBufSize must be zero in all SerialPort constructors if * BUFFERED_RX is zero. */ @@ -50,6 +53,7 @@ //------------------------------------------------------------------------------ /** * Set BUFFERED_TX zero to save flash and RAM if no TX buffering is used. + * * TxBufSize must be zero in all SerialPort constructors if * BUFFERED_TX is zero. */ @@ -72,14 +76,7 @@ //------------------------------------------------------------------------------ #include #include -#if ARDUINO < 100 -#include -class __FlashStringHelper; -#define F(string_literal)\ - (reinterpret_cast<__FlashStringHelper *>(PSTR(string_literal))) -#else // ARDUINO < 100 #include -#endif // ARDUINO < 100 //------------------------------------------------------------------------------ #if defined(UCSR3A) static const uint8_t SERIAL_PORT_COUNT = 4; @@ -90,11 +87,11 @@ static const uint8_t SERIAL_PORT_COUNT = 2; #elif defined(UCSR0A) || defined(UCSRA) static const uint8_t SERIAL_PORT_COUNT = 1; #else -#error no serial ports +#error no serial ports. #endif //------------------------------------------------------------------------------ #ifdef UCSR0A -// bits in UCSRA +// Bits in UCSRA. static const uint8_t M_RXC = 1 << RXC0; static const uint8_t M_TXC = 1 << TXC0; static const uint8_t M_UDRE = 1 << UDRE0; @@ -102,20 +99,20 @@ static const uint8_t M_FE = 1 << FE0; static const uint8_t M_DOR = 1 << DOR0; static const uint8_t M_UPE = 1 << UPE0; static const uint8_t M_U2X = 1 << U2X0; -// bits in UCSRB +// Bits in UCSRB. static const uint8_t M_RXCIE = 1 << RXCIE0; static const uint8_t M_TXCIE = 1 << TXCIE0; static const uint8_t M_UDRIE = 1 << UDRIE0; static const uint8_t M_RXEN = 1 << RXEN0; static const uint8_t M_TXEN = 1 << TXEN0; -// bits in UCSRC +// Bits in UCSRC. static const uint8_t M_UPM0 = 1 << UPM00; static const uint8_t M_UPM1 = 1 << UPM01; static const uint8_t M_USBS = 1 << USBS0; static const uint8_t M_UCSZ0 = 1 << UCSZ00; static const uint8_t M_UCSZ1 = 1 << UCSZ01; #elif defined(UCSRA) // UCSR0A -// bits in UCSRA +// Bits in UCSRA. static const uint8_t M_RXC = 1 << RXC; static const uint8_t M_TXC = 1 << TXC; static const uint8_t M_UDRE = 1 << UDRE; @@ -123,67 +120,91 @@ static const uint8_t M_FE = 1 << FE; static const uint8_t M_DOR = 1 << DOR; static const uint8_t M_UPE = 1 << PE; static const uint8_t M_U2X = 1 << U2X; -// bits in UCSRB +// Bits in UCSRB. static const uint8_t M_RXCIE = 1 << RXCIE; static const uint8_t M_TXCIE = 1 << TXCIE; static const uint8_t M_UDRIE = 1 << UDRIE; static const uint8_t M_RXEN = 1 << RXEN; static const uint8_t M_TXEN = 1 << TXEN; -// bits in UCSRC +// Bits in UCSRC. static const uint8_t M_UPM0 = 1 << UPM0; static const uint8_t M_UPM1 = 1 << UPM1; static const uint8_t M_USBS = 1 << USBS; static const uint8_t M_UCSZ0 = 1 << UCSZ0; static const uint8_t M_UCSZ1 = 1 << UCSZ1; +#elif defined(UCSR1A) // UCSR0A +// Bits in UCSRA. +static const uint8_t M_RXC = 1 << RXC1; +static const uint8_t M_TXC = 1 << TXC1; +static const uint8_t M_UDRE = 1 << UDRE1; +static const uint8_t M_FE = 1 << FE1; +static const uint8_t M_DOR = 1 << DOR1; +static const uint8_t M_UPE = 1 << UPE1; +static const uint8_t M_U2X = 1 << U2X1; +// Bits in UCSRB. +static const uint8_t M_RXCIE = 1 << RXCIE1; +static const uint8_t M_TXCIE = 1 << TXCIE1; +static const uint8_t M_UDRIE = 1 << UDRIE1; +static const uint8_t M_RXEN = 1 << RXEN1; +static const uint8_t M_TXEN = 1 << TXEN1; +// Bits in UCSRC. +static const uint8_t M_UPM0 = 1 << UPM10; +static const uint8_t M_UPM1 = 1 << UPM11; +static const uint8_t M_USBS = 1 << USBS1; +static const uint8_t M_UCSZ0 = 1 << UCSZ10; +static const uint8_t M_UCSZ1 = 1 << UCSZ11; #else // UCSR0A #error no serial ports #endif // UCSR0A //------------------------------------------------------------------------------ -/** use one stop bit */ +/** Use one stop bit. */ static const uint8_t SP_1_STOP_BIT = 0; -/** use two stop bits */ +/** Use two stop bits. */ static const uint8_t SP_2_STOP_BIT = M_USBS; -/** disable parity bit */ +/** No parity bit. */ static const uint8_t SP_NO_PARITY = 0; -/** use even parity */ +/** Use even parity. */ static const uint8_t SP_EVEN_PARITY = M_UPM1; -/** use odd parity */ +/** Use odd parity. */ static const uint8_t SP_ODD_PARITY = M_UPM0 | M_UPM1; -/** use 5-bit character size */ +/** Use 5-bit character size. */ static const uint8_t SP_5_BIT_CHAR = 0; -/** use 6-bit character size */ +/** Use 6-bit character size. */ static const uint8_t SP_6_BIT_CHAR = M_UCSZ0; -/** use 7-bit character size */ +/** Use 7-bit character size. */ static const uint8_t SP_7_BIT_CHAR = M_UCSZ1; -/** use 8-bit character size */ +/** Use 8-bit character size. */ static const uint8_t SP_8_BIT_CHAR = M_UCSZ0 | M_UCSZ1; -/** mask for all options bits */ +/** Mask for all options bits. */ static const uint8_t SP_OPT_MASK = M_USBS | M_UPM0 | M_UPM1 |M_UCSZ0 | M_UCSZ1; -/** USART frame error bit */ +/** USART framing error bit. */ static const uint8_t SP_FRAMING_ERROR = M_FE; -/** USART RX data overrun error bit */ +/** USART RX data overrun error bit. */ static const uint8_t SP_RX_DATA_OVERRUN = M_DOR; -/** USART parity error bit */ +/** USART parity error bit. */ static const uint8_t SP_PARITY_ERROR = M_UPE; -/** mask for all error bits in UCSRA */ +/** Mask for all error bits in UCSRA. */ static const uint8_t SP_UCSRA_ERROR_MASK = M_FE | M_DOR | M_UPE; -/** RX ring buffer full overrun */ +/** RX ring buffer full overrun. */ static const uint8_t SP_RX_BUF_OVERRUN = 1; +#if 1 & ((1 << FE0) | (1 << DOR0) |(1 << UPE0)) +#error Invalid SP_RX_BUF_OVERRUN bit +#endif // SP_RX_BUF_OVERRUN //------------------------------------------------------------------------------ /** - * \class UsartRegister - * \brief addresses of USART registers + * @class UsartRegister + * @brief Addresses of USART registers. */ struct UsartRegister { - volatile uint8_t* ucsra; /**< USART Control and Status Register A */ - volatile uint8_t* ucsrb; /**< USART Control and Status Register B */ - volatile uint8_t* ucsrc; /**< USART Control and Status Register C */ - volatile uint8_t* ubrrl; /**< USART Baud Rate Register Low */ - volatile uint8_t* ubrrh; /**< USART Baud Rate Register High */ - volatile uint8_t* udr; /**< USART I/O Data Register */ + volatile uint8_t* ucsra; /**< USART Control and Status Register A. */ + volatile uint8_t* ucsrb; /**< USART Control and Status Register B. */ + volatile uint8_t* ucsrc; /**< USART Control and Status Register C. */ + volatile uint8_t* ubrrl; /**< USART Baud Rate Register Low. */ + volatile uint8_t* ubrrh; /**< USART Baud Rate Register High. */ + volatile uint8_t* udr; /**< USART I/O Data Register. */ }; //------------------------------------------------------------------------------ /** @@ -219,8 +240,8 @@ static const UsartRegister usart[] = { }; //------------------------------------------------------------------------------ /** - * \class SerialRingBuffer - * \brief ring buffer for RX and TX data + * @class SerialRingBuffer + * @brief Ring buffer for RX and TX data. */ class SerialRingBuffer { public: @@ -231,7 +252,7 @@ class SerialRingBuffer { typedef uint8_t buf_size_t; #endif // ALLOW_LARGE_BUFFERS int available(); - /** \return true if the ring buffer is empty else false */ + /** @return @c true if the ring buffer is empty else @c false. */ bool empty() {return head_ == tail_;} void flush(); bool get(uint8_t* b); @@ -248,49 +269,52 @@ class SerialRingBuffer { buf_size_t size_; /**< Size of the buffer. Capacity is size -1. */ }; //------------------------------------------------------------------------------ -/** RX ring buffers */ +/** RX ring buffers. */ extern SerialRingBuffer rxRingBuf[]; -/** TX ring buffers */ +/** TX ring buffers. */ extern SerialRingBuffer txRingBuf[]; -/** RX error bits */ +/** RX error bits. */ extern uint8_t rxErrorBits[]; //------------------------------------------------------------------------------ -/** Cause error message for bad port number - * \return Never returns since it is never called +/** Cause error message for bad port number. + * @return Never returns since it is never called. */ uint8_t badPortNumber(void) __attribute__((error("Bad port number"))); -/** Cause error message for bad port number - * \return Never returns since it is never called +/** Cause error message for bad port number. + * @return Never returns since it is never called. */ uint8_t badRxBufSize(void) __attribute__((error("RX buffer size too large"))); -/** Cause error message for bad port number - * \return Never returns since it is never called +/** Cause error message for bad port number. + * @return Never returns since it is never called. */ uint8_t badTxBufSize(void) __attribute__((error("TX buffer size too large"))); //------------------------------------------------------------------------------ /** - * \class SerialPort - * \brief class for avr hardware USART ports + * @class SerialPort + * @brief Class for avr hardware USART ports. */ template class SerialPort : public Stream { public: //---------------------------------------------------------------------------- + /** Constructor */ SerialPort() { - if (PortNumber >= SERIAL_PORT_COUNT) badPortNumber(); + if (PortNumber >= SERIAL_PORT_COUNT || !usart[PortNumber].ucsra) { + badPortNumber(); + } if (sizeof(SerialRingBuffer::buf_size_t) == 1) { - if (RxBufSize >254) badRxBufSize(); - if (TxBufSize >254) badTxBufSize(); + if (RxBufSize > 254) badRxBufSize(); + if (TxBufSize > 254) badTxBufSize(); } if (RxBufSize) rxRingBuf[PortNumber].init(rxBuffer_, sizeof(rxBuffer_)); if (TxBufSize) txRingBuf[PortNumber].init(txBuffer_, sizeof(txBuffer_)); } //---------------------------------------------------------------------------- /** - * \return The number of bytes (characters) available for reading from + * @return The number of bytes (characters) available for reading from * the serial port. */ int available(void) { @@ -304,31 +328,23 @@ class SerialPort : public Stream { /** * Sets the data rate in bits per second (baud) for serial data transmission. * - * \param[in] baud rate in bits per second (baud) - * \param[in] options constructed by a bitwise-inclusive + * @param[in] baud Rate in bits per second (baud). + * @param[in] options constructed by a bitwise-inclusive * OR of values from the following list. Choose one value for stop bit, * parity, and character size. * + * - SP_1_STOP_BIT - Use one stop bit (default if stop bit not specified). + * - SP_2_STOP_BIT - Use two stop bits. + * - SP_NO_PARITY - No parity bit (default if parity not specified). + * - SP_EVEN_PARITY - Add even parity bit. + * - SP_ODD_PARITY - Add odd parity bit. + * - SP_5_BIT_CHAR - Use 5-bit characters (default if size not specified). + * - SP_6_BIT_CHAR - Use 6-bit characters. + * - SP_7_BIT_CHAR - Use 7-bit characters. + * - SP_8_BIT_CHAR - Use 8-bit characters. + * . * The default is SP_8_BIT_CHAR which results in one stop bit, no parity, * and 8-bit characters. - * - * SP_1_STOP_BIT - use one stop bit (default if stop bit not specified) - * - * SP_2_STOP_BIT - use two stop bits - * - * SP_NO_PARITY - no parity bit (default if parity not specified) - * - * SP_EVEN_PARITY - add even parity bit - * - * SP_ODD_PARITY - add odd parity bit - * - * SP_5_BIT_CHAR - use 5-bit characters (default if size not specified) - * - * SP_6_BIT_CHAR - use 6-bit characters - * - * SP_7_BIT_CHAR - use 7-bit characters - * - * SP_8_BIT_CHAR - use 8-bit characters */ void begin(uint32_t baud, uint8_t options = SP_8_BIT_CHAR) { uint16_t baud_setting; @@ -339,16 +355,22 @@ class SerialPort : public Stream { // set option bits *usart[PortNumber].ucsrc = options & SP_OPT_MASK; - if (F_CPU == 16000000UL && baud == 57600) { - // hardcoded exception for compatibility with the bootloader shipped - // with the Duemilanove and previous boards and the firmware on the 8U2 - // on the Uno and Mega 2560. + baud_setting = F_CPU/4/baud; + + if (baud_setting > 8192 || (F_CPU == 16000000UL && baud == 57600)) { + // Hardcoded exception for compatibility with the bootloader shipped + // with the Duemilanove and previous boards and the firmware on the + // 8U2/16U2 on the Uno and Mega 2560. + // Prevent overflow of 12-bit UBRR at 300 baud. *usart[PortNumber].ucsra = 0; - baud_setting = (F_CPU / 8 / baud - 1) / 2; + baud_setting /= 2; } else { + // Use U2X for better high baud rates. *usart[PortNumber].ucsra = M_U2X; - baud_setting = (F_CPU / 4 / baud - 1) / 2; } + // Rounded value for datasheet expression. + baud_setting = (baud_setting - 1)/2; + // assign the baud_setting, a.k.a. ubbr (USART Baud Rate Register) *usart[PortNumber].ubrrh = baud_setting >> 8; *usart[PortNumber].ubrrl = baud_setting; @@ -362,9 +384,15 @@ class SerialPort : public Stream { } //---------------------------------------------------------------------------- #if ENABLE_RX_ERROR_CHECKING - /** clear RX error bits */ + /** Clear RX error bits. */ void clearRxError() {rxErrorBits[PortNumber] = 0;} - /** \return RX error bits */ + /** @return RX error bits. Possible error bits are: + * - @ref SP_RX_BUF_OVERRUN + * - @ref SP_RX_DATA_OVERRUN + * - @ref SP_FRAMING_ERROR + * - @ref SP_PARITY_ERROR + * . + */ uint8_t getRxError() {return rxErrorBits[PortNumber];} #endif // ENABLE_RX_ERROR_CHECKING //---------------------------------------------------------------------------- @@ -386,13 +414,8 @@ class SerialPort : public Stream { //---------------------------------------------------------------------------- /** * For Arduino 1.0 and greater call flushTx(). - * For Arduino 0023 and before call flushRx(). */ - #if ARDUINO < 100 - void flush() {flushRx();} - #else // ARDUINO < 100 void flush() {flushTx();} - #endif // ARDUINO < 100 //---------------------------------------------------------------------------- /** * Discard any buffered incoming serial data. @@ -416,8 +439,8 @@ class SerialPort : public Stream { } //---------------------------------------------------------------------------- /** - * \return the first byte of incoming serial data available or - * -1 if no data is available. Peek() always return -1 for unbuffered RX. + * @return The first byte of incoming serial data available or + * -1 if no data is available. -1 is always returned for unbuffered RX. */ int peek(void) { return RxBufSize ? rxRingBuf[PortNumber].peek() : -1; @@ -426,8 +449,8 @@ class SerialPort : public Stream { /** * Read incoming serial data. * - * \return the first byte of incoming serial data available - * or -1 if no data is available + * @return The first byte of incoming serial data available + * or -1 if no data is available. */ __attribute__((noinline)) int read() { @@ -447,9 +470,9 @@ class SerialPort : public Stream { * Read incoming serial data. Stop when RX buffer is empty or n * bytes have been read. * - * \param[in] b location to receive the data - * \param[in] n maximum number of bytes to read - * \return number of bytes read + * @param[in] b The location to receive the data. + * @param[in] n Maximum number of bytes to read. + * @return The number of bytes read. */ __attribute__((noinline)) size_t read(uint8_t* b, size_t n) { @@ -461,7 +484,6 @@ class SerialPort : public Stream { if (sizeof(SerialRingBuffer::buf_size_t) == 1 && nr > 255) nr = 255; p += rxRingBuf[PortNumber].get(p, nr); } - return p - b; } else { while (p < limit) { int rb = read(); @@ -475,77 +497,55 @@ class SerialPort : public Stream { /** * Write binary data to the serial port. * - * \param[in] b byte to be written. - * \return number of bytes written to the serial port + * @param[in] b The byte to be written. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void write(uint8_t b) { - #else // ARDUINO < 100 size_t write(uint8_t b) { - #endif // ARDUINO < 100 if (!TxBufSize) { while (!(*usart[PortNumber].ucsra & M_UDRE)) {} *usart[PortNumber].udr = b; } else { - // wait for TX ISR if buffer is full + // Wait for TX ISR if buffer is full. while (!txRingBuf[PortNumber].put(b)) {} - // enable interrupts + + // Enable interrupts. *usart[PortNumber].ucsrb |= M_UDRIE; } - #if ARDUINO > 99 return 1; - #endif // ARDUINO > 99 } //---------------------------------------------------------------------------- - /** write CR LF - * \return 2 + /** Write CR/LF. + * @return 2 */ __attribute__((noinline)) - #if ARDUINO < 100 - void writeln() { - write('\r'); - write('\n'); - } - #else // ARDUINO < 100 size_t writeln() { write('\r'); write('\n'); return 2; } - #endif // ARDUINO >= 100 //---------------------------------------------------------------------------- /** - * Write a string to the serial port followed by CF LF + * Write a string to the serial port followed by CR/LF. * - * \param[in] s string to be written. - * \return number of bytes written to the serial port + * @param[in] s The string to be written. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void writeln(const char* s) { - write(s); - writeln(); - } - #else // ARDUINO < 100 size_t writeln(const char* s) { return write(s) + writeln(); } - #endif // ARDUINO >= 100 + //---------------------------------------------------------------------------- /** * Write binary data from flash memory to the serial port. * - * \param[in] b bytes to be written - * \param[in] n number of bytes to write - * \return number of bytes written to the serial port + * @param[in] b Location of the bytes to be written. + * @param[in] n The number of bytes to write. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void write_P(PGM_P b, size_t n) { - #else // ARDUINO < 100 size_t write_P(PGM_P b, size_t n) { - #endif // ARDUINO < 100 if (!TxBufSize) { for (size_t i = 0; i < n; i++) write(pgm_read_byte(b + i)); } else { @@ -554,70 +554,50 @@ class SerialPort : public Stream { size_t nw = w; if (sizeof(SerialRingBuffer::buf_size_t) == 1 && nw > 255) nw = 255; size_t m = txRingBuf[PortNumber].put_P(b, nw); + // enable interrupts *usart[PortNumber].ucsrb |= M_UDRIE; w -= m; b += m; } } - #if ARDUINO >= 100 return n; - #endif // ARDUINO >= 100 } //---------------------------------------------------------------------------- /** * Write a flash string to the serial port. * - * \param[in] s string to be written. - * \return number of bytes written to the serial port + * @param[in] s The string to be written. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void write(const __FlashStringHelper* s) { - const prog_char* p = (const prog_char*)s; - size_t n = strlen_P(p); - write_P(p, n); - } - #else // ARDUINO < 100 size_t write(const __FlashStringHelper* s) { - const prog_char* p = (const prog_char*)s; + const char PROGMEM* p = (const char PROGMEM*)s; size_t n = strlen_P(p); return write_P(p, n); } - #endif // ARDUINO >= 100 //---------------------------------------------------------------------------- /** - * Write a flash string to the serial port followed by CF LF + * Write a flash string to the serial port followed by CR/LF. * - * \param[in] s string to be written. - * \return number of bytes written to the serial port + * @param[in] s The string to be written. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void writeln(const __FlashStringHelper* s) { - write(s); - writeln(); - } - #else // ARDUINO < 100 size_t writeln(const __FlashStringHelper* s) { return write(s) + writeln(); } - #endif // ARDUINO >= 100 #if USE_WRITE_OVERRIDES //---------------------------------------------------------------------------- /** * Write binary data to the serial port. * - * \param[in] b bytes to be written - * \param[in] n number of bytes to write - * \return number of bytes written to the serial port + * @param[in] b Location of the bytes to be written. + * @param[in] n The number of bytes to write. + * @return The number of bytes written to the serial port. */ __attribute__((noinline)) - #if ARDUINO < 100 - void write(const uint8_t* b, size_t n) { - #else // ARDUINO < 100 size_t write(const uint8_t* b, size_t n) { - #endif // ARDUINO < 100 if (!TxBufSize) { for (size_t i = 0; i < n; i++) write(b[i]); } else { @@ -626,35 +606,27 @@ class SerialPort : public Stream { size_t nw = w; if (sizeof(SerialRingBuffer::buf_size_t) == 1 && nw > 255) nw = 255; size_t m = txRingBuf[PortNumber].put(b, nw); - // enable interrupts + + // Enable interrupts. *usart[PortNumber].ucsrb |= M_UDRIE; w -= m; b += m; } } - #if ARDUINO >= 100 return n; - #endif // ARDUINO >= 100 } //---------------------------------------------------------------------------- /** * Write a string to the serial port. * - * \param[in] s string to be written. - * \return number of bytes written to the serial port + * @param[in] s The string to be written. + * @return The number of bytes written to the serial port */ __attribute__((noinline)) - #if ARDUINO < 100 - void write(const char* s) { - size_t n = strlen(s); - write(reinterpret_cast(s), n); - } - #else // ARDUINO < 100 size_t write(const char* s) { size_t n = strlen(s); return write(reinterpret_cast(s), n); } - #endif // ARDUINO >= 100 #else // USE_WRITE_OVERRIDES using Print::write; // use write(str) and write(buf, size) from Print #endif // USE_WRITE_OVERRIDES @@ -662,7 +634,7 @@ class SerialPort : public Stream { private: // RX buffer with a capacity of RxBufSize. uint8_t rxBuffer_[RxBufSize + 1]; - // TX buffer with a capacity of TxBufSize + // TX buffer with a capacity of TxBufSize. uint8_t txBuffer_[TxBufSize + 1]; }; //------------------------------------------------------------------------------ diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/ArduinoSize/ArduinoSize.pde b/libs/SerialPort-master/SerialPort/examples/ArduinoSize/ArduinoSize.ino similarity index 100% rename from libs/SerialPortBeta20120106/SerialPort/examples/ArduinoSize/ArduinoSize.pde rename to libs/SerialPort-master/SerialPort/examples/ArduinoSize/ArduinoSize.ino diff --git a/libs/SerialPort-master/SerialPort/examples/ArduinoSize/FreeRam.h b/libs/SerialPort-master/SerialPort/examples/ArduinoSize/FreeRam.h new file mode 100755 index 0000000..bbd9dd3 --- /dev/null +++ b/libs/SerialPort-master/SerialPort/examples/ArduinoSize/FreeRam.h @@ -0,0 +1,10 @@ +#include +static inline int FreeRam() { + extern char *__brkval; + char top; +#if defined(CORE_TEENSY) + return &top - __brkval; +#else // malloc type + return __brkval ? &top - __brkval : &top - __malloc_heap_start; +#endif // malloc type +} diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/ArduinoTest/ArduinoTest.pde b/libs/SerialPort-master/SerialPort/examples/ArduinoTest/ArduinoTest.ino similarity index 100% rename from libs/SerialPortBeta20120106/SerialPort/examples/ArduinoTest/ArduinoTest.pde rename to libs/SerialPort-master/SerialPort/examples/ArduinoTest/ArduinoTest.ino diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/BufferedSize/BufferedSize.pde b/libs/SerialPort-master/SerialPort/examples/BufferedSize/BufferedSize.ino similarity index 83% rename from libs/SerialPortBeta20120106/SerialPort/examples/BufferedSize/BufferedSize.pde rename to libs/SerialPort-master/SerialPort/examples/BufferedSize/BufferedSize.ino index 6f83d36..86089a0 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/BufferedSize/BufferedSize.pde +++ b/libs/SerialPort-master/SerialPort/examples/BufferedSize/BufferedSize.ino @@ -1,4 +1,4 @@ -// print free RAM for Arduino 1.0 style buffering +// Print free RAM for Arduino 1.0 style buffering. // #include #include "FreeRam.h" diff --git a/libs/SerialPort-master/SerialPort/examples/BufferedSize/FreeRam.h b/libs/SerialPort-master/SerialPort/examples/BufferedSize/FreeRam.h new file mode 100755 index 0000000..bbd9dd3 --- /dev/null +++ b/libs/SerialPort-master/SerialPort/examples/BufferedSize/FreeRam.h @@ -0,0 +1,10 @@ +#include +static inline int FreeRam() { + extern char *__brkval; + char top; +#if defined(CORE_TEENSY) + return &top - __brkval; +#else // malloc type + return __brkval ? &top - __brkval : &top - __malloc_heap_start; +#endif // malloc type +} diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/BufferedTest/BufferedTest.pde b/libs/SerialPort-master/SerialPort/examples/BufferedTest/BufferedTest.ino similarity index 91% rename from libs/SerialPortBeta20120106/SerialPort/examples/BufferedTest/BufferedTest.pde rename to libs/SerialPort-master/SerialPort/examples/BufferedTest/BufferedTest.ino index 225d888..489fdfd 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/BufferedTest/BufferedTest.pde +++ b/libs/SerialPort-master/SerialPort/examples/BufferedTest/BufferedTest.ino @@ -1,3 +1,4 @@ +// Check time to buffer data and function of available(). #include // port zero, 63 character RX and TX buffers diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/HelloWorld/HelloWorld.pde b/libs/SerialPort-master/SerialPort/examples/HelloWorld/HelloWorld.ino similarity index 76% rename from libs/SerialPortBeta20120106/SerialPort/examples/HelloWorld/HelloWorld.pde rename to libs/SerialPort-master/SerialPort/examples/HelloWorld/HelloWorld.ino index 6012eb0..086d820 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/HelloWorld/HelloWorld.pde +++ b/libs/SerialPort-master/SerialPort/examples/HelloWorld/HelloWorld.ino @@ -1,4 +1,4 @@ -// Simple usage with buffering like Arduino 1.0 +// Simple usage with buffering like Arduino 1.0. #include // use NewSerial for port 0 diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/MegaTest/MegaTest.pde b/libs/SerialPort-master/SerialPort/examples/MegaTest/MegaTest.ino similarity index 64% rename from libs/SerialPortBeta20120106/SerialPort/examples/MegaTest/MegaTest.pde rename to libs/SerialPort-master/SerialPort/examples/MegaTest/MegaTest.ino index a536c5e..7dca6fc 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/MegaTest/MegaTest.pde +++ b/libs/SerialPort-master/SerialPort/examples/MegaTest/MegaTest.ino @@ -1,7 +1,14 @@ -// Test all ports on the Mega +// Test all ports on the Mega. // -// place loopback jumpers, RX connected to TX, -// on ports 1, 2, and 3. +// A string read on port zero will be sent to port one, +// it will then be read from port one and sent to port +// two, next it will be read from port two and sent to +// port three, and finally it will be read from port +// three and sent to port zero. +// +// Place a loopback jumper connecting +// RX1 to TX1, RX2 to TX2, RX3 to TX3 on ports 1, 2, and 3. +// Do not place a jumper on port zero. // #include // port 0 unbuffered diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/MegaTestArduino/MegaTestArduino.pde b/libs/SerialPort-master/SerialPort/examples/MegaTestArduino/MegaTestArduino.ino similarity index 55% rename from libs/SerialPortBeta20120106/SerialPort/examples/MegaTestArduino/MegaTestArduino.pde rename to libs/SerialPort-master/SerialPort/examples/MegaTestArduino/MegaTestArduino.ino index 5c5fdbb..32538ab 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/MegaTestArduino/MegaTestArduino.pde +++ b/libs/SerialPort-master/SerialPort/examples/MegaTestArduino/MegaTestArduino.ino @@ -1,7 +1,15 @@ -// Test all ports on the Mega +// Test all ports on the Mega. // -// place loopback jumpers, RX connected to TX, -// on ports 1, 2, and 3. +// +// A string read on port zero will be sent to port one, +// it will then be read from port one and sent to port +// two, next it will be read from port two and sent to +// port three, and finally it will be read from port +// three and sent to port zero. +// +// Place a loopback jumper connecting +// RX1 to TX1, RX2 to TX2, RX3 to TX3 on ports 1, 2, and 3. +// Do not place a jumper on port zero. // void transfer(Stream* in, Stream* out) { while(!in->available()) {} diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/ReadWriteTest/ReadWriteTest.pde b/libs/SerialPort-master/SerialPort/examples/ReadWriteTest/ReadWriteTest.ino similarity index 93% rename from libs/SerialPortBeta20120106/SerialPort/examples/ReadWriteTest/ReadWriteTest.pde rename to libs/SerialPort-master/SerialPort/examples/ReadWriteTest/ReadWriteTest.ino index c7d2246..c1df3c8 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/ReadWriteTest/ReadWriteTest.pde +++ b/libs/SerialPort-master/SerialPort/examples/ReadWriteTest/ReadWriteTest.ino @@ -1,4 +1,4 @@ -// test that ring buffer overrun can be detected +// Test that ring buffer overrun can be detected. #include // port 0, 16 byte RX and TX buffers SerialPort<0, 16, 16> port0; diff --git a/libs/SerialPort-master/SerialPort/examples/UnbufferedSize/FreeRam.h b/libs/SerialPort-master/SerialPort/examples/UnbufferedSize/FreeRam.h new file mode 100755 index 0000000..bbd9dd3 --- /dev/null +++ b/libs/SerialPort-master/SerialPort/examples/UnbufferedSize/FreeRam.h @@ -0,0 +1,10 @@ +#include +static inline int FreeRam() { + extern char *__brkval; + char top; +#if defined(CORE_TEENSY) + return &top - __brkval; +#else // malloc type + return __brkval ? &top - __brkval : &top - __malloc_heap_start; +#endif // malloc type +} diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedSize/UnbufferedSize.pde b/libs/SerialPort-master/SerialPort/examples/UnbufferedSize/UnbufferedSize.ino similarity index 65% rename from libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedSize/UnbufferedSize.pde rename to libs/SerialPort-master/SerialPort/examples/UnbufferedSize/UnbufferedSize.ino index 80f88fd..4b1f60a 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedSize/UnbufferedSize.pde +++ b/libs/SerialPort-master/SerialPort/examples/UnbufferedSize/UnbufferedSize.ino @@ -1,6 +1,8 @@ -// print free RAM for unbuffered mode -// you can reduce flash and RAM use more by setting +// Print free RAM for unbuffered mode. +// +// You can reduce flash and RAM use more by setting // BUFFERED_TX and BUFFERED_RX zero in SerialPort.h +// to always disable buffering. // #include #include "FreeRam.h" diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedTest/UnbufferedTest.pde b/libs/SerialPort-master/SerialPort/examples/UnbufferedTest/UnbufferedTest.ino similarity index 100% rename from libs/SerialPortBeta20120106/SerialPort/examples/UnbufferedTest/UnbufferedTest.pde rename to libs/SerialPort-master/SerialPort/examples/UnbufferedTest/UnbufferedTest.ino diff --git a/libs/SerialPortBeta20120106/SerialPort/examples/WriteFlash/WriteFlash.pde b/libs/SerialPort-master/SerialPort/examples/WriteFlash/WriteFlash.ino similarity index 80% rename from libs/SerialPortBeta20120106/SerialPort/examples/WriteFlash/WriteFlash.pde rename to libs/SerialPort-master/SerialPort/examples/WriteFlash/WriteFlash.ino index 72544da..09a05b1 100755 --- a/libs/SerialPortBeta20120106/SerialPort/examples/WriteFlash/WriteFlash.pde +++ b/libs/SerialPort-master/SerialPort/examples/WriteFlash/WriteFlash.ino @@ -1,10 +1,10 @@ -// test write() for a flash string +// Test write() time for a flash string. #include SerialPort<0, 0, 32> port; void setup(void) { - port.begin(115200); + port.begin(9600); for (int route = 0; route < 11; route++) { uint32_t start = micros(); @@ -15,5 +15,6 @@ void setup(void) { port.writeln(F(" us")); delay(400); } + port.println(F("Done!")); } void loop(void) {} diff --git a/libs/SerialPort-master/SerialPortLogger/SerialDataSource.ino b/libs/SerialPort-master/SerialPortLogger/SerialDataSource.ino new file mode 100755 index 0000000..1852a4d --- /dev/null +++ b/libs/SerialPort-master/SerialPortLogger/SerialDataSource.ino @@ -0,0 +1,29 @@ +// This program sends 280000 bytes over serial port zero. +// Maximum baud rate for a 328 Arduino is 57600. +// Maximum baud rate for a Mega Arduino is 115200 +const uint32_t BAUD_RATE = 57600; + +#include + +// Define NewSerial as serial port zero. +USE_NEW_SERIAL; + +void setup() { + NewSerial.begin(BAUD_RATE); + pinMode(13, OUTPUT); + // light pin 13 LED on Arduino Board + digitalWrite(13, HIGH); + + // write start time + NewSerial.println(millis()); + + for (uint16_t i = 0; i < 10000; i++) { + NewSerial.write("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n"); + } + // write end time + NewSerial.println(millis()); + + // turn off pin 13 LED + digitalWrite(13, LOW); +} +void loop() {} diff --git a/libs/SerialPort-master/SerialPortLogger/SerialPortLogger.ino b/libs/SerialPort-master/SerialPortLogger/SerialPortLogger.ino new file mode 100755 index 0000000..7f6c76b --- /dev/null +++ b/libs/SerialPort-master/SerialPortLogger/SerialPortLogger.ino @@ -0,0 +1,89 @@ +// Serial data logger example. +// Maximum baud rate for a 328 Arduino is 57600. +// Maximum baud rate for a Mega Arduino is 115200. +const uint32_t BAUD_RATE = 57600; + +// Maximum time between sync() calls in milliseconds. If Serial is always +// active, you must provide a way to stop the program and close the file. +const uint32_t MAX_SYNC_TIME_MSEC = 1000; + +// Pin number for error blink LED. +// Set ERROR_LED_PIN to -1 for no error LED. +const int8_t ERROR_LED_PIN = 3; + +#include +#include + +#if defined(__AVR_ATmega1280__)\ +|| defined(__AVR_ATmega2560__) +// Mega, use 4096 byte RX buffer +SerialPort<0, 4096, 0> NewSerial; +#else // Mega +// not a Mega, use 1024 RX byte buffer +SerialPort<0, 1024, 0> NewSerial; +#endif + +SdFat sd; +SdFile file; + +//------------------------------------------------------------------------------ +// Error codes repeat as errno short blinks with a delay between codes. +const uint8_t ERROR_INIT = 1; // SD init error +const uint8_t ERROR_OPEN = 2; // file open error +const uint8_t ERROR_SERIAL = 3; // serial error +const uint8_t ERROR_WRITE = 4; // SD write or sync error +void errorBlink(uint8_t errno) { + uint8_t i; + while (ERROR_LED_PIN < 0); + while (1) { + for (i = 0; i < errno; i++) { + digitalWrite(ERROR_LED_PIN, HIGH); + delay(200); + digitalWrite(ERROR_LED_PIN, LOW); + delay(200); + } + delay(1600); + } +} +//------------------------------------------------------------------------------ +void setup() { + pinMode(ERROR_LED_PIN, OUTPUT); + NewSerial.begin(BAUD_RATE); + + if (!sd.begin()) { + errorBlink(ERROR_INIT); + } + if (!file.open("SERIAL.BIN", O_WRITE | O_CREAT | O_AT_END)) { + errorBlink(ERROR_OPEN); + } + if (file.fileSize() == 0) { + // Make sure first cluster is allocated. + file.write((uint8_t)0); + file.rewind(); + file.sync(); + } +} +//------------------------------------------------------------------------------ +// Time of last sync call. +uint32_t syncTime = 0; + +uint8_t buf[32]; +void loop() { + if (NewSerial.getRxError()) { + errorBlink(ERROR_SERIAL); + } + uint8_t n = NewSerial.read(buf, sizeof(buf)); + if (n > 0) { + if (file.write(buf, n) != n) { + errorBlink(ERROR_WRITE); + } + // Don't sync if active. + return; + } + if ((millis() - syncTime) < MAX_SYNC_TIME_MSEC) return; + + if (!file.sync()) { + errorBlink(ERROR_WRITE); + } + syncTime = millis(); +} diff --git a/libs/SerialPort-master/SerialPortLogger/readme.txt b/libs/SerialPort-master/SerialPortLogger/readme.txt new file mode 100755 index 0000000..4157b82 --- /dev/null +++ b/libs/SerialPort-master/SerialPortLogger/readme.txt @@ -0,0 +1,60 @@ +This is a demo of a data logging sketch that is capable of logging serial +data to an SD card at up to 115200 baud. + +You must install the SdFat library to use the SerialPortLogger. SdFat +can be downloaded from: + +http://code.google.com/p/sdfatlib/downloads/list + +Normally the maximum rate for a 328 Arduino is 57600 baud. + +It is possible to log data at 115200 baud with a 328 Arduino if you use a high +quality SD card. + +Lower quality cards can have an occasional write latency of over 100 +milliseconds. This will cause a receive data overrun at 115200 baud since +the RX buffer on a 328 Arduino is 1024 bytes. You need to reduce the baud +rate to 57600 if your SD card causes receive overruns. + +Most SD cards will work with a Mega Arduino at 115200 baud since the RX +buffer is set to 4096 bytes. + +It is possible to use software SPI on a Mega by setting MEGA_SOFT_SPI nonzero +in SdFatConfig.h. This will allow a shield like the Adafruit Data Logging +shield to be used on a Mega without jumper wires. + +The two programs, SerialPortLogger.ino and SerialDataSource.ino, demonstrate +high speed logging of serial data. + +To run this demo, you need two Arduino boards and an SD shield or SD module. + +The board with the SD shield should have an LED and series resistor connected +from pin 3 to ground. This LED will blink an error code if an error occurs. + +Make sure BAUD_RATE has the same value in SerialPortLogger.ino and +SerialDataSource.ino. + +Load SerialPortLogger.ino into the board with an SD shield or module and +SerialDataSource.ino into the second board. + +Connect a wire between GND pins on the two boards. + +Connect a wire between the serial RX pin (Pin 0) on the SD board and the +serial TX pin (pin 1) on the data source board. + +It is best to power the two boards with an external 9V supply. + +After the boards are powered up, wait until the pin 13 LED on the data source +board goes out. This will take up to 50 seconds. + +Insert an SD into the logger board. press reset on the logger board. The +error LED connected to pin 3 should not light. + +Press reset on the data source board. The pin 13 LED on the data source +board should light for about 50 seconds at 57600 baud or 25 seconds at +115200 baud while 280,000 bytes are transferred. + +If an error occurs, the error LED on the SD board will flash an error code. +See the SerialPortLogger.ino source for definitions of error codes. + +Remove the SD and check the file SERIAL.BIN. In this case it is a text file. \ No newline at end of file diff --git a/libs/SerialPortBeta20120106/changes.txt b/libs/SerialPort-master/changes.txt similarity index 92% rename from libs/SerialPortBeta20120106/changes.txt rename to libs/SerialPort-master/changes.txt index c9251d7..bb10d9c 100755 --- a/libs/SerialPortBeta20120106/changes.txt +++ b/libs/SerialPort-master/changes.txt @@ -1,3 +1,19 @@ +16 Feb 2014 + +Fix 300 baud problem. + +Fix FreeMem() + +22 Feb 2013 + +Fixed problems with newer versions of avr-gcc. + +Fixed compatibility problems with Arduino 1.5.2 beta. + +Added documentation. + +Code cleanup. + 6 Jan 2012 Made buffer indice type an option (uint8_t or uint16_t) with diff --git a/libs/SerialPort-master/del_htm.bat b/libs/SerialPort-master/del_htm.bat new file mode 100755 index 0000000..2cc8cc5 --- /dev/null +++ b/libs/SerialPort-master/del_htm.bat @@ -0,0 +1,2 @@ +rm -R html/* +pause \ No newline at end of file diff --git a/libs/SerialPortBeta20120106/html/class_serial_port.html b/libs/SerialPort-master/html/a00001.html similarity index 63% rename from libs/SerialPortBeta20120106/html/class_serial_port.html rename to libs/SerialPort-master/html/a00001.html index 015557b..7c2e383 100755 --- a/libs/SerialPortBeta20120106/html/class_serial_port.html +++ b/libs/SerialPort-master/html/a00001.html @@ -2,7 +2,7 @@ -SoftRTClib: SerialPort< PortNumber, RxBufSize, TxBufSize > Class Template Reference +Serial Port: SerialPort< PortNumber, RxBufSize, TxBufSize > Class Template Reference @@ -19,7 +19,7 @@ -
    SoftRTClib
    +
    Serial Port
    @@ -63,41 +63,66 @@
    -

    class for avr hardware USART ports - More...

    +

    Class for avr hardware USART ports. + More...

    -

    #include <SerialPort.h>

    +

    #include <SerialPort.h>

    -

    List of all members.

    +

    List of all members.

    - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +

    Public Member Functions

    int available (void)
    void begin (uint32_t baud, uint8_t options=SP_8_BIT_CHAR)
    void clearRxError ()
    void end ()
    void flush ()
    void flushRx ()
    void flushTx ()
    uint8_t getRxError ()
    int peek (void)
    int read ()
    size_t read (uint8_t *b, size_t n)
    size_t write (const char *s)
    size_t write (uint8_t b)
    size_t write (const __FlashStringHelper *s)
    size_t write (const uint8_t *b, size_t n)
    size_t write_P (PGM_P b, size_t n)
    size_t writeln (const char *s)
    size_t writeln ()
    size_t writeln (const __FlashStringHelper *s)
     SerialPort ()
    int available (void)
    void begin (uint32_t baud, uint8_t options=SP_8_BIT_CHAR)
    void clearRxError ()
    void end ()
    void flush ()
    void flushRx ()
    void flushTx ()
    uint8_t getRxError ()
    int peek (void)
    int read ()
    size_t read (uint8_t *b, size_t n)
    size_t write (const char *s)
    size_t write (uint8_t b)
    size_t write (const __FlashStringHelper *s)
    size_t write (const uint8_t *b, size_t n)
    size_t write_P (PGM_P b, size_t n)
    size_t writeln (const char *s)
    size_t writeln ()
    size_t writeln (const __FlashStringHelper *s)

    Detailed Description

    template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
    class SerialPort< PortNumber, RxBufSize, TxBufSize >

    -

    class for avr hardware USART ports

    -

    Member Function Documentation

    +

    Class for avr hardware USART ports.

    + +

    Definition at line 300 of file SerialPort.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    +
    +template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
    + + + + + + + +
    SerialPort< PortNumber, RxBufSize, TxBufSize >::SerialPort () [inline]
    +
    +
    +

    Constructor

    + +

    Definition at line 304 of file SerialPort.h.

    + +
    +
    +

    Member Function Documentation

    @@ -105,7 +130,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
    - + @@ -116,6 +141,8 @@
    Returns:
    The number of bytes (characters) available for reading from the serial port.
    +

    Definition at line 320 of file SerialPort.h.

    +
    @@ -125,7 +152,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
    int SerialPort< PortNumber, RxBufSize, TxBufSize >::available int SerialPort< PortNumber, RxBufSize, TxBufSize >::available ( void  )
    - + @@ -134,7 +161,7 @@ - + @@ -147,21 +174,25 @@

    Sets the data rate in bits per second (baud) for serial data transmission.

    Parameters:
    void SerialPort< PortNumber, RxBufSize, TxBufSize >::begin void SerialPort< PortNumber, RxBufSize, TxBufSize >::begin ( uint32_t  baud, uint8_t options = SP_8_BIT_CHAR options = SP_8_BIT_CHAR 
    - +
    [in]baudrate in bits per second (baud)
    [in]baudRate in bits per second (baud).
    [in]optionsconstructed by a bitwise-inclusive OR of values from the following list. Choose one value for stop bit, parity, and character size.

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 literal 0 HcmV?d00001 diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/AdcErrorStudy.txt b/libs/SdFat-master/AnalogBinLoggerExtras/AdcErrorStudy.txt new file mode 100755 index 0000000..d24d1f6 --- /dev/null +++ b/libs/SdFat-master/AnalogBinLoggerExtras/AdcErrorStudy.txt @@ -0,0 +1,98 @@ +Static Tests of the Arduino Internal ADC. + +Several people have asked about the DC accuracy of the Arduino ADC when used in my data logging applications at slow sample rates. + +Here are my results of some "hobby level" measurements of the Arduino ADC. + +One question is how important is the ADC clock rate. I did measurents for an ADC clock rate of 125 kHz to 2MHz. + +Another question is how much does Noise Reduction Mode help. I did a series of measurements using this mode. + +Noise Reduction Mode only reduced the mean absolute error slightly. + +I do calibration to remove Offset Error and Gain Error. Calibration is very important for good accuracy. + +These tests depend on the Arduino voltage regulator providing a stable voltage during the tests. The Arduino ADC reference voltage is Vcc for these tests. This may not be realistic for practical applications + +Integral Non-linearity (INL) is the main remaining source of error. + +Here are my results for static (DC) tests of the internal ADC for three UNOs. + +The Arduinos are powered by a high quality nine volt power supply. + +These tests measure a DC level so do not include problems due to time jitter, S/H time, and other dynamic errors. +There are several studies of the dynamic behavior of the Arduino ADC that determine ENOB (Effective Number Of Bits). + +I used a shield with a 12-bit MCP4921 DAC to generate voltage levels. This ADC has an output buffer so it provides a very low impedance source. + +I measured the voltage of the DAC with a calibrated 18-bit MCP3422 ADC on the shield. + +I used DAC levels from 20 to 4075 to avoid zero offset errors at low voltages and DAC buffer problems at high voltages. + +Each series of measurements has 4056 data points. + +This is a voltage range of about 0.023 to 4.972 volts. + +I calibrated the Arduino ADC for each series of measurements with a linear fit of the form. + +v = a + b*adcValue + +Errors are the difference between the value measured with the 18-bit ADC and the calibrated value measured with the AVR ADC. + +I also show the results for no calibration, the NoCal column, using the datasheet formula. + +Vin = Vref*adcValue/1024 + + +The rows in the tables tables are. + +Min - minimum error in millivolts + +Max - maximum error in millivolts + +MAE - mean absolute error in millivolts + + +The columns in the tables are: + +Ideal - results for a perfect 10-bit ADC for comparison. + +NoCal - datasheet formula (5/1024)*adcValue with Noise Reduction Mode. + +NR128 - Noise Reduction mode with Prescaler of 128 (ADC clock of 125 kHz). + +PS128 - analogRead with Prescaler of 128 (ADC clock of 125 kHz). + +PS64 - analogRead with Prescaler of 64 (ADC clock of 250 kHz). + +PS32 - analogRead with Prescaler of 32 (ADC clock of 500 kHz). + +PS16 - analogRead with Prescaler of 16 (ADC clock of 1 MHz). + +PS8 - analogRead with Prescaler of 8 (ADC clock of 2 MHz). + + +Results for three UNO Arduinos + + First Arduino - Error Millivolts + + Ideal NoCal NR128 PS128 PS64 PS32 PS16 PS8 +Min -2.44 -2.43 -3.72 -4.01 -3.88 -4.53 -6.57 -27.18 +Max 2.44 11.69 3.74 4.24 4.15 5.17 8.69 23.21 +MAE 1.22 5.02 1.33 1.38 1.37 1.44 1.96 4.11 + + Second Arduino - Error Millivolts + + Ideal NoCal NR128 PS128 PS64 PS32 PS16 PS8 +Min -2.44 -9.24 -4.87 -4.86 -5.05 -5.34 -6.52 -24.04 +Max 2.44 11.62 3.95 4.64 4.69 5.71 8.41 21.29 +MAE 1.22 5.33 1.41 1.43 1.44 1.53 2.02 4.05 + + Third Arduino - Error Millivolts + + Ideal NoCal NR128 PS128 PS64 PS32 PS16 PS8 +Min -2.44 -7.88 -4.12 -4.40 -4.32 -4.41 -6.97 -26.93 +Max 2.44 12.53 3.80 4.04 4.18 5.27 8.84 24.59 +MAE 1.22 4.85 1.29 1.33 1.34 1.42 1.91 4.10 + + diff --git a/libs/SdFat-master/AnalogBinLoggerExtras/DATA.png b/libs/SdFat-master/AnalogBinLoggerExtras/DATA.png new file mode 100755 index 0000000000000000000000000000000000000000..a9b31aa1fc4a7e29046d2c4940b900fe8e1c08fa GIT binary patch literal 50962 zcmdqIi9gh9_&@wXY12X_Qk<+6LPWBbJxxxjh!|1!B}-%(qthx|_GK_4qf#MTHO#2& zd)Bc|+4l*e_2~ zUzPf~Raxux;)RoY`7)!k^UQNM9Y6A@uJL?Yb=2UcnTz$(yxo?odn6rf_Hdh*J11W5 z-ughmx%BPFoqydI+~oYnzGsmdA+!aFca;m;w9MjGB5RTsVaYX!S{NU`yQ)pLCELzg zBLjbZ*&@dH;NhBvbNTOItDb0mflt$6|NGN4oQJKMI1hLmRP|KyB>XSrVDkF|#iakc zKTr%nQz)#;mV%IR+1`P+(ADCZty0?Twb2%bx@Zs4(|7EaYYrga61JBlw&_AyUXrm~ zc3~%MK9>ZJ)yKYjIVQ&ZBIeF6Mz6NLmpM90dfPE(Qi5ifaa``+IuolIMRw_G&Cswo z+-JkwIZddS7Rf+v`@+0VobDd#=wL#uZ+@NTzF`os9mH@Zj{JSFs*am!%Pnry9_XF5Kf~ z1D*qm#nL7|oOvRv+>N{!-Fe)A$azOxDR(8B509+*wrN?Q>UJvee41WC?b%krq&)NW zQb0@^X!7-$R_vzJOe6!$E6DUlL-6)ATMDaS*T#HNpe4GSr^F+nr0^9~|=w;;AHRXSd;Qx`^~ z*(mg=7c**R|7cBM3K}^~ZkBHCy|-tNyknn2Hrk=qo2`wLkB-?}m)45K31TI3!^fCT zFhFf&!ucScJ<7{VFKZ>|7x0w#pk;tW3a<&f;_%O~R%Il_7u#Ovbd%z&qYD|w?Vq0*z%&!yEc zY{Ht=8N6@OWeJbYggt}u!iPi>#tXzshg22Z&RZsHOTM_?IoVthU+>M%(;>QC^Ja=7 zMp&&#kx68_+M?EC@iJrd`}x**rjzl%4^>R76y7#!Y&D@go90>*ZDrCzVmk3Dg%5V+ zDJci0ADwSc7Ow4dK0h~~#OL|uiKZ)l1!+DVxpr{5cuLYoQ?nty0x@Z34lF?MC~^78 zEkyBaTH0ZZeYsazH#9J?&(7Ji2anq&S4ip1UhwH(RH*^$_dr)HfFnA&$Hmno)+c3+^OS@TE=(KFU$3@1tXD5xx$mk~}K>p)j#>~i}xbnsI3j;b5u|h4T0+FGdL1#mjr^g^U0c(n;QP@K> z^*g=aQ&c1j@Hb2+avUJy=J zGjpGi7x0eVcTgtOP*M*=Q1e>+?6U5BtAnPlV}u!=#9bDOwQJei9eeZwB3Qdxj&#Lb zXa3rD>EUn875atN+f>e5bbxb^7*GXHVtxEz4$Z4W(ub`P9sDQ%NSZNH#G`*KfX&Lq z-XGOYUhbh1Ue=9LVz#Kpr<;w63N|m{A!rCzQupxt=uEz+)z%GsbZz9vH8;#J%l1-f3q3fSH;0QgFrgPEqs6((tdBjq!B&tt|>i zl+hBM9C(S{_I+u~AI0nwkS+~2I@a4dG#dmw`l}o2J$3Sq^$CXOUb=j=J3&8s%rpd5 z-a{=P6X)-tRwA|)8OL3aWoHgKavNQiag;TSOK&BXPoo-;@nvhQQ7;kNx=M?oXAst2 zm^p=dhF0ws9`;Bg+N~TZq@^ zh5RMA8onzjyUq4BGE1i0en5QJ@!TU_Uxztb+Ih>ISM|ntVn?rhF=uiyAV$T8j8JaOi|uu7Yl|?6t4Emp z#0k$zd_O>+T}~YdZXgoJlocto>!z;y5zEK1Cc}O^Yi2vP-1t{`RaK|tS7HRi-(RM; zJ==6%Qc|3r5US;vq$<^Cn3Mq|c%F^wl#cOn=Ispq=9*fS}w>vuuigl%s#geEPoTG!`2`e@iwo_hjp7 zljo^sUpm$ye~L3Sw-ON3tPy^Q6T_@*65DejPT!Le>Gt{YW%}%BvFpJNsniC>68+0> zp--@eFS#);Y^8H#tr(DN4{Y4DfpHTmG`7`0`3GW`e#CXBV#(|!?160wnkGWw-Ib1K z6qLgU6AGW{&wZ?3P!SJQ@hl7I&o)bodqkfFnnX#GY>MyCc{pdBsS+6~oOf)|w!;ar zjZ~td$JClGy2mnR(_R)|z{E}DD$ij;>r}W%S31Ng1GwHXlliMuj^`=^Z#0pi-@1MT zP2x{V)NggtrATquacx!1^cca(bDFnOB=2JY7C2EVm37mB>a+h?FTN|1h-In9@8U&D zZUVu(>G?R$9V_d2Y zZiY)+wghG?hd!aMmB^coAhM5frM5n9Lr+pUMbwSbb6c3`6dUOv)!ig^^1y9l@~|I7|}u?g=q3Abc<)NQ9V+O zr5MFrH`V5m_@cQ`EKU$b>vgUx#-ZCh(Y~664M;3I^ncI<8E}6(c4>b@SjY9W*UU-P z?q^Y)UR#qV#)D&IHIwY@W7DM=TIHIGGrl z^e>FEjCYMa;27_U%uiN-$8@UW6u96hp5f_0`LbI8MjPsJo6KCq{SG3w6*{{JKY1?Z zb)FZoloneF6py9mf{~(UwjC9fideoLN2iEv8wEVRBtH^T#+sV_gmbfxOTxw=#*Z7` z-jo&>k61}f?&B;o@ZU7!>vM?~{n=thOAg*GF`a(e^QYWSC!^6!Eh+5%Bia#Z+B-UX z{3^}BO*q>7X|EIi*rBldF6VFQo2p$(yUH$>c)e#^39c_1FO`}Ww}1JfxLV60n+f;N zxSj8o^qoROdLDkaH5scQcitKlKh<(H`sGz^%*Sa~gOifcxzER32ClrxeO;~3Y$mjq)i5iw| zV(#(;cZ=h>;lD4`ln-QlH`(Sc>R#d z%2^W;mKI_>xK`>6MzkbKU?#qii1yRExGqeRY;9pyMhH^OkL!q%l`nRZ2mLa}rT>S? z&S~Sq9>d$lo^y0M9y*$zbSfFtDF^Xmr`(UgmaK@r;$YTW<2$DkJL>nIr!SW17)b}V z)B|4QUjCHamK*5&CL*03P=ed!)tuRaOqMCHT`^&E4$(fF#J@&J$&WZqaIoIR*2&$R zrZs$>%|LMY%is!Ha4Bw9M)XW|5tZVSws}}3r_!bD4zt1~mnn^VVFdO%rO8iSG zT>mmNBfdfh?=ll#5@kA-i_(4{6>JwrGwKZ9(|guD8^nVc88u8R-J6Vm%f`~khbQl` zKO5KMh%^-3BTHeY#pH>t|9amru6nn|iv!}XPXW8M3JNVusu+&yZ`)y~h#1bfEZPPAZ_BLYA~6m`pwsWa&UqCe*} zu0!$y)bCF~GQnhZCZq{9pf84MU0f1A%?M(KF4|UuGz->ay`{Ek=Dp#iEr(s2beJsN0>*vZ421#YB zN&_;P=9DsaN+Mn|cGSx`?fz#A3=W%Cy*@zoHS!pAuP+=36m2N*9&u7dwMlvm(oZj( z{rbv4z+0_pietbW3f3xgJ=5!`gb+{Er{UUEyv%1S#Y-(+l0ffqv^As_b$&tfuH5G)unzyLp)n)NPL zt1BIftBCKH|9*fn1md`wOCrfxVtul7VUrTeY%De&pAmy^p{9>%+8T1&)+y0rQ=Swg zQ)^iTkfrYvTAm2y2=?A`;Z`5hDHu~OeC-%)9zl~v*6=U&8u+MLu~$lJ+FU=^{s$aS zZyE3{m<~v8E4U(gp@Slp{7_UXuOmr1Hm3x{i%DN8N&1JvAKql35Zlt3r-Do4#{0f| z#U2t(4ht`+TdZW`Oc=f$+PmpwLhoCW@rByiS}F1f<*9JOvej2@24~!(;7opO#WPfdQfiwxJ%tl>$^H)kYz|R=9>2!$+*a(3`G#26wg1i%BRXaN${eReFRO=QL!|FA zbtdjcM^?9quxxY49tCarYb^1=;e@$pqDCmqMQ7P(d5tepTNK4RL3AoPE#@EW{G1p{ zRTm{8F=9HQDBe5f0)c*W7&3EWqSUSTO@XH=k@8@-cFNS<#bp^*Dq@=lya%eqSPQ6^ zT95b_q<&Gts5|b{0VTe@l_wlU%^1pwB^zr}qW>vnzLN`Q7Gqg&8Ru;>^@nHgx(Ecu z^*iMp85li`QRv{@u4 zD7&|&4NG;JAU4TufCvgZVi_brucQqRR7~SAsziE=m!~b>{~cqd>^rTdDB^&^Me66% zs?%-FF)im{d_j=VU%4`|-##u01bU2`AP?XI=QZKl5BQ^37$>=Ov%QFq3xgm{= zEigcVK(5EFa!?IE-tFZO%oW-~vG-G^LY;kk?8;LWlIrpduW7IP|%*@eQ&wsbN=IiD0o=87?cOTUFQ~_$nkhpb|O~em$SmfVb>8F%= zR)tbxdJhi7gwioBvdA0xwmYGCek7ElRR!?ds0BG6(e zR_3?7Hx@iqx2g|769{*%tlg5aJErry)mf`X)@oK{^}@2d%PT{N=WAO?MJo~A0bErJ z|14Gby)=-T>T9ibeQ_*w5<&9E=LWr@glj|b0)Jml_$T*k1`)l3 ztK)8voxsQrXj!@pYCjNH|A^W>Gq+A>RIAy4|9}5xaJj(DW5{mE$Br3gIry^1Z3MRy zTJ>3)%WctM*O-EHe0}M~`IrD!{(Ne^{SLUWdczng-@7h`CIsG^&uGyQ9Txo&W7UbU zEWzw{7mLYw&Xv{hkt9xl6eI2_2L76w1-mN6;a!R9!9SOhc~;BSI8$wG*Zi8O4hBZ- zic!EbkwTVPdY?Cse~uP0b;0M5*`mYb=;_sYR-GDWq=n-&;?KmEZ%9$EAjQBOVLa4sv+-cR_qOXpJv&LQBCqFHbC7Ju<;DZOWw!W% z=0d9h@~_f2H3-W?F<2$WCy3f~&b}#mUQGK=_Tub!al#;D^gvnMW{BGPa#5jz`>fSZyMM_Qqhr*#MNT&#wp?vp;hegG_ zcV`WLcijKo6Mbj0igQ2DHa~O+#JI&@Bo)^Zt64wVM5%#v0$Bv3o^snQx||CFNcOKh z1&?8WPSnoD+EQahqipqSg+kz2w>O?Oc9F>X-m~+PT=z3f!S|(iA~1Z)^UKQM!PTPv&&Z_e7Cbl5uj9ddB7@=0{%CGdg51V3`*%dJQg>FcHTbKJTX#xTs| zgEwHN_YcgZ0^eZE{2WOy?Hw(f_n4wDHVYI|g|c+OY3G`EHKCL4YwHr51(5d2l_sJW zaFI69)OM4xa|~A>9cE3wwVGa$w|*yr^vYvMKHuBHgUCDZ{xY)%oT^@3bV*x@KkQ zv)9$4@xfXd4PM5K1P`^YWbw8wxZhdh@B6ia{AZ=7l6XeFsz;>dZTG5qEO(WpcJ%E? z&d-7Tx{o_VFzO-J?Ky6!WkbUnYCNlRFj+WEp|hG8Nn2Dyu+3afHljZ{hl4IzqgclA z=?1(zS+;2)p~LAz&V4*`u$00A7~a{LeJFI{-C>TIaxL^(-o9x!yM&N~ z>K8n0-DSi(mB$%pnW+(%>;8eAp5zAXC`hgKfq6_8OU?7~$hOd~*c;X6%qx6T4t6>W zj-j#xU)DOCnaC+&eafs((z$WjeH+X!v-#p7@QAVv{&t3oybCG2HkdAN4x~fWle-FU z!!HEQb@xv)j{ASG5EITq_V2NV`75%)-!o>!kQe?u`$Y8Lj_|&6sU;ov+|HFU1oXE{ zyUn4nGP18u9p+Sye32B4Sn1!06~CTNIa$$&!2rIVk<1}TTyyIc0eJ8zjh2O1T7j-La!PU)O$)780=WoG}ovO)x$8cdA zhsF!RAY|FEUbQ_VK7tT=6~ot#@Q9ZGLfRa5H6C_{((!HQJUjO;zcLqIIo?TbgO@LT z;4gYxjwpT74aAgLRww9i0J??{`1G96Z!O~XYlU`<^-XZi7c9z2m3pg)qO3P z`KjFM)DAAYsipqsO251?I7U4u5BWAi9+K~VL;^Zlb$kP2!A-O0%5rg*@3q@?GMT}Z ztf^#T(f!R;&uXepv)rS

-

The default is SP_8_BIT_CHAR which results in one stop bit, no parity, and 8-bit characters.

-

SP_1_STOP_BIT - use one stop bit (default if stop bit not specified)

-

SP_2_STOP_BIT - use two stop bits

-

SP_NO_PARITY - no parity bit (default if parity not specified)

-

SP_EVEN_PARITY - add even parity bit

-

SP_ODD_PARITY - add odd parity bit

-

SP_5_BIT_CHAR - use 5-bit characters (default if size not specified)

-

SP_6_BIT_CHAR - use 6-bit characters

-

SP_7_BIT_CHAR - use 7-bit characters

-

SP_8_BIT_CHAR - use 8-bit characters

+
    +
  • SP_1_STOP_BIT - Use one stop bit (default if stop bit not specified).
  • +
  • SP_2_STOP_BIT - Use two stop bits.
  • +
  • SP_NO_PARITY - No parity bit (default if parity not specified).
  • +
  • SP_EVEN_PARITY - Add even parity bit.
  • +
  • SP_ODD_PARITY - Add odd parity bit.
  • +
  • SP_5_BIT_CHAR - Use 5-bit characters (default if size not specified).
  • +
  • SP_6_BIT_CHAR - Use 6-bit characters.
  • +
  • SP_7_BIT_CHAR - Use 7-bit characters.
  • +
  • SP_8_BIT_CHAR - Use 8-bit characters.
  • +
+

The default is SP_8_BIT_CHAR which results in one stop bit, no parity, and 8-bit characters.

+ +

Definition at line 349 of file SerialPort.h.

@@ -172,7 +203,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -180,7 +211,9 @@
void SerialPort< PortNumber, RxBufSize, TxBufSize >::clearRxError void SerialPort< PortNumber, RxBufSize, TxBufSize >::clearRxError ( ) [inline]
-

clear RX error bits

+

Clear RX error bits.

+ +

Definition at line 388 of file SerialPort.h.

@@ -191,7 +224,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -199,7 +232,9 @@
void SerialPort< PortNumber, RxBufSize, TxBufSize >::end void SerialPort< PortNumber, RxBufSize, TxBufSize >::end ( ) [inline]
-

Disables serial communication, allowing the RX and TX pins to be used for general input and output. To re-enable serial communication, call SerialPort::begin().

+

Disables serial communication, allowing the RX and TX pins to be used for general input and output. To re-enable serial communication, call SerialPort::begin().

+ +

Definition at line 404 of file SerialPort.h.

@@ -210,7 +245,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -218,7 +253,9 @@
void SerialPort< PortNumber, RxBufSize, TxBufSize >::flush void SerialPort< PortNumber, RxBufSize, TxBufSize >::flush ( ) [inline]
-

For Arduino 1.0 and greater call flushTx(). For Arduino 0023 and before call flushRx().

+

For Arduino 1.0 and greater call flushTx().

+ +

Definition at line 418 of file SerialPort.h.

@@ -229,7 +266,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -239,6 +276,8 @@

Discard any buffered incoming serial data.

+

Definition at line 423 of file SerialPort.h.

+
@@ -248,7 +287,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
void SerialPort< PortNumber, RxBufSize, TxBufSize >::flushRx void SerialPort< PortNumber, RxBufSize, TxBufSize >::flushRx ( ) [inline]
- + @@ -258,6 +297,8 @@

Waits for the transmission of outgoing serial data to complete.

+

Definition at line 435 of file SerialPort.h.

+
@@ -267,7 +308,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
void SerialPort< PortNumber, RxBufSize, TxBufSize >::flushTx void SerialPort< PortNumber, RxBufSize, TxBufSize >::flushTx ( ) [inline]
- + @@ -275,7 +316,15 @@
uint8_t SerialPort< PortNumber, RxBufSize, TxBufSize >::getRxError uint8_t SerialPort< PortNumber, RxBufSize, TxBufSize >::getRxError ( ) [inline]
-
Returns:
RX error bits
+
Returns:
RX error bits. Possible error bits are: +
+ +

Definition at line 396 of file SerialPort.h.

@@ -286,7 +335,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -295,7 +344,9 @@
int SerialPort< PortNumber, RxBufSize, TxBufSize >::peek int SerialPort< PortNumber, RxBufSize, TxBufSize >::peek ( void  )
-
Returns:
the first byte of incoming serial data available or -1 if no data is available. Peek() always return -1 for unbuffered RX.
+
Returns:
The first byte of incoming serial data available or -1 if no data is available. -1 is always returned for unbuffered RX.
+ +

Definition at line 445 of file SerialPort.h.

@@ -306,7 +357,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -315,7 +366,9 @@

Read incoming serial data.

-
Returns:
the first byte of incoming serial data available or -1 if no data is available
+
Returns:
The first byte of incoming serial data available or -1 if no data is available.
+ +

Definition at line 456 of file SerialPort.h.

@@ -326,7 +379,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize>
int SerialPort< PortNumber, RxBufSize, TxBufSize >::read int SerialPort< PortNumber, RxBufSize, TxBufSize >::read ( ) [inline]
- + @@ -348,12 +401,14 @@

Read incoming serial data. Stop when RX buffer is empty or n bytes have been read.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::read size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::read ( uint8_t *  b,
- - + +
[in]blocation to receive the data
[in]nmaximum number of bytes to read
[in]bThe location to receive the data.
[in]nMaximum number of bytes to read.
-
Returns:
number of bytes read
+
Returns:
The number of bytes read.
+ +

Definition at line 478 of file SerialPort.h.

@@ -364,7 +419,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -376,11 +431,13 @@

Write a flash string to the serial port.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write ( const __FlashStringHelper *  s)
- +
[in]sstring to be written.
[in]sThe string to be written.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 574 of file SerialPort.h.

@@ -391,7 +448,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -403,11 +460,13 @@

Write a string to the serial port.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write ( const char *  s)
- +
[in]sstring to be written.
[in]sThe string to be written.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port
+ +

Definition at line 626 of file SerialPort.h.

@@ -418,7 +477,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -440,12 +499,14 @@

Write binary data to the serial port.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write ( const uint8_t *  b,
- - + +
[in]bbytes to be written
[in]nnumber of bytes to write
[in]bLocation of the bytes to be written.
[in]nThe number of bytes to write.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 600 of file SerialPort.h.

@@ -456,7 +517,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -468,11 +529,13 @@

Write binary data to the serial port.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write ( uint8_t  b)
- +
[in]bbyte to be written.
[in]bThe byte to be written.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 504 of file SerialPort.h.

@@ -483,7 +546,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -505,12 +568,14 @@

Write binary data from flash memory to the serial port.

Parameters:
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write_P size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::write_P ( PGM_P  b,
- - + +
[in]bbytes to be written
[in]nnumber of bytes to write
[in]bLocation of the bytes to be written.
[in]nThe number of bytes to write.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 548 of file SerialPort.h.

@@ -521,7 +586,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -530,14 +595,16 @@
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln ( const __FlashStringHelper *  s)
-

Write a flash string to the serial port followed by CF LF

+

Write a flash string to the serial port followed by CR/LF.

Parameters:
- +
[in]sstring to be written.
[in]sThe string to be written.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 587 of file SerialPort.h.

@@ -548,7 +615,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -557,14 +624,16 @@
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln ( const char *  s)
-

Write a string to the serial port followed by CF LF

+

Write a string to the serial port followed by CR/LF.

Parameters:
- +
[in]sstring to be written.
[in]sThe string to be written.
-
Returns:
number of bytes written to the serial port
+
Returns:
The number of bytes written to the serial port.
+ +

Definition at line 535 of file SerialPort.h.

@@ -575,7 +644,7 @@ template<uint8_t PortNumber, size_t RxBufSize, size_t TxBufSize> - + @@ -583,13 +652,15 @@
size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln size_t SerialPort< PortNumber, RxBufSize, TxBufSize >::writeln ( ) [inline]
-

write CR LF

+

Write CR/LF.

Returns:
2
+

Definition at line 522 of file SerialPort.h.

+

The documentation for this class was generated from the following file: @@ -606,7 +677,7 @@ -