From b414e55e0373ee8ad0398e675177e63209aec681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Rodot?= Date: Wed, 9 Nov 2016 19:43:47 +0100 Subject: [PATCH 01/12] Finer volume control added --- libraries/Gamebuino/Gamebuino.cpp | 19 +++++++++++++++++-- libraries/Gamebuino/Sound.cpp | 4 ++-- libraries/Gamebuino/settings.c | 6 +++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/libraries/Gamebuino/Gamebuino.cpp b/libraries/Gamebuino/Gamebuino.cpp index f48f704..9525051 100644 --- a/libraries/Gamebuino/Gamebuino.cpp +++ b/libraries/Gamebuino/Gamebuino.cpp @@ -137,7 +137,7 @@ void Gamebuino::titleScreen(const __FlashStringHelper* name, const uint8_t *log //toggle volume when B is pressed if(buttons.pressed(BTN_B)){ - sound.setVolume(sound.globalVolume+1); + sound.setVolume(sound.getVolume() + 1); sound.playTick(); } //leave the menu @@ -172,6 +172,19 @@ boolean Gamebuino::update() { } else { if (!frameEndMicros) { //runs once at the end of the frame + + //increase volume shortcut : hold C + press UP + if(buttons.repeat(BTN_C, 1) && buttons.repeat(BTN_UP, 10)){ + sound.setVolume(sound.getVolume() + 1); + sound.playTick(); + } + + //reduce volume shortcut : hold C + press DOWN + if(buttons.repeat(BTN_C, 1) && buttons.repeat(BTN_DOWN, 10)){ + sound.setVolume(sound.getVolume() - 1); + sound.playTick(); + } + sound.updateTrack(); sound.updatePattern(); sound.updateNote(); @@ -538,7 +551,9 @@ void Gamebuino::readSettings(){ backlight.ambientLightMin = pgm_read_word(SETTINGS_PAGE+OFFSET_LIGHT_MIN); backlight.ambientLightMax = pgm_read_word(SETTINGS_PAGE+OFFSET_LIGHT_MAX); - sound.volumeMax = pgm_read_byte(SETTINGS_PAGE+OFFSET_VOLUME_MAX); + //sound.volumeMax = pgm_read_byte(SETTINGS_PAGE+OFFSET_VOLUME_MAX); + sound.volumeMax = VOLUME_GLOBAL_MAX; //max volume is no longer read from settings + sound.globalVolume = pgm_read_byte(SETTINGS_PAGE+OFFSET_VOLUME_DEFAULT); startMenuTimer = pgm_read_byte(SETTINGS_PAGE+OFFSET_START_MENU_TIMER); diff --git a/libraries/Gamebuino/Sound.cpp b/libraries/Gamebuino/Sound.cpp index 9e7ed7d..4a9e91d 100644 --- a/libraries/Gamebuino/Sound.cpp +++ b/libraries/Gamebuino/Sound.cpp @@ -434,7 +434,7 @@ void Sound::updateNote(uint8_t i) { } noInterrupts(); _chanHalfPeriod[i] = pgm_read_byte(_halfPeriods + outputPitch[i]); - _chanOutput[i] = _chanOutputVolume[i] = outputVolume[i] * globalVolume * chanVolumes[i] * stepVolume[i]; + _chanOutput[i] = _chanOutputVolume[i] = (int(outputVolume[i] * chanVolumes[i] * stepVolume[i]) << (globalVolume)) / 128; //Serial.println(outputVolume[i]); interrupts(); } @@ -593,7 +593,7 @@ void Sound::playTick(){ void Sound::setVolume(int8_t volume) { #if NUM_CHANNELS > 0 - globalVolume = volume % (volumeMax+1); + globalVolume = (volume < 0) ? volumeMax : volume % (volumeMax+1); //wrap volume value #endif } diff --git a/libraries/Gamebuino/settings.c b/libraries/Gamebuino/settings.c index 4f286e7..c70ca43 100644 --- a/libraries/Gamebuino/settings.c +++ b/libraries/Gamebuino/settings.c @@ -32,7 +32,7 @@ #define ENABLE_GUI 1 //enable menu, keyboard, pop-up, volume adjust functions #define ENABLE_BITMAPS 1 //will replace bitmaps with rectangles if disabled #define ENABLE_GRAYSCALE 1 //allows the use of the GRAY color -#define EXTENDED_NOTE_RANGE 1 //allows the use of notes above A 5... please avoid that they sound really bad +#define EXTENDED_NOTE_RANGE 0 //allows the use of notes above A 5... please avoid that they sound really bad //not really useful #define ENABLE_BATTERY 1 //disable battery monitoring @@ -75,8 +75,8 @@ #define SCR_RST A0 //sound -#define VOLUME_GLOBAL_MAX 1 -#define VOLUME_CHANNEL_MAX 255/NUM_CHANNELS/VOLUME_GLOBAL_MAX/7/9 //7=instrument volume 9=note volume +#define VOLUME_GLOBAL_MAX 8 +#define VOLUME_CHANNEL_MAX 255/NUM_CHANNELS/7/9 //7=instrument volume 9=note volume //battery voltage monitor #define BAT_PIN A6 From 4c59ae7dfa7801a0a563cecd06d71d60518eb1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Rodot?= Date: Wed, 9 Nov 2016 20:03:18 +0100 Subject: [PATCH 02/12] Changed volume shortcut to C+B --- libraries/Gamebuino/Gamebuino.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libraries/Gamebuino/Gamebuino.cpp b/libraries/Gamebuino/Gamebuino.cpp index 9525051..e062288 100644 --- a/libraries/Gamebuino/Gamebuino.cpp +++ b/libraries/Gamebuino/Gamebuino.cpp @@ -173,16 +173,13 @@ boolean Gamebuino::update() { } else { if (!frameEndMicros) { //runs once at the end of the frame - //increase volume shortcut : hold C + press UP - if(buttons.repeat(BTN_C, 1) && buttons.repeat(BTN_UP, 10)){ + //increase volume shortcut : hold C + press B + if(buttons.repeat(BTN_C, 1) && buttons.pressed(BTN_B)){ sound.setVolume(sound.getVolume() + 1); + popup(F("\027+\026 \23\24"), 60); sound.playTick(); } - //reduce volume shortcut : hold C + press DOWN - if(buttons.repeat(BTN_C, 1) && buttons.repeat(BTN_DOWN, 10)){ - sound.setVolume(sound.getVolume() - 1); - sound.playTick(); } sound.updateTrack(); From 92816d2706b1be955a8f13f82b348e4d5e511a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Rodot?= Date: Wed, 9 Nov 2016 20:03:40 +0100 Subject: [PATCH 03/12] Add flash loader shortcut : hold C+A --- libraries/Gamebuino/Gamebuino.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/Gamebuino/Gamebuino.cpp b/libraries/Gamebuino/Gamebuino.cpp index e062288..784cba5 100644 --- a/libraries/Gamebuino/Gamebuino.cpp +++ b/libraries/Gamebuino/Gamebuino.cpp @@ -180,6 +180,12 @@ boolean Gamebuino::update() { sound.playTick(); } + //flash loader shortcut : hold C + A + if(buttons.repeat(BTN_C, 1) && buttons.pressed(BTN_A)){ + popup(F("\027+\025 \020 LOADER"), 60); + } + if(buttons.repeat(BTN_C, 1) && buttons.held(BTN_A,40)){ + changeGame(); } sound.updateTrack(); From c4fea885b86af910431c4bf47acba03d02425ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Rodot?= Date: Wed, 9 Nov 2016 20:29:18 +0100 Subject: [PATCH 04/12] Mute on startup if battery is low --- libraries/Gamebuino/Gamebuino.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/Gamebuino/Gamebuino.cpp b/libraries/Gamebuino/Gamebuino.cpp index 784cba5..a9fb4d0 100644 --- a/libraries/Gamebuino/Gamebuino.cpp +++ b/libraries/Gamebuino/Gamebuino.cpp @@ -55,8 +55,9 @@ void Gamebuino::begin() { display.begin(SCR_CLK, SCR_DIN, SCR_DC, SCR_CS, SCR_RST); sound.begin(); - //mute when B is held during start up - if(buttons.pressed(BTN_B)){ + //mute when B is held during start up or if battery is low + battery.update(); + if(buttons.pressed(BTN_B) || (battery.level == 0)){ sound.setVolume(0); } else{ //play the startup sound on each channel for it to be louder From f423aeb3be959ea54aa5c01a29eebda5ba4a5ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Rodot?= Date: Wed, 9 Nov 2016 20:37:22 +0100 Subject: [PATCH 05/12] Examples clean up --- .../examples/2.Intermediate/Music/d_music.ino | 141 ------------ .../4.Utilities/Loader_old/Loader_old.ino | 204 ------------------ .../examples/4.Utilities/Loader_old/list.ino | 80 ------- .../4.Utilities/Loader_old/loadeeprom.ino | 47 ---- .../examples/4.Utilities/Loader_old/logo.ino | 44 ---- .../4.Utilities/Loader_old/saveeeprom.ino | 73 ------- 6 files changed, 589 deletions(-) delete mode 100644 libraries/Gamebuino/examples/2.Intermediate/Music/d_music.ino delete mode 100644 libraries/Gamebuino/examples/4.Utilities/Loader_old/Loader_old.ino delete mode 100644 libraries/Gamebuino/examples/4.Utilities/Loader_old/list.ino delete mode 100644 libraries/Gamebuino/examples/4.Utilities/Loader_old/loadeeprom.ino delete mode 100644 libraries/Gamebuino/examples/4.Utilities/Loader_old/logo.ino delete mode 100644 libraries/Gamebuino/examples/4.Utilities/Loader_old/saveeeprom.ino diff --git a/libraries/Gamebuino/examples/2.Intermediate/Music/d_music.ino b/libraries/Gamebuino/examples/2.Intermediate/Music/d_music.ino deleted file mode 100644 index 1a994e3..0000000 --- a/libraries/Gamebuino/examples/2.Intermediate/Music/d_music.ino +++ /dev/null @@ -1,141 +0,0 @@ -#include -#include -Gamebuino gb; - -//patterns -/* p00 */ const unsigned int p00[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p01 */ const unsigned int p01[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p02 */ const unsigned int p02[] PROGMEM = { 0x40C,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p03 */ const unsigned int p03[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p04 */ const unsigned int p04[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x40C,0x4FC,0x418,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p05 */ const unsigned int p05[] PROGMEM = { 0x4E4,0x4FC,0x408,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x408,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x0000 }; -/* p06 */ const unsigned int p06[] PROGMEM = { 0x4E4,0x4FC,0x408,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x40C,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x4E4,0x4E4,0x0000 }; -/* p07 */ const unsigned int p07[] PROGMEM = { 0x4E4,0x4FC,0x408,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x40C,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x0000 }; -/* p08 */ const unsigned int p08[] PROGMEM = { 0x4E4,0x4FC,0x40C,0x4FC,0x4E4,0x4FC,0x4E4,0x4FC,0x408,0x4FC,0x4E4,0x4E4,0x4E4,0x4FC,0x4E4,0x4E4,0x0000 }; -/* p09 */ const unsigned int p09[] PROGMEM = { 0x0000 }; -/* p0A */ const unsigned int p0A[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p0B */ const unsigned int p0B[] PROGMEM = { 0x0000 }; -/* p0C */ const unsigned int p0C[] PROGMEM = { 0x438,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x438,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p0D */ const unsigned int p0D[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p0E */ const unsigned int p0E[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p0F */ const unsigned int p0F[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p10 */ const unsigned int p10[] PROGMEM = { 0x40C,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p11 */ const unsigned int p11[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x418,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p12 */ const unsigned int p12[] PROGMEM = { 0x0000 }; -/* p13 */ const unsigned int p13[] PROGMEM = { 0x0000 }; -/* p14 */ const unsigned int p14[] PROGMEM = { 0x0000 }; -/* p15 */ const unsigned int p15[] PROGMEM = { 0x428,0x4FC,0x42C,0x4FC,0x4FC,0x4FC,0x434,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p16 */ const unsigned int p16[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x414,0x4FC,0x418,0x4FC,0x448,0x4FC,0x418,0x4FC,0x448,0x4FC,0x0000 }; -/* p17 */ const unsigned int p17[] PROGMEM = { 0x4E4,0x4FC,0x40C,0x4FC,0x4E4,0x414,0x4E4,0x414,0x418,0x4FC,0x4E4,0x418,0x4E4,0x4E4,0x418,0x4E4,0x0000 }; -/* p18 */ const unsigned int p18[] PROGMEM = { 0x408,0x408,0x408,0x408,0x408,0x4FC,0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x408,0x0000 }; -/* p19 */ const unsigned int p19[] PROGMEM = { 0x0000 }; -/* p1A */ const unsigned int p1A[] PROGMEM = { 0x4E4,0x4FC,0x438,0x4E4,0x4FC,0x408,0x4E4,0x408,0x438,0x4FC,0x4E4,0x408,0x4E4,0x4FC,0x4E4,0x4FC,0x0000 }; -/* p1B */ const unsigned int p1B[] PROGMEM = { 0x0000 }; -/* p1C */ const unsigned int p1C[] PROGMEM = { 0x0000 }; -/* p1D */ const unsigned int p1D[] PROGMEM = { 0x0000 }; -/* p1E */ const unsigned int p1E[] PROGMEM = { 0x0000 }; -/* p1F */ const unsigned int p1F[] PROGMEM = { 0x0000 }; -/* p20 */ const unsigned int p20[] PROGMEM = { 0x0000 }; -/* p21 */ const unsigned int p21[] PROGMEM = { 0x0000 }; -/* p22 */ const unsigned int p22[] PROGMEM = { 0x0000 }; -/* p23 */ const unsigned int p23[] PROGMEM = { 0x4E4,0x4FC,0x438,0x4E4,0x4FC,0x408,0x4E4,0x40C,0x43C,0x4FC,0x4E4,0x40C,0x4E4,0x4FC,0x4E4,0x4E4,0x0000 }; -/* p24 */ const unsigned int p24[] PROGMEM = { 0x4E4,0x4FC,0x43C,0x4E4,0x4FC,0x40C,0x4E4,0x408,0x438,0x4FC,0x4E4,0x408,0x4E4,0x4E4,0x4FC,0x4E4,0x0000 }; -/* p25 */ const unsigned int p25[] PROGMEM = { 0x4E4,0x4FC,0x43C,0x4E4,0x4FC,0x414,0x4E4,0x414,0x418,0x448,0x4E4,0x478,0x4E4,0x4A8,0x4E4,0x4E4,0x0000 }; -/* p26 */ const unsigned int p26[] PROGMEM = { 0x0000 }; -/* p27 */ const unsigned int p27[] PROGMEM = { 0x0000 }; -/* p28 */ const unsigned int p28[] PROGMEM = { 0x4E4,0x4FC,0x43C,0x4E4,0x4FC,0x414,0x4E4,0x414,0x418,0x448,0x4E4,0x4D4,0x4E4,0x4A8,0x4E4,0x4E4,0x0000 }; -/* p29 */ const unsigned int p29[] PROGMEM = { 0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p2A */ const unsigned int p2A[] PROGMEM = { 0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p2B */ const unsigned int p2B[] PROGMEM = { 0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p2C */ const unsigned int p2C[] PROGMEM = { 0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x438,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p2D */ const unsigned int p2D[] PROGMEM = { 0x4FC,0x4FC,0x408,0x408,0x4FC,0x4FC,0x408,0x4FC,0x408,0x408,0x4FC,0x4FC,0x4FC,0x408,0x408,0x4FC,0x0000 }; -/* p2E */ const unsigned int p2E[] PROGMEM = { 0x0000 }; -/* p2F */ const unsigned int p2F[] PROGMEM = { 0x0000 }; -/* p30 */ const unsigned int p30[] PROGMEM = { 0x0000 }; -/* p31 */ const unsigned int p31[] PROGMEM = { 0x0000 }; -/* p32 */ const unsigned int p32[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x414,0x4FC,0x418,0x4FC,0x4FC,0x4FC,0x4E4,0x4FC,0x4E4,0x4E4,0x0000 }; -/* p33 */ const unsigned int p33[] PROGMEM = { 0x0000 }; -/* p34 */ const unsigned int p34[] PROGMEM = { 0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x4FC,0x408,0x408,0x408,0x4FC,0x408,0x4FC,0x0000 }; -/* p35 */ const unsigned int p35[] PROGMEM = { 0x0000 }; -/* p36 */ const unsigned int p36[] PROGMEM = { 0x0000 }; -/* p37 */ const unsigned int p37[] PROGMEM = { 0x0000 }; -/* p38 */ const unsigned int p38[] PROGMEM = { 0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x408,0x4FC,0x408,0x4FC,0x408,0x408,0x408,0x4FC,0x408,0x4FC,0x0000 }; -/* p39 */ const unsigned int p39[] PROGMEM = { 0x0000 }; -/* p3A */ const unsigned int p3A[] PROGMEM = { 0x0000 }; -/* p3B */ const unsigned int p3B[] PROGMEM = { 0x0000 }; -/* p3C */ const unsigned int p3C[] PROGMEM = { 0x0000 }; -/* p3D */ const unsigned int p3D[] PROGMEM = { 0x0000 }; -/* p3E */ const unsigned int p3E[] PROGMEM = { 0x0000 }; -/* p3F */ const unsigned int p3F[] PROGMEM = { 0x0000 }; -/* p40 */ const unsigned int p40[] PROGMEM = { 0x0000 }; -/* p41 */ const unsigned int p41[] PROGMEM = { 0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4A8,0x0000 }; -/* p42 */ const unsigned int p42[] PROGMEM = { 0x0000 }; -/* p43 */ const unsigned int p43[] PROGMEM = { 0x0000 }; -/* p44 */ const unsigned int p44[] PROGMEM = { 0x0000 }; -/* p45 */ const unsigned int p45[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p46 */ const unsigned int p46[] PROGMEM = { 0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p47 */ const unsigned int p47[] PROGMEM = { 0x0000 }; -/* p48 */ const unsigned int p48[] PROGMEM = { 0x0000 }; -/* p49 */ const unsigned int p49[] PROGMEM = { 0x0000 }; -/* p4A */ const unsigned int p4A[] PROGMEM = { 0x0000 }; -/* p4B */ const unsigned int p4B[] PROGMEM = { 0x0000 }; -/* p4C */ const unsigned int p4C[] PROGMEM = { 0x0000 }; -/* p4D */ const unsigned int p4D[] PROGMEM = { 0x0000 }; -/* p4E */ const unsigned int p4E[] PROGMEM = { 0x0000 }; -/* p4F */ const unsigned int p4F[] PROGMEM = { 0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x408,0x4FC,0x408,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p50 */ const unsigned int p50[] PROGMEM = { 0x0000 }; -/* p51 */ const unsigned int p51[] PROGMEM = { 0x0000 }; -/* p52 */ const unsigned int p52[] PROGMEM = { 0x0000 }; -/* p53 */ const unsigned int p53[] PROGMEM = { 0x0000 }; -/* p54 */ const unsigned int p54[] PROGMEM = { 0x0000 }; -/* p55 */ const unsigned int p55[] PROGMEM = { 0x408,0x4FC,0x40C,0x4FC,0x4FC,0x4FC,0x414,0x4FC,0x418,0x4FC,0x4FC,0x4FC,0x4E4,0x4FC,0x4E4,0x4E4,0x0000 }; -/* p56 */ const unsigned int p56[] PROGMEM = { 0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x468,0x4FC,0x4FC,0x4FC,0x0000 }; -/* p57 */ const unsigned int p57[] PROGMEM = { 0x0000 }; -/* p58 */ const unsigned int p58[] PROGMEM = { 0x0000 }; -/* p59 */ const unsigned int p59[] PROGMEM = { 0x0000 }; -/* p5A */ const unsigned int p5A[] PROGMEM = { 0x0000 }; -/* p5B */ const unsigned int p5B[] PROGMEM = { 0x0000 }; -/* p5C */ const unsigned int p5C[] PROGMEM = { 0x0000 }; -/* p5D */ const unsigned int p5D[] PROGMEM = { 0x0000 }; -/* p5E */ const unsigned int p5E[] PROGMEM = { 0x0000 }; -/* p5F */ const unsigned int p5F[] PROGMEM = { 0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x4FC,0x0000 }; - - -//pattern set -const uint16_t* const patternSet[] PROGMEM = {p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p0A,p0B,p0C,p0D,p0E,p0F,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p1A,p1B,p1C,p1D,p1E,p1F,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p2A,p2B,p2C,p2D,p2E,p2F,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p3A,p3B,p3C,p3D,p3E,p3F,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p4A,p4B,p4C,p4D,p4E,p4F,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p5A,p5B,p5C,p5D,p5E,p5F}; - -//tracks -const unsigned int track1[] PROGMEM = {0x05F,0x05F,0x05F,0x05F,0x05F,0x05F,0x05F,0x05F,0x02D,0x038,0x02D,0x038,0x02D,0x038,0x02D,0x034,0xFFFF}; -const unsigned int track2[] PROGMEM = {0x04F,0x055,0x04F,0x055,0x000,0x001,0x002,0x003,0x000,0x001,0x002,0x003,0x000,0x001,0x002,0x032,0xFFFF}; -const unsigned int track3[] PROGMEM = {0x05F,0x05F,0x05F,0x056,0x000,0x001,0x002,0x003,0x000,0x001,0x002,0x003,0x000,0x001,0x002,0x003,0xFFFF}; -const unsigned int track4[] PROGMEM = {0x05F,0x05F,0x05F,0x05F,0x05F,0x05F,0x05F,0x041,0x05F,0x05F,0x05F,0x041,0x045,0x046,0x010,0x016,0xFFFF}; - -///////////////////////////////////// SETUP -void setup() { - Serial.begin(115200); - gb.begin(); - gb.titleScreen(F("Sound demo")); -} - -void loop(){ - if(gb.update()){ - if(gb.buttons.pressed(BTN_A)){ - gb.sound.changePatternSet(patternSet,0); - gb.sound.changePatternSet(patternSet,1); - gb.sound.changePatternSet(patternSet,2); - gb.sound.changePatternSet(patternSet,3); - gb.sound.playTrack(track1,0); - gb.sound.playTrack(track2,1); - gb.sound.playTrack(track3,2); - gb.sound.playTrack(track4,3); - gb.sound.command(CMD_INSTRUMENT, 1, 0, 3); //play the channel 3 with noise - } - if(gb.buttons.pressed(BTN_B)){ - gb.sound.playCancel(); - } - if(gb.buttons.pressed(BTN_C)){ - gb.sound.playCancel(); - gb.titleScreen(F("Sound demo")); - } - } -} diff --git a/libraries/Gamebuino/examples/4.Utilities/Loader_old/Loader_old.ino b/libraries/Gamebuino/examples/4.Utilities/Loader_old/Loader_old.ino deleted file mode 100644 index eff9daa..0000000 --- a/libraries/Gamebuino/examples/4.Utilities/Loader_old/Loader_old.ino +++ /dev/null @@ -1,204 +0,0 @@ -#include //requires the tinyFAT library. You can download it here : http://www.henningkarlsen.com/electronics/library.php?id=37 -#include -#include -#include -#include -Gamebuino gb; - -extern const byte logo[] PROGMEM; - -char nextGameName[9] = "\0\0\0\0\0\0\0\0"; -char prevGameName[9] = "zzzzzzzz"; -byte initres; -byte res; -int numberOfFiles = 1; -int numberOfPages; -int selectedFile; -int selectedPage; -int prevSelectedPage; -int thisFile; -#define PAGELENGTH (LCDHEIGHT/gb.display.fontHeight) - -char completeName[13] = "xxxxxxxx.xxx"; -#define BUFFER_SIZE 128 -char buffer[BUFFER_SIZE+4]; - -void setup(){ - //Serial.begin(115200); - gb.begin(); - gb.battery.thresholds[0] = 0; //disable battery monitoring - gb.startMenuTimer = 12; - gb.titleScreen(logo); - gb.display.clear(); - gb.display.persistence=true; - gb.battery.show = false; - - gb.display.print(F("\35 Reading SD card...\n\n")); - gb.display.update(); - - SPI.setClockDivider(SPI_CLOCK_DIV128); //lower the SPI speed for better compatibility - initres=file.initFAT(); - - if (initres!=NO_ERROR) - { - gb.display.clear(); - gb.display.print(F("Insert SD card\nand restart.")); - gb.display.update(); - while(1); - } - - const char* address = SETTINGS_PAGE + OFFSET_CURRENTGAME; - prevGameName[0] = pgm_read_byte(address); - prevGameName[1] = pgm_read_byte(address+1); - prevGameName[2] = pgm_read_byte(address+2); - prevGameName[3] = pgm_read_byte(address+3); - prevGameName[4] = pgm_read_byte(address+4); - prevGameName[5] = pgm_read_byte(address+5); - prevGameName[6] = pgm_read_byte(address+6); - prevGameName[7] = pgm_read_byte(address+7); - - for(byte i=0; i<8; i++){ - if(prevGameName[i] == ' ') - prevGameName[i] = '\0'; - } - - if(prevGameName[0]){ - saveeeprom(); - saveName(); - } - /*else{ - gb.display.println(F("No prev game found")); - }*/ - - /*gb.display.println(F("\25:continue")); - gb.display.update(); - while(1){ - gb.buttons.update(); - if(gb.buttons.pressed(BTN_A)) break; - delay(50); - }*/ - - //count the number of files - file.findFirstFile(&file.DE); - while(res == NO_ERROR){ - res = file.findNextFile(&file.DE); - if(res != NO_ERROR) break; - numberOfFiles++; - } - numberOfPages = ((numberOfFiles-1)/PAGELENGTH) + 1; - gb.display.textWrap = false; - updateList(); -} - -void loop(){ - selectedFile = 0; //number of the selected file 0 for the 1st file, 1 for the 2nd, etc. - thisFile = 0; //number of the file currently itering through - while(1) - if(gb.update()){ - - if(gb.buttons.pressed(BTN_A)){ - loadSelectedFile(); - } - - if(gb.buttons.repeat(BTN_DOWN,3)){ - selectedFile++; - if(gb.buttons.repeat(BTN_B,1)){ - selectedFile += PAGELENGTH-1; - } - if(selectedFile >= numberOfFiles){ - selectedFile = 0; - } - selectedPage = selectedFile/PAGELENGTH; - updateCursor(); - } - - if(gb.buttons.repeat(BTN_UP,3)){ - selectedFile--; - if(gb.buttons.repeat(BTN_B,1)){ - selectedFile -= PAGELENGTH-1; - } - if(selectedFile < 0){ - selectedFile = numberOfFiles-1; - thisFile = 0; - } - selectedPage = selectedFile/PAGELENGTH; - updateCursor(); - } - - if(selectedPage != prevSelectedPage){ - prevSelectedPage = selectedPage; - updateList(); - } - } -} - -void saveName(){ - //gb.display.println(F("Saving name to flash")); - //gb.display.update(); - for(byte i=0; i<128; i++){ - buffer[i] = pgm_read_byte(SETTINGS_PAGE+i); - } - for(byte i=0; i<9; i++){ - buffer[i+OFFSET_CURRENTGAME] = nextGameName[i]; - } - write_flash_page (SETTINGS_PAGE, (unsigned char *)buffer); -} - -void loadSelectedFile(){ - byte thisFile = 0; - res = file.findFirstFile(&file.DE); - while(res == NO_ERROR){ - if(selectedFile == thisFile){ - //check that this is an HEX file - if(strstr(file.DE.fileext,"HEX")){ - strcpy(nextGameName, file.DE.filename); - file.closeFile(); - gb.display.clear(); - saveName(); - loadeeprom(); - /*gb.display.println(F("\25:continue")); - gb.display.update(); - while(1){ - gb.buttons.update(); - if(gb.buttons.pressed(BTN_A)) break; - delay(50); - }*/ - gb.display.print(F("\n\35 Flashing game...\n\nDON'T TURN OFF!")); - gb.display.update(); - load_game(nextGameName); - } - else{ //not an HEX file - file.closeFile(); - gb.sound.playCancel(); - //draw frame - gb.display.setColor(WHITE); - gb.display.fillRoundRect(5,10,LCDWIDTH-10,gb.display.fontHeight*3, 3); - gb.display.setColor(BLACK); - gb.display.drawRoundRect(5,10,LCDWIDTH-10,gb.display.fontHeight*3, 3); - //draw error message - gb.display.cursorX = 0; - gb.display.cursorY = 10+3; - gb.display.println(" Not an HEX file "); - gb.display.println(" \25: OK "); - //wait for A to be pressed - while(1){ - if(gb.update()){ - if(gb.buttons.pressed(BTN_A)){ - gb.display.setColor(BLACK); - updateList(); - return; - } - } - } - } - } - thisFile++; - res = file.findNextFile(&file.DE); - } -} - - - - - - diff --git a/libraries/Gamebuino/examples/4.Utilities/Loader_old/list.ino b/libraries/Gamebuino/examples/4.Utilities/Loader_old/list.ino deleted file mode 100644 index 2eadbbc..0000000 --- a/libraries/Gamebuino/examples/4.Utilities/Loader_old/list.ino +++ /dev/null @@ -1,80 +0,0 @@ -const char muliplierChars[] PROGMEM = " kMG"; - -void updateCursor(){ - gb.sound.playTick(); - gb.display.setColor(WHITE); - gb.display.fillRect(0,0,gb.display.fontWidth,LCDHEIGHT); - gb.display.setColor(BLACK, WHITE); - gb.display.cursorX = 0; - gb.display.cursorY = gb.display.fontHeight*(selectedFile%PAGELENGTH); - gb.display.print("\x10"); -} - -void updateList(){ - gb.display.clear(); - if((selectedFile < thisFile) || (thisFile == 0)){ //when going to the previous page - thisFile = 0; - res = file.findFirstFile(&file.DE); - //iterate through previous pages - for(byte thisPage = 0; thisPage < selectedFile/PAGELENGTH; thisPage++){ - //iterate through files of previous pages - for(byte i = 0; i PAGELENGTH){ //if there is several pages - gb.display.drawFastVLine(LCDWIDTH-2,0,LCDHEIGHT); - gb.display.fillRect(LCDWIDTH-3, selectedPage*LCDHEIGHT/numberOfPages, 3, 1+LCDHEIGHT/numberOfPages); - } - - while (1) - { - gb.display.print(" "); - - boolean isHex = false; - if(strstr(file.DE.fileext,"HEX")){ - isHex = true; - } - - if(isHex){ - gb.display.print(" "); - } - else{ - gb.display.print("*"); - } - - gb.display.print(file.DE.filename); - gb.display.print("."); - gb.display.print(file.DE.fileext); - - unsigned long size = file.DE.fileSize; - byte multiplier = 0; - while(1){ - if(size < 999){ - gb.display.print(" "); - gb.display.print(size); - if(multiplier){ - gb.display.print((char)pgm_read_byte(muliplierChars + multiplier)); - } - gb.display.println('B'); - break; - } - size /= 1024; - multiplier ++; - } - - thisFile++; - //open next file - res = file.findNextFile(&file.DE); - if(res != NO_ERROR){ - break; - } - //don't display next page - if(thisFile > ((selectedFile/PAGELENGTH)*PAGELENGTH+PAGELENGTH-1)) - break; - } - updateCursor(); -} diff --git a/libraries/Gamebuino/examples/4.Utilities/Loader_old/loadeeprom.ino b/libraries/Gamebuino/examples/4.Utilities/Loader_old/loadeeprom.ino deleted file mode 100644 index ab5a3ec..0000000 --- a/libraries/Gamebuino/examples/4.Utilities/Loader_old/loadeeprom.ino +++ /dev/null @@ -1,47 +0,0 @@ -void loadeeprom() { - strcpy(completeName, nextGameName); - for (byte i = 0; i < 8; i++) { - if (completeName[i] == ' ') - completeName[i] = '\0'; - } - strcat(completeName, ".SAV"); - res = file.openFile(completeName, FILEMODE_TEXT_READ); - if (res == NO_ERROR) - { - gb.display.print("Loading saved game\n"); - gb.display.println(completeName); - gb.display.update(); - word result = 0; - byte i = 0; - while ((result != EOF) and (result != FILE_IS_EMPTY)) - { - result = file.readLn(buffer, BUFFER_SIZE + 2); - if (result != FILE_IS_EMPTY) - { - for (byte j = 0; j < BUFFER_SIZE; j += 2) { - EEPROM.write((i * BUFFER_SIZE + j) / 2, (buffer[j] & 0xF0) | (buffer[j + 1] & 0x0F)); - } - i++; - } - else { - gb.display.println(F("File empty")); - gb.display.println(F("Cleaning EEPROM")); - gb.display.update(); - for (int i = 0; i < 1024; i++) { - if (EEPROM.read(i)) - EEPROM.write(i, 0); - } - } - } - file.closeFile(); - } - else { - gb.display.println(F("No saved game")); - gb.display.println(F("Cleaning EEPROM")); - gb.display.update(); - for (int i = 0; i < 1024; i++) { - if (EEPROM.read(i)) - EEPROM.write(i, 0); - } - } -} diff --git a/libraries/Gamebuino/examples/4.Utilities/Loader_old/logo.ino b/libraries/Gamebuino/examples/4.Utilities/Loader_old/logo.ino deleted file mode 100644 index 580a26c..0000000 --- a/libraries/Gamebuino/examples/4.Utilities/Loader_old/logo.ino +++ /dev/null @@ -1,44 +0,0 @@ -const byte logo[] PROGMEM = -{ - 64,36, //width and height - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000111, B11100011, B11111111, B11111111, B11110000, B00000000, - B00000000, B00000000, B00001111, B11100111, B11111111, B11111111, B11111000, B00000000, - B00000000, B00000000, B00011111, B11111111, B11111111, B11111111, B11111100, B00000000, - B00000000, B00011111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, - B00000000, B00111111, B11111100, B00001100, B11000011, B00011100, B01111100, B00000000, - - B00000000, B01110000, B00011000, B00000100, B10000010, B00001000, B00111100, B00000000, - B00000000, B01110000, B00011001, B00100111, B10011110, B01001001, B00111100, B00000000, - B00000000, B01111111, B11111001, B00100100, B10011110, B01111001, B00111100, B00000000, - B00000000, B01110000, B00011001, B00100100, B10011110, B01111001, B00111100, B00000000, - B00000000, B01110000, B00011001, B11100100, B10000010, B01111000, B00111100, B00000000, - B00000000, B01111111, B11111001, B11100100, B11000010, B01111100, B01111100, B00000000, - B00000000, B01110000, B00011001, B11100111, B11111111, B11111111, B11111100, B00000000, - B00000000, B01110000, B00011111, B11111100, B00000001, B00000110, B11111100, B00000000, - - B00000000, B01111111, B11111111, B11110000, B00000001, B00011001, B10111100, B00000000, - B00000000, B01100000, B00011111, B11100001, B11111111, B11110110, B00011100, B00000000, - B00000000, B01100000, B00011111, B11110000, B00111111, B11111000, B00001100, B00000000, - B00000000, B01111111, B11111111, B11111000, B00001111, B11111000, B00001100, B00000000, - B00000000, B01110000, B00011111, B11111111, B00000110, B00000000, B00011100, B00000000, - B00000000, B01110000, B00011111, B11000000, B00000110, B00000000, B01111100, B00000000, - B00000000, B01111111, B11111111, B10000000, B00001100, B00000001, B11111100, B00000000, - B00000000, B01100000, B00011111, B10000000, B00111100, B00011111, B11111100, B00000000, - - B00000000, B01100000, B00011111, B11111111, B11111111, B11111111, B11111100, B00000000, - B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, - B00000000, B01110000, B00011111, B11111101, B11111111, B11101111, B11111100, B00000000, - B00000000, B01110000, B00011111, B11111101, B11011100, B11001101, B11001100, B00000000, - B00000000, B01111111, B11111111, B11111101, B10101010, B10101010, B10111100, B00000000, - B00000000, B01110000, B00011111, B11111101, B10101010, B10101001, B10111100, B00000000, - B00000000, B01110000, B00011111, B11111110, B11011100, B11001100, B10111100, B00000000, - B00000000, B00111111, B11111111, B11111111, B11111111, B11111111, B11111000, B00000000, - - B00000000, B00011111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, -}; diff --git a/libraries/Gamebuino/examples/4.Utilities/Loader_old/saveeeprom.ino b/libraries/Gamebuino/examples/4.Utilities/Loader_old/saveeeprom.ino deleted file mode 100644 index 01ca2f6..0000000 --- a/libraries/Gamebuino/examples/4.Utilities/Loader_old/saveeeprom.ino +++ /dev/null @@ -1,73 +0,0 @@ -void saveeeprom(){ - - boolean isEmpty = true; - for(int i = 0; i< 1024; i++){ - if(EEPROM.read(i)){ - isEmpty = false; - break; - } - } - if(isEmpty){ - gb.display.println(F("Nothing to be saved!")); - return; - } - gb.display.clear(); - gb.display.print(F("Saving EEPROM to\n")); - gb.display.print(prevGameName); - gb.display.println(F(".SAV\n")); - /*gb.display.println(F("\25:yes \26:no")); - gb.display.update(); - while(1){ - gb.buttons.update(); - if(gb.buttons.pressed(BTN_A)) break; - if(gb.buttons.pressed(BTN_B)) return; - delay(50); - }*/ - - - - strcpy(completeName, prevGameName); - strcat(completeName, ".SAV"); - //to ask confirmation before overwriting existing saves - /*if(file.exists(completeName)){ - gb.display.println(F("Overwrite existing?")); - gb.display.println(F("\25:yes \26:no")); - gb.display.update(); - while(1){ - gb.buttons.update(); - if(gb.buttons.pressed(BTN_A)){ - file.delFile(completeName); - break; - } - if(gb.buttons.pressed(BTN_B)) return; - delay(50); - } - }*/ - if(file.exists(completeName)){ - file.delFile(completeName); - } - file.create(completeName); - res=file.openFile(completeName, FILEMODE_TEXT_WRITE); - if (res==NO_ERROR) - { - for(byte i=0; i< 1024/BUFFER_SIZE; i++){ - buffer[BUFFER_SIZE+1] = '\0'; - for(byte j = 0; j Date: Mon, 14 Nov 2016 22:21:44 +0100 Subject: [PATCH 06/12] Remove external libraries --- libraries/SdFat/MinimumSerial.cpp | 58 - libraries/SdFat/MinimumSerial.h | 50 - libraries/SdFat/SdFat.h | 341 -- libraries/SdFat/SdFat.html | 10 - libraries/SdFat/SdFatBase.cpp | 99 - libraries/SdFat/SdFatConfig.h | 188 - .../SdFat/SdFatTestSuite/SdFatTestSuite.cpp | 82 - .../SdFat/SdFatTestSuite/SdFatTestSuite.h | 45 - .../examples/ATS_SD_File/ATS_SD_File.ino | 106 - .../examples/ATS_SD_Files/ATS_SD_Files.ino | 76 - .../examples/ATS_SD_Seek/ATS_SD_Seek.ino | 109 - .../examples/StressTest/StressTest.ino | 76 - .../examples/TestMkdir/TestMkdir.ino | 138 - .../examples/TestRmdir/TestRmdir.ino | 98 - .../examples/fstreamTest/fstreamTest.ino | 94 - .../examples/istreamTest/istreamTest.ino | 261 -- .../examples/lfnSize/lfnSize.ino | 36 - .../examples/lfnTest/lfnTest.ino | 235 -- .../examples/lfnTestCout/lfnTestCout.ino | 219 - .../examples/ostreamTest/ostreamTest.ino | 172 - libraries/SdFat/SdFatUtil.cpp | 51 - libraries/SdFat/SdFatUtil.h | 67 - libraries/SdFat/SdFatmainpage.h | 392 -- libraries/SdFat/SdInfo.h | 381 -- libraries/SdFat/SdSpi.h | 370 -- libraries/SdFat/SdSpiCard.cpp | 636 --- libraries/SdFat/SdSpiCard.h | 308 -- libraries/SdFat/SdSpiSAM3X.cpp | 218 - libraries/SdFat/SdSpiSTM32F1.cpp | 171 - libraries/SdFat/SdSpiTeensy3.cpp | 301 -- libraries/SdFat/SdVolume.h | 71 - libraries/SdFat/changes.txt | 439 -- .../#attic/AnalogLogger/AnalogLogger.ino | 188 - .../BaseExtCaseTest/BaseExtCaseTest.ino | 38 - .../examples/#attic/HelloWorld/HelloWorld.ino | 16 - .../examples/#attic/MiniSerial/MiniSerial.ino | 29 - .../PrintBenchmarkSD/PrintBenchmarkSD.ino | 121 - .../SdFat/examples/#attic/SD_Size/SD_Size.ino | 26 - .../examples/#attic/SdFatSize/SdFatSize.ino | 29 - .../SdFat/examples/#attic/append/append.ino | 72 - .../SdFat/examples/#attic/average/average.ino | 77 - .../SdFat/examples/#attic/benchSD/benchSD.ino | 140 - .../examples/#attic/bufstream/bufstream.ino | 34 - .../examples/#attic/eventlog/eventlog.ino | 58 - .../#attic/fgetsRewrite/fgetsRewrite.ino | 106 - .../SdFat/examples/#attic/readlog/readlog.ino | 47 - libraries/SdFat/examples/#attic/readme.txt | 28 - .../AnalogBinLogger/AnalogBinLogger.h | 39 - .../AnalogBinLogger/AnalogBinLogger.ino | 829 ---- .../examples/LongFileName/LongFileName.ino | 94 - .../A long name can be 255 characters.txt | 4 - .../LongFileName/testFiles/LFN,NAME.TXT | 1 - .../LongFileName/testFiles/MIXCASE.txt | 5 - .../LongFileName/testFiles/Not_8_3.txt | 2 - .../examples/LongFileName/testFiles/OK%83.TXT | 1 - .../LongFileName/testFiles/STD_8_3.TXT | 1 - .../LongFileName/testFiles/With Blank.txt | 2 - .../LongFileName/testFiles/With.Two dots.txt | 2 - .../examples/LongFileName/testFiles/lower.txt | 5 - .../examples/LongFileName/testFiles/mixed.TXT | 5 - .../LowLatencyLogger/LowLatencyLogger.ino | 555 --- .../examples/LowLatencyLogger/UserDataType.h | 8 - .../SdFat/examples/OpenNext/OpenNext.ino | 44 - .../PrintBenchmark/PrintBenchmark.ino | 147 - .../SdFat/examples/QuickStart/QuickStart.ino | 157 - .../SdFat/examples/RawWrite/RawWrite.ino | 173 - .../SdFat/examples/ReadWrite/ReadWrite.ino | 88 - .../ReadWriteSdFat/ReadWriteSdFat.ino | 73 - .../examples/SdFormatter/SdFormatter.ino | 511 --- libraries/SdFat/examples/SdInfo/SdInfo.ino | 234 -- .../examples/SoftwareSpi/SoftwareSpi.ino | 48 - .../SdFat/examples/StdioBench/StdioBench.ino | 207 - .../StreamParseInt/StreamParseInt.ino | 41 - .../SdFat/examples/ThreeCards/ThreeCards.ino | 228 -- .../SdFat/examples/Timestamp/Timestamp.ino | 173 - .../SdFat/examples/TwoCards/TwoCards.ino | 165 - libraries/SdFat/examples/bench/bench.ino | 185 - .../SdFat/examples/cin_cout/cin_cout.ino | 35 - .../SdFat/examples/dataLogger/dataLogger.ino | 143 - .../directoryFunctions/directoryFunctions.ino | 119 - libraries/SdFat/examples/fgets/fgets.ino | 81 - .../SdFat/examples/formatting/formatting.ino | 69 - libraries/SdFat/examples/getline/getline.ino | 78 - libraries/SdFat/examples/readCSV/readCSV.ino | 115 - libraries/SdFat/examples/rename/rename.ino | 102 - libraries/SdFat/html/_arduino_files_8h.html | 168 - .../html/_arduino_files_8h__dep__incl.png | Bin 2150 -> 0 bytes .../SdFat/html/_arduino_files_8h__incl.png | Bin 27174 -> 0 bytes libraries/SdFat/html/_arduino_stream_8h.html | 126 - .../SdFat/html/_arduino_stream_8h__incl.png | Bin 41826 -> 0 bytes libraries/SdFat/html/_digital_pin_8h.html | 159 - .../SdFat/html/_digital_pin_8h__dep__incl.png | Bin 6529 -> 0 bytes .../SdFat/html/_digital_pin_8h__incl.png | Bin 4400 -> 0 bytes libraries/SdFat/html/_fat_file_8h.html | 335 -- .../SdFat/html/_fat_file_8h__dep__incl.png | Bin 26702 -> 0 bytes libraries/SdFat/html/_fat_file_8h__incl.png | Bin 21221 -> 0 bytes libraries/SdFat/html/_fat_file_system_8h.html | 123 - .../SdFat/html/_fat_file_system_8h__incl.png | Bin 34017 -> 0 bytes libraries/SdFat/html/_fat_lib_config_8h.html | 156 - .../html/_fat_lib_config_8h__dep__incl.png | Bin 50405 -> 0 bytes .../SdFat/html/_fat_lib_config_8h__incl.png | Bin 4806 -> 0 bytes libraries/SdFat/html/_fat_structs_8h.html | 1252 ------ .../SdFat/html/_fat_structs_8h__dep__incl.png | Bin 37708 -> 0 bytes libraries/SdFat/html/_fat_volume_8h.html | 157 - .../SdFat/html/_fat_volume_8h__dep__incl.png | Bin 33146 -> 0 bytes libraries/SdFat/html/_fat_volume_8h__incl.png | Bin 10474 -> 0 bytes libraries/SdFat/html/_sd_fat_8h.html | 164 - .../SdFat/html/_sd_fat_8h__dep__incl.png | Bin 1863 -> 0 bytes libraries/SdFat/html/_sd_fat_8h__incl.png | Bin 23500 -> 0 bytes libraries/SdFat/html/_sd_fat_config_8h.html | 379 -- .../html/_sd_fat_config_8h__dep__incl.png | Bin 59725 -> 0 bytes .../SdFat/html/_sd_fat_config_8h__incl.png | Bin 1641 -> 0 bytes libraries/SdFat/html/_sd_fat_util_8h.html | 171 - .../SdFat/html/_sd_fat_util_8h__incl.png | Bin 24415 -> 0 bytes libraries/SdFat/html/_sd_spi_8h.html | 160 - .../SdFat/html/_sd_spi_8h__dep__incl.png | Bin 4148 -> 0 bytes libraries/SdFat/html/_sd_spi_8h__incl.png | Bin 12613 -> 0 bytes libraries/SdFat/html/_sd_spi_card_8h.html | 134 - .../SdFat/html/_sd_spi_card_8h__dep__incl.png | Bin 3032 -> 0 bytes .../SdFat/html/_sd_spi_card_8h__incl.png | Bin 22215 -> 0 bytes libraries/SdFat/html/_soft_s_p_i_8h.html | 146 - .../SdFat/html/_soft_s_p_i_8h__dep__incl.png | Bin 5353 -> 0 bytes libraries/SdFat/html/_soft_s_p_i_8h__incl.png | Bin 5605 -> 0 bytes libraries/SdFat/html/_stdio_stream_8h.html | 238 -- .../SdFat/html/_stdio_stream_8h__incl.png | Bin 24907 -> 0 bytes libraries/SdFat/html/annotated.html | 151 - libraries/SdFat/html/bc_s.png | Bin 676 -> 0 bytes libraries/SdFat/html/bdwn.png | Bin 147 -> 0 bytes libraries/SdFat/html/bufstream_8h.html | 132 - .../SdFat/html/bufstream_8h__dep__incl.png | Bin 2148 -> 0 bytes libraries/SdFat/html/bufstream_8h__incl.png | Bin 31632 -> 0 bytes .../html/class_arduino_in_stream-members.html | 191 - .../SdFat/html/class_arduino_in_stream.html | 2596 ------------ .../class_arduino_in_stream__coll__graph.png | Bin 3427 -> 0 bytes ...lass_arduino_in_stream__inherit__graph.png | Bin 3427 -> 0 bytes .../class_arduino_out_stream-members.html | 182 - .../SdFat/html/class_arduino_out_stream.html | 2321 ----------- .../class_arduino_out_stream__coll__graph.png | Bin 2738 -> 0 bytes ...ass_arduino_out_stream__inherit__graph.png | Bin 2738 -> 0 bytes .../SdFat/html/class_digital_pin-members.html | 111 - libraries/SdFat/html/class_digital_pin.html | 515 --- .../SdFat/html/class_fat_cache-members.html | 113 - libraries/SdFat/html/class_fat_cache.html | 471 --- .../SdFat/html/class_fat_file-members.html | 186 - libraries/SdFat/html/class_fat_file.html | 2910 -------------- .../html/class_fat_file__inherit__graph.png | Bin 10971 -> 0 bytes .../html/class_fat_file_system-members.html | 134 - .../SdFat/html/class_fat_file_system.html | 1272 ------ .../class_fat_file_system__coll__graph.png | Bin 1283 -> 0 bytes .../class_fat_file_system__inherit__graph.png | Bin 6616 -> 0 bytes .../html/class_fat_stream_base-members.html | 242 -- .../SdFat/html/class_fat_stream_base.html | 1640 -------- .../class_fat_stream_base__coll__graph.png | Bin 3518 -> 0 bytes .../class_fat_stream_base__inherit__graph.png | Bin 7101 -> 0 bytes .../SdFat/html/class_fat_volume-members.html | 119 - libraries/SdFat/html/class_fat_volume.html | 613 --- .../html/class_fat_volume__inherit__graph.png | Bin 8322 -> 0 bytes libraries/SdFat/html/class_file-members.html | 198 - libraries/SdFat/html/class_file.html | 3513 ----------------- .../SdFat/html/class_file__coll__graph.png | Bin 2824 -> 0 bytes .../SdFat/html/class_file__inherit__graph.png | Bin 2824 -> 0 bytes .../html/class_minimum_serial-members.html | 102 - .../SdFat/html/class_minimum_serial.html | 197 - .../class_minimum_serial__coll__graph.png | Bin 1191 -> 0 bytes .../class_minimum_serial__inherit__graph.png | Bin 1191 -> 0 bytes .../SdFat/html/class_print_file-members.html | 190 - libraries/SdFat/html/class_print_file.html | 3289 --------------- .../html/class_print_file__coll__graph.png | Bin 2715 -> 0 bytes .../html/class_print_file__inherit__graph.png | Bin 3466 -> 0 bytes .../SdFat/html/class_sd2_card-members.html | 125 - libraries/SdFat/html/class_sd2_card.html | 1006 ----- .../html/class_sd2_card__coll__graph.png | Bin 1221 -> 0 bytes .../html/class_sd2_card__inherit__graph.png | Bin 1221 -> 0 bytes .../html/class_sd_base_file-members.html | 188 - libraries/SdFat/html/class_sd_base_file.html | 3215 --------------- .../html/class_sd_base_file__coll__graph.png | Bin 1209 -> 0 bytes .../class_sd_base_file__inherit__graph.png | Bin 1209 -> 0 bytes .../SdFat/html/class_sd_fat-members.html | 163 - libraries/SdFat/html/class_sd_fat.html | 2313 ----------- .../SdFat/html/class_sd_fat__coll__graph.png | Bin 2786 -> 0 bytes .../html/class_sd_fat__inherit__graph.png | Bin 2786 -> 0 bytes .../SdFat/html/class_sd_fat_base-members.html | 161 - libraries/SdFat/html/class_sd_fat_base.html | 2129 ---------- .../html/class_sd_fat_base__coll__graph.png | Bin 2027 -> 0 bytes .../class_sd_fat_base__inherit__graph.png | Bin 6594 -> 0 bytes .../html/class_sd_fat_lib_spi-members.html | 163 - .../SdFat/html/class_sd_fat_lib_spi.html | 2313 ----------- .../class_sd_fat_lib_spi__coll__graph.png | Bin 2860 -> 0 bytes .../class_sd_fat_lib_spi__inherit__graph.png | Bin 2860 -> 0 bytes .../html/class_sd_fat_soft_spi-members.html | 163 - .../SdFat/html/class_sd_fat_soft_spi.html | 2320 ----------- .../class_sd_fat_soft_spi__coll__graph.png | Bin 3379 -> 0 bytes .../class_sd_fat_soft_spi__inherit__graph.png | Bin 3379 -> 0 bytes .../SdFat/html/class_sd_file-members.html | 192 - libraries/SdFat/html/class_sd_file.html | 3289 --------------- .../SdFat/html/class_sd_file__coll__graph.png | Bin 3462 -> 0 bytes .../html/class_sd_file__inherit__graph.png | Bin 3462 -> 0 bytes .../SdFat/html/class_sd_spi-members.html | 106 - libraries/SdFat/html/class_sd_spi.html | 300 -- .../SdFat/html/class_sd_spi_base-members.html | 106 - libraries/SdFat/html/class_sd_spi_base.html | 369 -- .../class_sd_spi_base__inherit__graph.png | Bin 1749 -> 0 bytes .../SdFat/html/class_sd_spi_card-members.html | 124 - libraries/SdFat/html/class_sd_spi_card.html | 854 ---- .../class_sd_spi_card__inherit__graph.png | Bin 1228 -> 0 bytes .../SdFat/html/class_sd_spi_lib-members.html | 106 - libraries/SdFat/html/class_sd_spi_lib.html | 348 -- .../SdFat/html/class_sd_spi_soft-members.html | 106 - libraries/SdFat/html/class_sd_spi_soft.html | 392 -- .../html/class_sd_spi_soft__coll__graph.png | Bin 1708 -> 0 bytes .../class_sd_spi_soft__inherit__graph.png | Bin 1708 -> 0 bytes .../SdFat/html/class_sd_volume-members.html | 119 - libraries/SdFat/html/class_sd_volume.html | 685 ---- .../html/class_sd_volume__coll__graph.png | Bin 1207 -> 0 bytes .../html/class_sd_volume__inherit__graph.png | Bin 1207 -> 0 bytes .../SdFat/html/class_soft_s_p_i-members.html | 103 - libraries/SdFat/html/class_soft_s_p_i.html | 242 -- .../html/class_stdio_stream-members.html | 228 -- libraries/SdFat/html/class_stdio_stream.html | 1801 --------- .../html/class_stdio_stream__coll__graph.png | Bin 1202 -> 0 bytes .../class_stdio_stream__inherit__graph.png | Bin 1202 -> 0 bytes libraries/SdFat/html/classes.html | 130 - .../SdFat/html/classfstream-members.html | 221 -- libraries/SdFat/html/classfstream.html | 3470 ---------------- .../SdFat/html/classfstream__coll__graph.png | Bin 10062 -> 0 bytes .../html/classfstream__inherit__graph.png | Bin 10062 -> 0 bytes .../SdFat/html/classibufstream-members.html | 189 - libraries/SdFat/html/classibufstream.html | 2578 ------------ .../html/classibufstream__coll__graph.png | Bin 2488 -> 0 bytes .../html/classibufstream__inherit__graph.png | Bin 3430 -> 0 bytes .../SdFat/html/classifstream-members.html | 195 - libraries/SdFat/html/classifstream.html | 2639 ------------- .../SdFat/html/classifstream__coll__graph.png | Bin 6572 -> 0 bytes .../html/classifstream__inherit__graph.png | Bin 6572 -> 0 bytes libraries/SdFat/html/classios-members.html | 155 - libraries/SdFat/html/classios.html | 1489 ------- .../SdFat/html/classios__base-members.html | 145 - libraries/SdFat/html/classios__base.html | 1149 ------ .../html/classios__base__inherit__graph.png | Bin 19521 -> 0 bytes .../SdFat/html/classios__coll__graph.png | Bin 1041 -> 0 bytes .../SdFat/html/classios__inherit__graph.png | Bin 19510 -> 0 bytes .../SdFat/html/classiostream-members.html | 212 - libraries/SdFat/html/classiostream.html | 3312 ---------------- .../SdFat/html/classiostream__coll__graph.png | Bin 5818 -> 0 bytes .../html/classiostream__inherit__graph.png | Bin 6573 -> 0 bytes .../SdFat/html/classistream-members.html | 186 - libraries/SdFat/html/classistream.html | 2432 ------------ .../SdFat/html/classistream__coll__graph.png | Bin 1709 -> 0 bytes .../html/classistream__inherit__graph.png | Bin 6723 -> 0 bytes .../SdFat/html/classobufstream-members.html | 186 - libraries/SdFat/html/classobufstream.html | 2452 ------------ .../html/classobufstream__coll__graph.png | Bin 2520 -> 0 bytes .../html/classobufstream__inherit__graph.png | Bin 2520 -> 0 bytes .../SdFat/html/classofstream-members.html | 189 - libraries/SdFat/html/classofstream.html | 2436 ------------ .../SdFat/html/classofstream__coll__graph.png | Bin 6818 -> 0 bytes .../html/classofstream__inherit__graph.png | Bin 6818 -> 0 bytes .../SdFat/html/classostream-members.html | 181 - libraries/SdFat/html/classostream.html | 2288 ----------- .../SdFat/html/classostream__coll__graph.png | Bin 1712 -> 0 bytes .../html/classostream__inherit__graph.png | Bin 7911 -> 0 bytes .../SdFat/html/classpin__map__t-members.html | 103 - libraries/SdFat/html/closed.png | Bin 132 -> 0 bytes libraries/SdFat/html/dir_000002_000003.html | 89 - .../dir_1281b15c327061056ab3b326e90c50cf.html | 142 - ...r_1281b15c327061056ab3b326e90c50cf_dep.png | Bin 1913 -> 0 bytes .../dir_481cc946b8a81b8d9363a4aad6201160.html | 106 - ...r_481cc946b8a81b8d9363a4aad6201160_dep.png | Bin 1317 -> 0 bytes .../dir_97b7730287bc3bcd349854d6663367e4.html | 178 - ...r_97b7730287bc3bcd349854d6663367e4_dep.png | Bin 869 -> 0 bytes .../dir_a991eec27578c865874ede3d8ec657c2.html | 106 - ...r_a991eec27578c865874ede3d8ec657c2_dep.png | Bin 896 -> 0 bytes libraries/SdFat/html/doxygen.css | 1440 ------- libraries/SdFat/html/doxygen.png | Bin 3779 -> 0 bytes libraries/SdFat/html/dynsections.js | 97 - libraries/SdFat/html/files.html | 124 - libraries/SdFat/html/fstream_8h.html | 131 - libraries/SdFat/html/fstream_8h__incl.png | Bin 31546 -> 0 bytes libraries/SdFat/html/ftv2blank.png | Bin 86 -> 0 bytes libraries/SdFat/html/ftv2doc.png | Bin 746 -> 0 bytes libraries/SdFat/html/ftv2folderclosed.png | Bin 616 -> 0 bytes libraries/SdFat/html/ftv2folderopen.png | Bin 597 -> 0 bytes libraries/SdFat/html/ftv2lastnode.png | Bin 86 -> 0 bytes libraries/SdFat/html/ftv2link.png | Bin 746 -> 0 bytes libraries/SdFat/html/ftv2mlastnode.png | Bin 246 -> 0 bytes libraries/SdFat/html/ftv2mnode.png | Bin 246 -> 0 bytes libraries/SdFat/html/ftv2node.png | Bin 86 -> 0 bytes libraries/SdFat/html/ftv2plastnode.png | Bin 229 -> 0 bytes libraries/SdFat/html/ftv2pnode.png | Bin 229 -> 0 bytes libraries/SdFat/html/ftv2splitbar.png | Bin 314 -> 0 bytes libraries/SdFat/html/ftv2vertline.png | Bin 86 -> 0 bytes libraries/SdFat/html/functions.html | 157 - libraries/SdFat/html/functions_b.html | 214 - libraries/SdFat/html/functions_c.html | 240 -- libraries/SdFat/html/functions_d.html | 183 - libraries/SdFat/html/functions_e.html | 177 - libraries/SdFat/html/functions_enum.html | 107 - libraries/SdFat/html/functions_eval.html | 113 - libraries/SdFat/html/functions_f.html | 283 -- libraries/SdFat/html/functions_func.html | 141 - libraries/SdFat/html/functions_func_b.html | 160 - libraries/SdFat/html/functions_func_c.html | 194 - libraries/SdFat/html/functions_func_d.html | 163 - libraries/SdFat/html/functions_func_e.html | 158 - libraries/SdFat/html/functions_func_f.html | 223 -- libraries/SdFat/html/functions_func_g.html | 160 - libraries/SdFat/html/functions_func_h.html | 133 - libraries/SdFat/html/functions_func_i.html | 207 - libraries/SdFat/html/functions_func_l.html | 146 - libraries/SdFat/html/functions_func_m.html | 137 - libraries/SdFat/html/functions_func_n.html | 133 - libraries/SdFat/html/functions_func_o.html | 171 - libraries/SdFat/html/functions_func_p.html | 197 - libraries/SdFat/html/functions_func_r.html | 205 - libraries/SdFat/html/functions_func_s.html | 201 - libraries/SdFat/html/functions_func_t.html | 152 - libraries/SdFat/html/functions_func_u.html | 142 - libraries/SdFat/html/functions_func_v.html | 142 - libraries/SdFat/html/functions_func_w.html | 159 - libraries/SdFat/html/functions_g.html | 164 - libraries/SdFat/html/functions_h.html | 145 - libraries/SdFat/html/functions_i.html | 217 - libraries/SdFat/html/functions_j.html | 135 - libraries/SdFat/html/functions_l.html | 168 - libraries/SdFat/html/functions_m.html | 157 - libraries/SdFat/html/functions_n.html | 147 - libraries/SdFat/html/functions_o.html | 191 - libraries/SdFat/html/functions_p.html | 217 - libraries/SdFat/html/functions_r.html | 226 -- libraries/SdFat/html/functions_s.html | 244 -- libraries/SdFat/html/functions_t.html | 172 - libraries/SdFat/html/functions_type.html | 125 - libraries/SdFat/html/functions_u.html | 149 - libraries/SdFat/html/functions_v.html | 151 - libraries/SdFat/html/functions_vars.html | 617 --- libraries/SdFat/html/functions_w.html | 163 - libraries/SdFat/html/globals.html | 583 --- libraries/SdFat/html/globals_defs.html | 192 - libraries/SdFat/html/globals_func.html | 304 -- libraries/SdFat/html/globals_type.html | 129 - libraries/SdFat/html/globals_vars.html | 291 -- libraries/SdFat/html/graph_legend.html | 152 - libraries/SdFat/html/graph_legend.png | Bin 12430 -> 0 bytes libraries/SdFat/html/group__digital_pin.html | 440 --- libraries/SdFat/html/group__soft_s_p_i.html | 185 - libraries/SdFat/html/hierarchy.html | 163 - libraries/SdFat/html/index.html | 252 -- libraries/SdFat/html/inherit_graph_0.png | Bin 377 -> 0 bytes libraries/SdFat/html/inherit_graph_1.png | Bin 595 -> 0 bytes libraries/SdFat/html/inherit_graph_10.png | Bin 378 -> 0 bytes libraries/SdFat/html/inherit_graph_11.png | Bin 516 -> 0 bytes libraries/SdFat/html/inherit_graph_12.png | Bin 500 -> 0 bytes libraries/SdFat/html/inherit_graph_13.png | Bin 437 -> 0 bytes libraries/SdFat/html/inherit_graph_14.png | Bin 324 -> 0 bytes libraries/SdFat/html/inherit_graph_15.png | Bin 405 -> 0 bytes libraries/SdFat/html/inherit_graph_16.png | Bin 364 -> 0 bytes libraries/SdFat/html/inherit_graph_17.png | Bin 1530 -> 0 bytes libraries/SdFat/html/inherit_graph_18.png | Bin 1033 -> 0 bytes libraries/SdFat/html/inherit_graph_19.png | Bin 408 -> 0 bytes libraries/SdFat/html/inherit_graph_2.png | Bin 468 -> 0 bytes libraries/SdFat/html/inherit_graph_20.png | Bin 332 -> 0 bytes libraries/SdFat/html/inherit_graph_21.png | Bin 419 -> 0 bytes libraries/SdFat/html/inherit_graph_22.png | Bin 323 -> 0 bytes libraries/SdFat/html/inherit_graph_23.png | Bin 796 -> 0 bytes libraries/SdFat/html/inherit_graph_24.png | Bin 832 -> 0 bytes libraries/SdFat/html/inherit_graph_3.png | Bin 437 -> 0 bytes libraries/SdFat/html/inherit_graph_4.png | Bin 463 -> 0 bytes libraries/SdFat/html/inherit_graph_5.png | Bin 390 -> 0 bytes libraries/SdFat/html/inherit_graph_6.png | Bin 421 -> 0 bytes libraries/SdFat/html/inherit_graph_7.png | Bin 402 -> 0 bytes libraries/SdFat/html/inherit_graph_8.png | Bin 6844 -> 0 bytes libraries/SdFat/html/inherit_graph_9.png | Bin 38172 -> 0 bytes libraries/SdFat/html/inherits.html | 200 - libraries/SdFat/html/ios_8h.html | 730 ---- libraries/SdFat/html/ios_8h__dep__incl.png | Bin 12907 -> 0 bytes libraries/SdFat/html/ios_8h__incl.png | Bin 22453 -> 0 bytes libraries/SdFat/html/iostream_8h.html | 506 --- .../SdFat/html/iostream_8h__dep__incl.png | Bin 6028 -> 0 bytes libraries/SdFat/html/iostream_8h__incl.png | Bin 27739 -> 0 bytes libraries/SdFat/html/istream_8h.html | 128 - .../SdFat/html/istream_8h__dep__incl.png | Bin 7235 -> 0 bytes libraries/SdFat/html/istream_8h__incl.png | Bin 23388 -> 0 bytes libraries/SdFat/html/jquery.js | 31 - libraries/SdFat/html/modules.html | 95 - libraries/SdFat/html/nav_f.png | Bin 153 -> 0 bytes libraries/SdFat/html/nav_g.png | Bin 95 -> 0 bytes libraries/SdFat/html/nav_h.png | Bin 98 -> 0 bytes libraries/SdFat/html/open.png | Bin 123 -> 0 bytes libraries/SdFat/html/ostream_8h.html | 155 - .../SdFat/html/ostream_8h__dep__incl.png | Bin 7243 -> 0 bytes libraries/SdFat/html/ostream_8h__incl.png | Bin 23391 -> 0 bytes libraries/SdFat/html/search/all_0.html | 26 - libraries/SdFat/html/search/all_0.js | 15 - libraries/SdFat/html/search/all_1.html | 26 - libraries/SdFat/html/search/all_1.js | 30 - libraries/SdFat/html/search/all_10.html | 26 - libraries/SdFat/html/search/all_10.js | 69 - libraries/SdFat/html/search/all_11.html | 26 - libraries/SdFat/html/search/all_11.js | 15 - libraries/SdFat/html/search/all_12.html | 26 - libraries/SdFat/html/search/all_12.js | 13 - libraries/SdFat/html/search/all_13.html | 26 - libraries/SdFat/html/search/all_13.js | 9 - libraries/SdFat/html/search/all_14.html | 26 - libraries/SdFat/html/search/all_14.js | 13 - libraries/SdFat/html/search/all_2.html | 26 - libraries/SdFat/html/search/all_2.js | 38 - libraries/SdFat/html/search/all_3.html | 26 - libraries/SdFat/html/search/all_3.js | 46 - libraries/SdFat/html/search/all_4.html | 26 - libraries/SdFat/html/search/all_4.js | 24 - libraries/SdFat/html/search/all_5.html | 26 - libraries/SdFat/html/search/all_5.js | 102 - libraries/SdFat/html/search/all_6.html | 26 - libraries/SdFat/html/search/all_6.js | 14 - libraries/SdFat/html/search/all_7.html | 26 - libraries/SdFat/html/search/all_7.js | 7 - libraries/SdFat/html/search/all_8.html | 26 - libraries/SdFat/html/search/all_8.js | 35 - libraries/SdFat/html/search/all_9.html | 26 - libraries/SdFat/html/search/all_9.js | 4 - libraries/SdFat/html/search/all_a.html | 26 - libraries/SdFat/html/search/all_a.js | 21 - libraries/SdFat/html/search/all_b.html | 26 - libraries/SdFat/html/search/all_b.js | 17 - libraries/SdFat/html/search/all_c.html | 26 - libraries/SdFat/html/search/all_c.js | 16 - libraries/SdFat/html/search/all_d.html | 26 - libraries/SdFat/html/search/all_d.js | 23 - libraries/SdFat/html/search/all_e.html | 26 - libraries/SdFat/html/search/all_e.js | 41 - libraries/SdFat/html/search/all_f.html | 26 - libraries/SdFat/html/search/all_f.js | 29 - libraries/SdFat/html/search/classes_0.html | 26 - libraries/SdFat/html/search/classes_0.js | 5 - libraries/SdFat/html/search/classes_1.html | 26 - libraries/SdFat/html/search/classes_1.js | 4 - libraries/SdFat/html/search/classes_2.html | 26 - libraries/SdFat/html/search/classes_2.js | 5 - libraries/SdFat/html/search/classes_3.html | 26 - libraries/SdFat/html/search/classes_3.js | 15 - libraries/SdFat/html/search/classes_4.html | 26 - libraries/SdFat/html/search/classes_4.js | 9 - libraries/SdFat/html/search/classes_5.html | 26 - libraries/SdFat/html/search/classes_5.js | 4 - libraries/SdFat/html/search/classes_6.html | 26 - libraries/SdFat/html/search/classes_6.js | 5 - libraries/SdFat/html/search/classes_7.html | 26 - libraries/SdFat/html/search/classes_7.js | 6 - libraries/SdFat/html/search/classes_8.html | 26 - libraries/SdFat/html/search/classes_8.js | 7 - libraries/SdFat/html/search/classes_9.html | 26 - libraries/SdFat/html/search/classes_9.js | 22 - libraries/SdFat/html/search/close.png | Bin 273 -> 0 bytes libraries/SdFat/html/search/defines_0.html | 26 - libraries/SdFat/html/search/defines_0.js | 4 - libraries/SdFat/html/search/defines_1.html | 26 - libraries/SdFat/html/search/defines_1.js | 4 - libraries/SdFat/html/search/defines_2.html | 26 - libraries/SdFat/html/search/defines_2.js | 8 - libraries/SdFat/html/search/defines_3.html | 26 - libraries/SdFat/html/search/defines_3.js | 6 - libraries/SdFat/html/search/defines_4.html | 26 - libraries/SdFat/html/search/defines_4.js | 4 - libraries/SdFat/html/search/defines_5.html | 26 - libraries/SdFat/html/search/defines_5.js | 4 - libraries/SdFat/html/search/defines_6.html | 26 - libraries/SdFat/html/search/defines_6.js | 10 - libraries/SdFat/html/search/defines_7.html | 26 - libraries/SdFat/html/search/defines_7.js | 8 - libraries/SdFat/html/search/defines_8.html | 26 - libraries/SdFat/html/search/defines_8.js | 7 - libraries/SdFat/html/search/enums_0.html | 26 - libraries/SdFat/html/search/enums_0.js | 4 - libraries/SdFat/html/search/enumvalues_0.html | 26 - libraries/SdFat/html/search/enumvalues_0.js | 4 - libraries/SdFat/html/search/enumvalues_1.html | 26 - libraries/SdFat/html/search/enumvalues_1.js | 4 - libraries/SdFat/html/search/enumvalues_2.html | 26 - libraries/SdFat/html/search/enumvalues_2.js | 4 - libraries/SdFat/html/search/files_0.html | 26 - libraries/SdFat/html/search/files_0.js | 5 - libraries/SdFat/html/search/files_1.html | 26 - libraries/SdFat/html/search/files_1.js | 4 - libraries/SdFat/html/search/files_2.html | 26 - libraries/SdFat/html/search/files_2.js | 4 - libraries/SdFat/html/search/files_3.html | 26 - libraries/SdFat/html/search/files_3.js | 9 - libraries/SdFat/html/search/files_4.html | 26 - libraries/SdFat/html/search/files_4.js | 6 - libraries/SdFat/html/search/files_5.html | 26 - libraries/SdFat/html/search/files_5.js | 4 - libraries/SdFat/html/search/files_6.html | 26 - libraries/SdFat/html/search/files_6.js | 10 - libraries/SdFat/html/search/functions_0.html | 26 - libraries/SdFat/html/search/functions_0.js | 6 - libraries/SdFat/html/search/functions_1.html | 26 - libraries/SdFat/html/search/functions_1.js | 12 - libraries/SdFat/html/search/functions_10.html | 26 - libraries/SdFat/html/search/functions_10.js | 10 - libraries/SdFat/html/search/functions_11.html | 26 - libraries/SdFat/html/search/functions_11.js | 7 - libraries/SdFat/html/search/functions_12.html | 26 - libraries/SdFat/html/search/functions_12.js | 7 - libraries/SdFat/html/search/functions_13.html | 26 - libraries/SdFat/html/search/functions_13.js | 12 - libraries/SdFat/html/search/functions_2.html | 26 - libraries/SdFat/html/search/functions_2.js | 22 - libraries/SdFat/html/search/functions_3.html | 26 - libraries/SdFat/html/search/functions_3.js | 21 - libraries/SdFat/html/search/functions_4.html | 26 - libraries/SdFat/html/search/functions_4.js | 13 - libraries/SdFat/html/search/functions_5.html | 26 - libraries/SdFat/html/search/functions_5.js | 47 - libraries/SdFat/html/search/functions_6.html | 26 - libraries/SdFat/html/search/functions_6.js | 13 - libraries/SdFat/html/search/functions_7.html | 26 - libraries/SdFat/html/search/functions_7.js | 5 - libraries/SdFat/html/search/functions_8.html | 26 - libraries/SdFat/html/search/functions_8.js | 26 - libraries/SdFat/html/search/functions_9.html | 26 - libraries/SdFat/html/search/functions_9.js | 9 - libraries/SdFat/html/search/functions_a.html | 26 - libraries/SdFat/html/search/functions_a.js | 5 - libraries/SdFat/html/search/functions_b.html | 26 - libraries/SdFat/html/search/functions_b.js | 10 - libraries/SdFat/html/search/functions_c.html | 26 - libraries/SdFat/html/search/functions_c.js | 16 - libraries/SdFat/html/search/functions_d.html | 26 - libraries/SdFat/html/search/functions_d.js | 24 - libraries/SdFat/html/search/functions_e.html | 26 - libraries/SdFat/html/search/functions_e.js | 25 - libraries/SdFat/html/search/functions_f.html | 26 - libraries/SdFat/html/search/functions_f.js | 29 - libraries/SdFat/html/search/groups_0.html | 26 - libraries/SdFat/html/search/groups_0.js | 4 - libraries/SdFat/html/search/groups_1.html | 26 - libraries/SdFat/html/search/groups_1.js | 4 - libraries/SdFat/html/search/mag_sel.png | Bin 563 -> 0 bytes libraries/SdFat/html/search/nomatches.html | 12 - libraries/SdFat/html/search/pages_0.html | 26 - libraries/SdFat/html/search/pages_0.js | 4 - libraries/SdFat/html/search/search.css | 271 -- libraries/SdFat/html/search/search.js | 813 ---- libraries/SdFat/html/search/search_l.png | Bin 604 -> 0 bytes libraries/SdFat/html/search/search_m.png | Bin 158 -> 0 bytes libraries/SdFat/html/search/search_r.png | Bin 612 -> 0 bytes libraries/SdFat/html/search/typedefs_0.html | 26 - libraries/SdFat/html/search/typedefs_0.js | 4 - libraries/SdFat/html/search/typedefs_1.html | 26 - libraries/SdFat/html/search/typedefs_1.js | 7 - libraries/SdFat/html/search/typedefs_2.html | 26 - libraries/SdFat/html/search/typedefs_2.js | 4 - libraries/SdFat/html/search/typedefs_3.html | 26 - libraries/SdFat/html/search/typedefs_3.js | 4 - libraries/SdFat/html/search/typedefs_4.html | 26 - libraries/SdFat/html/search/typedefs_4.js | 5 - libraries/SdFat/html/search/typedefs_5.html | 26 - libraries/SdFat/html/search/typedefs_5.js | 5 - libraries/SdFat/html/search/typedefs_6.html | 26 - libraries/SdFat/html/search/typedefs_6.js | 6 - libraries/SdFat/html/search/typedefs_7.html | 26 - libraries/SdFat/html/search/typedefs_7.js | 5 - libraries/SdFat/html/search/variables_0.html | 26 - libraries/SdFat/html/search/variables_0.js | 8 - libraries/SdFat/html/search/variables_1.html | 26 - libraries/SdFat/html/search/variables_1.js | 20 - libraries/SdFat/html/search/variables_10.html | 26 - libraries/SdFat/html/search/variables_10.js | 20 - libraries/SdFat/html/search/variables_11.html | 26 - libraries/SdFat/html/search/variables_11.js | 9 - libraries/SdFat/html/search/variables_12.html | 26 - libraries/SdFat/html/search/variables_12.js | 6 - libraries/SdFat/html/search/variables_13.html | 26 - libraries/SdFat/html/search/variables_13.js | 5 - libraries/SdFat/html/search/variables_14.html | 26 - libraries/SdFat/html/search/variables_14.js | 4 - libraries/SdFat/html/search/variables_2.html | 26 - libraries/SdFat/html/search/variables_2.js | 17 - libraries/SdFat/html/search/variables_3.html | 26 - libraries/SdFat/html/search/variables_3.js | 25 - libraries/SdFat/html/search/variables_4.html | 26 - libraries/SdFat/html/search/variables_4.js | 9 - libraries/SdFat/html/search/variables_5.html | 26 - libraries/SdFat/html/search/variables_5.js | 39 - libraries/SdFat/html/search/variables_6.html | 26 - libraries/SdFat/html/search/variables_6.js | 4 - libraries/SdFat/html/search/variables_7.html | 26 - libraries/SdFat/html/search/variables_7.js | 6 - libraries/SdFat/html/search/variables_8.html | 26 - libraries/SdFat/html/search/variables_8.js | 5 - libraries/SdFat/html/search/variables_9.html | 26 - libraries/SdFat/html/search/variables_9.js | 4 - libraries/SdFat/html/search/variables_a.html | 26 - libraries/SdFat/html/search/variables_a.js | 14 - libraries/SdFat/html/search/variables_b.html | 26 - libraries/SdFat/html/search/variables_b.js | 11 - libraries/SdFat/html/search/variables_c.html | 26 - libraries/SdFat/html/search/variables_c.js | 8 - libraries/SdFat/html/search/variables_d.html | 26 - libraries/SdFat/html/search/variables_d.js | 7 - libraries/SdFat/html/search/variables_e.html | 26 - libraries/SdFat/html/search/variables_e.js | 9 - libraries/SdFat/html/search/variables_f.html | 26 - libraries/SdFat/html/search/variables_f.js | 9 - .../SdFat/html/struct_fat_pos__t-members.html | 102 - libraries/SdFat/html/struct_fat_pos__t.html | 144 - .../html/structdirectory_entry-members.html | 111 - .../SdFat/html/structdirectory_entry.html | 306 -- .../SdFat/html/structfat32__boot-members.html | 129 - libraries/SdFat/html/structfat32__boot.html | 564 --- .../html/structfat32__fsinfo-members.html | 106 - libraries/SdFat/html/structfat32__fsinfo.html | 219 - .../SdFat/html/structfat__boot-members.html | 122 - libraries/SdFat/html/structfat__boot.html | 459 --- .../SdFat/html/structfname__t-members.html | 104 - libraries/SdFat/html/structfname__t.html | 189 - .../structlong_directory_entry-members.html | 107 - .../html/structlong_directory_entry.html | 236 -- .../structmaster_boot_record-members.html | 105 - .../SdFat/html/structmaster_boot_record.html | 212 - .../structmaster_boot_record__coll__graph.png | Bin 1484 -> 0 bytes .../html/structpartition_table-members.html | 111 - .../SdFat/html/structpartition_table.html | 295 -- libraries/SdFat/html/structpgm-members.html | 102 - libraries/SdFat/html/structpgm.html | 198 - libraries/SdFat/html/structpin__map__t.html | 174 - .../SdFat/html/structsetfill-members.html | 101 - libraries/SdFat/html/structsetfill.html | 167 - .../html/structsetprecision-members.html | 101 - libraries/SdFat/html/structsetprecision.html | 166 - libraries/SdFat/html/structsetw-members.html | 101 - libraries/SdFat/html/structsetw.html | 166 - libraries/SdFat/html/sync_off.png | Bin 853 -> 0 bytes libraries/SdFat/html/sync_on.png | Bin 845 -> 0 bytes libraries/SdFat/html/tab_a.png | Bin 142 -> 0 bytes libraries/SdFat/html/tab_b.png | Bin 169 -> 0 bytes libraries/SdFat/html/tab_h.png | Bin 177 -> 0 bytes libraries/SdFat/html/tab_s.png | Bin 184 -> 0 bytes libraries/SdFat/html/tabs.css | 60 - .../SdFat/html/unioncache__t-members.html | 107 - libraries/SdFat/html/unioncache__t.html | 241 -- .../SdFat/html/unioncache__t__coll__graph.png | Bin 9174 -> 0 bytes libraries/SdFat/readme.txt | 65 - libraries/SdFat/utility/ArduinoFiles.h | 248 -- libraries/SdFat/utility/ArduinoStream.h | 141 - libraries/SdFat/utility/DigitalPin.h | 702 ---- libraries/SdFat/utility/FatApiConstants.h | 67 - libraries/SdFat/utility/FatFile.cpp | 1494 ------- libraries/SdFat/utility/FatFile.h | 990 ----- libraries/SdFat/utility/FatFileLFN.cpp | 683 ---- libraries/SdFat/utility/FatFilePrint.cpp | 248 -- libraries/SdFat/utility/FatFileSFN.cpp | 273 -- libraries/SdFat/utility/FatFileSystem.h | 310 -- libraries/SdFat/utility/FatLib.h | 33 - libraries/SdFat/utility/FatLibConfig.h | 143 - libraries/SdFat/utility/FatStructs.h | 755 ---- libraries/SdFat/utility/FatVolume.cpp | 585 --- libraries/SdFat/utility/FatVolume.h | 338 -- libraries/SdFat/utility/FmtNumber.cpp | 455 --- libraries/SdFat/utility/FmtNumber.h | 38 - libraries/SdFat/utility/SoftSPI.h | 170 - libraries/SdFat/utility/StdioStream.cpp | 606 --- libraries/SdFat/utility/StdioStream.h | 670 ---- libraries/SdFat/utility/bufstream.h | 163 - libraries/SdFat/utility/fstream.cpp | 167 - libraries/SdFat/utility/fstream.h | 315 -- libraries/SdFat/utility/ios.h | 418 -- libraries/SdFat/utility/iostream.h | 153 - libraries/SdFat/utility/istream.cpp | 381 -- libraries/SdFat/utility/istream.h | 379 -- libraries/SdFat/utility/ostream.cpp | 191 - libraries/SdFat/utility/ostream.h | 295 -- libraries/petit_fatfs/diskio.h | 42 - libraries/petit_fatfs/examples/demo/demo.ino | 144 - libraries/petit_fatfs/integer.h | 37 - libraries/petit_fatfs/keywords.txt | 36 - libraries/petit_fatfs/mmc.c | 267 -- libraries/petit_fatfs/petit_fatfs.cpp | 327 -- libraries/petit_fatfs/petit_fatfs.h | 58 - libraries/petit_fatfs/pff.c | 777 ---- libraries/petit_fatfs/pff.h | 237 -- .../All_In_One_Demo/All_In_One_Demo.ino | 501 --- .../Examples/All_In_One_Demo/strings.ino | 74 - .../Examples/All_In_One_Demo/utils.ino | 186 - .../Demo_readBinary/Demo_readBinary.pde | 165 - .../Examples/Demo_readLn/Demo_readLn.pde | 115 - .../Examples/Demo_writeLn/Demo_writeLn.ino | 112 - .../Examples/Demo_writeLn/Demo_writeLn.pde | 112 - .../SpeedCheck_writeLn/SpeedCheck_writeLn.pde | 138 - libraries/tinyFAT/HW_AVR.h | 14 - libraries/tinyFAT/HW_AVR_defines.h | 13 - libraries/tinyFAT/LICENSE.txt | 458 --- libraries/tinyFAT/SD_defines.h | 68 - libraries/tinyFAT/keywords.txt | 43 - libraries/tinyFAT/mmc.cpp | 303 -- libraries/tinyFAT/mmc.h | 76 - libraries/tinyFAT/tinyFAT.cpp | 952 ----- libraries/tinyFAT/tinyFAT.h | 148 - libraries/tinyFAT/tinyFAT.pdf | Bin 124077 -> 0 bytes libraries/tinyFAT/version.txt | 10 - 701 files changed, 129487 deletions(-) delete mode 100644 libraries/SdFat/MinimumSerial.cpp delete mode 100644 libraries/SdFat/MinimumSerial.h delete mode 100644 libraries/SdFat/SdFat.h delete mode 100644 libraries/SdFat/SdFat.html delete mode 100644 libraries/SdFat/SdFatBase.cpp delete mode 100644 libraries/SdFat/SdFatConfig.h delete mode 100644 libraries/SdFat/SdFatTestSuite/SdFatTestSuite.cpp delete mode 100644 libraries/SdFat/SdFatTestSuite/SdFatTestSuite.h delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/StressTest/StressTest.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/TestMkdir/TestMkdir.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/TestRmdir/TestRmdir.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/istreamTest/istreamTest.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/lfnSize/lfnSize.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/lfnTest/lfnTest.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/lfnTestCout/lfnTestCout.ino delete mode 100644 libraries/SdFat/SdFatTestSuite/examples/ostreamTest/ostreamTest.ino delete mode 100644 libraries/SdFat/SdFatUtil.cpp delete mode 100644 libraries/SdFat/SdFatUtil.h delete mode 100644 libraries/SdFat/SdFatmainpage.h delete mode 100644 libraries/SdFat/SdInfo.h delete mode 100644 libraries/SdFat/SdSpi.h delete mode 100644 libraries/SdFat/SdSpiCard.cpp delete mode 100644 libraries/SdFat/SdSpiCard.h delete mode 100644 libraries/SdFat/SdSpiSAM3X.cpp delete mode 100644 libraries/SdFat/SdSpiSTM32F1.cpp delete mode 100644 libraries/SdFat/SdSpiTeensy3.cpp delete mode 100644 libraries/SdFat/SdVolume.h delete mode 100644 libraries/SdFat/changes.txt delete mode 100644 libraries/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino delete mode 100644 libraries/SdFat/examples/#attic/BaseExtCaseTest/BaseExtCaseTest.ino delete mode 100644 libraries/SdFat/examples/#attic/HelloWorld/HelloWorld.ino delete mode 100644 libraries/SdFat/examples/#attic/MiniSerial/MiniSerial.ino delete mode 100644 libraries/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino delete mode 100644 libraries/SdFat/examples/#attic/SD_Size/SD_Size.ino delete mode 100644 libraries/SdFat/examples/#attic/SdFatSize/SdFatSize.ino delete mode 100644 libraries/SdFat/examples/#attic/append/append.ino delete mode 100644 libraries/SdFat/examples/#attic/average/average.ino delete mode 100644 libraries/SdFat/examples/#attic/benchSD/benchSD.ino delete mode 100644 libraries/SdFat/examples/#attic/bufstream/bufstream.ino delete mode 100644 libraries/SdFat/examples/#attic/eventlog/eventlog.ino delete mode 100644 libraries/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino delete mode 100644 libraries/SdFat/examples/#attic/readlog/readlog.ino delete mode 100644 libraries/SdFat/examples/#attic/readme.txt delete mode 100644 libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h delete mode 100644 libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino delete mode 100644 libraries/SdFat/examples/LongFileName/LongFileName.ino delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/A long name can be 255 characters.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/LFN,NAME.TXT delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/MIXCASE.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/Not_8_3.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/OK%83.TXT delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/STD_8_3.TXT delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/With Blank.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/With.Two dots.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/lower.txt delete mode 100644 libraries/SdFat/examples/LongFileName/testFiles/mixed.TXT delete mode 100644 libraries/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino delete mode 100644 libraries/SdFat/examples/LowLatencyLogger/UserDataType.h delete mode 100644 libraries/SdFat/examples/OpenNext/OpenNext.ino delete mode 100644 libraries/SdFat/examples/PrintBenchmark/PrintBenchmark.ino delete mode 100644 libraries/SdFat/examples/QuickStart/QuickStart.ino delete mode 100644 libraries/SdFat/examples/RawWrite/RawWrite.ino delete mode 100644 libraries/SdFat/examples/ReadWrite/ReadWrite.ino delete mode 100644 libraries/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino delete mode 100644 libraries/SdFat/examples/SdFormatter/SdFormatter.ino delete mode 100644 libraries/SdFat/examples/SdInfo/SdInfo.ino delete mode 100644 libraries/SdFat/examples/SoftwareSpi/SoftwareSpi.ino delete mode 100644 libraries/SdFat/examples/StdioBench/StdioBench.ino delete mode 100644 libraries/SdFat/examples/StreamParseInt/StreamParseInt.ino delete mode 100644 libraries/SdFat/examples/ThreeCards/ThreeCards.ino delete mode 100644 libraries/SdFat/examples/Timestamp/Timestamp.ino delete mode 100644 libraries/SdFat/examples/TwoCards/TwoCards.ino delete mode 100644 libraries/SdFat/examples/bench/bench.ino delete mode 100644 libraries/SdFat/examples/cin_cout/cin_cout.ino delete mode 100644 libraries/SdFat/examples/dataLogger/dataLogger.ino delete mode 100644 libraries/SdFat/examples/directoryFunctions/directoryFunctions.ino delete mode 100644 libraries/SdFat/examples/fgets/fgets.ino delete mode 100644 libraries/SdFat/examples/formatting/formatting.ino delete mode 100644 libraries/SdFat/examples/getline/getline.ino delete mode 100644 libraries/SdFat/examples/readCSV/readCSV.ino delete mode 100644 libraries/SdFat/examples/rename/rename.ino delete mode 100644 libraries/SdFat/html/_arduino_files_8h.html delete mode 100644 libraries/SdFat/html/_arduino_files_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_arduino_files_8h__incl.png delete mode 100644 libraries/SdFat/html/_arduino_stream_8h.html delete mode 100644 libraries/SdFat/html/_arduino_stream_8h__incl.png delete mode 100644 libraries/SdFat/html/_digital_pin_8h.html delete mode 100644 libraries/SdFat/html/_digital_pin_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_digital_pin_8h__incl.png delete mode 100644 libraries/SdFat/html/_fat_file_8h.html delete mode 100644 libraries/SdFat/html/_fat_file_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_fat_file_8h__incl.png delete mode 100644 libraries/SdFat/html/_fat_file_system_8h.html delete mode 100644 libraries/SdFat/html/_fat_file_system_8h__incl.png delete mode 100644 libraries/SdFat/html/_fat_lib_config_8h.html delete mode 100644 libraries/SdFat/html/_fat_lib_config_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_fat_lib_config_8h__incl.png delete mode 100644 libraries/SdFat/html/_fat_structs_8h.html delete mode 100644 libraries/SdFat/html/_fat_structs_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_fat_volume_8h.html delete mode 100644 libraries/SdFat/html/_fat_volume_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_fat_volume_8h__incl.png delete mode 100644 libraries/SdFat/html/_sd_fat_8h.html delete mode 100644 libraries/SdFat/html/_sd_fat_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_sd_fat_8h__incl.png delete mode 100644 libraries/SdFat/html/_sd_fat_config_8h.html delete mode 100644 libraries/SdFat/html/_sd_fat_config_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_sd_fat_config_8h__incl.png delete mode 100644 libraries/SdFat/html/_sd_fat_util_8h.html delete mode 100644 libraries/SdFat/html/_sd_fat_util_8h__incl.png delete mode 100644 libraries/SdFat/html/_sd_spi_8h.html delete mode 100644 libraries/SdFat/html/_sd_spi_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_sd_spi_8h__incl.png delete mode 100644 libraries/SdFat/html/_sd_spi_card_8h.html delete mode 100644 libraries/SdFat/html/_sd_spi_card_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_sd_spi_card_8h__incl.png delete mode 100644 libraries/SdFat/html/_soft_s_p_i_8h.html delete mode 100644 libraries/SdFat/html/_soft_s_p_i_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/_soft_s_p_i_8h__incl.png delete mode 100644 libraries/SdFat/html/_stdio_stream_8h.html delete mode 100644 libraries/SdFat/html/_stdio_stream_8h__incl.png delete mode 100644 libraries/SdFat/html/annotated.html delete mode 100644 libraries/SdFat/html/bc_s.png delete mode 100644 libraries/SdFat/html/bdwn.png delete mode 100644 libraries/SdFat/html/bufstream_8h.html delete mode 100644 libraries/SdFat/html/bufstream_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/bufstream_8h__incl.png delete mode 100644 libraries/SdFat/html/class_arduino_in_stream-members.html delete mode 100644 libraries/SdFat/html/class_arduino_in_stream.html delete mode 100644 libraries/SdFat/html/class_arduino_in_stream__coll__graph.png delete mode 100644 libraries/SdFat/html/class_arduino_in_stream__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_arduino_out_stream-members.html delete mode 100644 libraries/SdFat/html/class_arduino_out_stream.html delete mode 100644 libraries/SdFat/html/class_arduino_out_stream__coll__graph.png delete mode 100644 libraries/SdFat/html/class_arduino_out_stream__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_digital_pin-members.html delete mode 100644 libraries/SdFat/html/class_digital_pin.html delete mode 100644 libraries/SdFat/html/class_fat_cache-members.html delete mode 100644 libraries/SdFat/html/class_fat_cache.html delete mode 100644 libraries/SdFat/html/class_fat_file-members.html delete mode 100644 libraries/SdFat/html/class_fat_file.html delete mode 100644 libraries/SdFat/html/class_fat_file__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_fat_file_system-members.html delete mode 100644 libraries/SdFat/html/class_fat_file_system.html delete mode 100644 libraries/SdFat/html/class_fat_file_system__coll__graph.png delete mode 100644 libraries/SdFat/html/class_fat_file_system__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_fat_stream_base-members.html delete mode 100644 libraries/SdFat/html/class_fat_stream_base.html delete mode 100644 libraries/SdFat/html/class_fat_stream_base__coll__graph.png delete mode 100644 libraries/SdFat/html/class_fat_stream_base__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_fat_volume-members.html delete mode 100644 libraries/SdFat/html/class_fat_volume.html delete mode 100644 libraries/SdFat/html/class_fat_volume__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_file-members.html delete mode 100644 libraries/SdFat/html/class_file.html delete mode 100644 libraries/SdFat/html/class_file__coll__graph.png delete mode 100644 libraries/SdFat/html/class_file__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_minimum_serial-members.html delete mode 100644 libraries/SdFat/html/class_minimum_serial.html delete mode 100644 libraries/SdFat/html/class_minimum_serial__coll__graph.png delete mode 100644 libraries/SdFat/html/class_minimum_serial__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_print_file-members.html delete mode 100644 libraries/SdFat/html/class_print_file.html delete mode 100644 libraries/SdFat/html/class_print_file__coll__graph.png delete mode 100644 libraries/SdFat/html/class_print_file__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd2_card-members.html delete mode 100644 libraries/SdFat/html/class_sd2_card.html delete mode 100644 libraries/SdFat/html/class_sd2_card__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd2_card__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_base_file-members.html delete mode 100644 libraries/SdFat/html/class_sd_base_file.html delete mode 100644 libraries/SdFat/html/class_sd_base_file__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_base_file__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat-members.html delete mode 100644 libraries/SdFat/html/class_sd_fat.html delete mode 100644 libraries/SdFat/html/class_sd_fat__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_base-members.html delete mode 100644 libraries/SdFat/html/class_sd_fat_base.html delete mode 100644 libraries/SdFat/html/class_sd_fat_base__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_base__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_lib_spi-members.html delete mode 100644 libraries/SdFat/html/class_sd_fat_lib_spi.html delete mode 100644 libraries/SdFat/html/class_sd_fat_lib_spi__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_lib_spi__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_soft_spi-members.html delete mode 100644 libraries/SdFat/html/class_sd_fat_soft_spi.html delete mode 100644 libraries/SdFat/html/class_sd_fat_soft_spi__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_fat_soft_spi__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_file-members.html delete mode 100644 libraries/SdFat/html/class_sd_file.html delete mode 100644 libraries/SdFat/html/class_sd_file__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_file__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_spi-members.html delete mode 100644 libraries/SdFat/html/class_sd_spi.html delete mode 100644 libraries/SdFat/html/class_sd_spi_base-members.html delete mode 100644 libraries/SdFat/html/class_sd_spi_base.html delete mode 100644 libraries/SdFat/html/class_sd_spi_base__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_spi_card-members.html delete mode 100644 libraries/SdFat/html/class_sd_spi_card.html delete mode 100644 libraries/SdFat/html/class_sd_spi_card__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_spi_lib-members.html delete mode 100644 libraries/SdFat/html/class_sd_spi_lib.html delete mode 100644 libraries/SdFat/html/class_sd_spi_soft-members.html delete mode 100644 libraries/SdFat/html/class_sd_spi_soft.html delete mode 100644 libraries/SdFat/html/class_sd_spi_soft__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_spi_soft__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_sd_volume-members.html delete mode 100644 libraries/SdFat/html/class_sd_volume.html delete mode 100644 libraries/SdFat/html/class_sd_volume__coll__graph.png delete mode 100644 libraries/SdFat/html/class_sd_volume__inherit__graph.png delete mode 100644 libraries/SdFat/html/class_soft_s_p_i-members.html delete mode 100644 libraries/SdFat/html/class_soft_s_p_i.html delete mode 100644 libraries/SdFat/html/class_stdio_stream-members.html delete mode 100644 libraries/SdFat/html/class_stdio_stream.html delete mode 100644 libraries/SdFat/html/class_stdio_stream__coll__graph.png delete mode 100644 libraries/SdFat/html/class_stdio_stream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classes.html delete mode 100644 libraries/SdFat/html/classfstream-members.html delete mode 100644 libraries/SdFat/html/classfstream.html delete mode 100644 libraries/SdFat/html/classfstream__coll__graph.png delete mode 100644 libraries/SdFat/html/classfstream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classibufstream-members.html delete mode 100644 libraries/SdFat/html/classibufstream.html delete mode 100644 libraries/SdFat/html/classibufstream__coll__graph.png delete mode 100644 libraries/SdFat/html/classibufstream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classifstream-members.html delete mode 100644 libraries/SdFat/html/classifstream.html delete mode 100644 libraries/SdFat/html/classifstream__coll__graph.png delete mode 100644 libraries/SdFat/html/classifstream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classios-members.html delete mode 100644 libraries/SdFat/html/classios.html delete mode 100644 libraries/SdFat/html/classios__base-members.html delete mode 100644 libraries/SdFat/html/classios__base.html delete mode 100644 libraries/SdFat/html/classios__base__inherit__graph.png delete mode 100644 libraries/SdFat/html/classios__coll__graph.png delete mode 100644 libraries/SdFat/html/classios__inherit__graph.png delete mode 100644 libraries/SdFat/html/classiostream-members.html delete mode 100644 libraries/SdFat/html/classiostream.html delete mode 100644 libraries/SdFat/html/classiostream__coll__graph.png delete mode 100644 libraries/SdFat/html/classiostream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classistream-members.html delete mode 100644 libraries/SdFat/html/classistream.html delete mode 100644 libraries/SdFat/html/classistream__coll__graph.png delete mode 100644 libraries/SdFat/html/classistream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classobufstream-members.html delete mode 100644 libraries/SdFat/html/classobufstream.html delete mode 100644 libraries/SdFat/html/classobufstream__coll__graph.png delete mode 100644 libraries/SdFat/html/classobufstream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classofstream-members.html delete mode 100644 libraries/SdFat/html/classofstream.html delete mode 100644 libraries/SdFat/html/classofstream__coll__graph.png delete mode 100644 libraries/SdFat/html/classofstream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classostream-members.html delete mode 100644 libraries/SdFat/html/classostream.html delete mode 100644 libraries/SdFat/html/classostream__coll__graph.png delete mode 100644 libraries/SdFat/html/classostream__inherit__graph.png delete mode 100644 libraries/SdFat/html/classpin__map__t-members.html delete mode 100644 libraries/SdFat/html/closed.png delete mode 100644 libraries/SdFat/html/dir_000002_000003.html delete mode 100644 libraries/SdFat/html/dir_1281b15c327061056ab3b326e90c50cf.html delete mode 100644 libraries/SdFat/html/dir_1281b15c327061056ab3b326e90c50cf_dep.png delete mode 100644 libraries/SdFat/html/dir_481cc946b8a81b8d9363a4aad6201160.html delete mode 100644 libraries/SdFat/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png delete mode 100644 libraries/SdFat/html/dir_97b7730287bc3bcd349854d6663367e4.html delete mode 100644 libraries/SdFat/html/dir_97b7730287bc3bcd349854d6663367e4_dep.png delete mode 100644 libraries/SdFat/html/dir_a991eec27578c865874ede3d8ec657c2.html delete mode 100644 libraries/SdFat/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png delete mode 100644 libraries/SdFat/html/doxygen.css delete mode 100644 libraries/SdFat/html/doxygen.png delete mode 100644 libraries/SdFat/html/dynsections.js delete mode 100644 libraries/SdFat/html/files.html delete mode 100644 libraries/SdFat/html/fstream_8h.html delete mode 100644 libraries/SdFat/html/fstream_8h__incl.png delete mode 100644 libraries/SdFat/html/ftv2blank.png delete mode 100644 libraries/SdFat/html/ftv2doc.png delete mode 100644 libraries/SdFat/html/ftv2folderclosed.png delete mode 100644 libraries/SdFat/html/ftv2folderopen.png delete mode 100644 libraries/SdFat/html/ftv2lastnode.png delete mode 100644 libraries/SdFat/html/ftv2link.png delete mode 100644 libraries/SdFat/html/ftv2mlastnode.png delete mode 100644 libraries/SdFat/html/ftv2mnode.png delete mode 100644 libraries/SdFat/html/ftv2node.png delete mode 100644 libraries/SdFat/html/ftv2plastnode.png delete mode 100644 libraries/SdFat/html/ftv2pnode.png delete mode 100644 libraries/SdFat/html/ftv2splitbar.png delete mode 100644 libraries/SdFat/html/ftv2vertline.png delete mode 100644 libraries/SdFat/html/functions.html delete mode 100644 libraries/SdFat/html/functions_b.html delete mode 100644 libraries/SdFat/html/functions_c.html delete mode 100644 libraries/SdFat/html/functions_d.html delete mode 100644 libraries/SdFat/html/functions_e.html delete mode 100644 libraries/SdFat/html/functions_enum.html delete mode 100644 libraries/SdFat/html/functions_eval.html delete mode 100644 libraries/SdFat/html/functions_f.html delete mode 100644 libraries/SdFat/html/functions_func.html delete mode 100644 libraries/SdFat/html/functions_func_b.html delete mode 100644 libraries/SdFat/html/functions_func_c.html delete mode 100644 libraries/SdFat/html/functions_func_d.html delete mode 100644 libraries/SdFat/html/functions_func_e.html delete mode 100644 libraries/SdFat/html/functions_func_f.html delete mode 100644 libraries/SdFat/html/functions_func_g.html delete mode 100644 libraries/SdFat/html/functions_func_h.html delete mode 100644 libraries/SdFat/html/functions_func_i.html delete mode 100644 libraries/SdFat/html/functions_func_l.html delete mode 100644 libraries/SdFat/html/functions_func_m.html delete mode 100644 libraries/SdFat/html/functions_func_n.html delete mode 100644 libraries/SdFat/html/functions_func_o.html delete mode 100644 libraries/SdFat/html/functions_func_p.html delete mode 100644 libraries/SdFat/html/functions_func_r.html delete mode 100644 libraries/SdFat/html/functions_func_s.html delete mode 100644 libraries/SdFat/html/functions_func_t.html delete mode 100644 libraries/SdFat/html/functions_func_u.html delete mode 100644 libraries/SdFat/html/functions_func_v.html delete mode 100644 libraries/SdFat/html/functions_func_w.html delete mode 100644 libraries/SdFat/html/functions_g.html delete mode 100644 libraries/SdFat/html/functions_h.html delete mode 100644 libraries/SdFat/html/functions_i.html delete mode 100644 libraries/SdFat/html/functions_j.html delete mode 100644 libraries/SdFat/html/functions_l.html delete mode 100644 libraries/SdFat/html/functions_m.html delete mode 100644 libraries/SdFat/html/functions_n.html delete mode 100644 libraries/SdFat/html/functions_o.html delete mode 100644 libraries/SdFat/html/functions_p.html delete mode 100644 libraries/SdFat/html/functions_r.html delete mode 100644 libraries/SdFat/html/functions_s.html delete mode 100644 libraries/SdFat/html/functions_t.html delete mode 100644 libraries/SdFat/html/functions_type.html delete mode 100644 libraries/SdFat/html/functions_u.html delete mode 100644 libraries/SdFat/html/functions_v.html delete mode 100644 libraries/SdFat/html/functions_vars.html delete mode 100644 libraries/SdFat/html/functions_w.html delete mode 100644 libraries/SdFat/html/globals.html delete mode 100644 libraries/SdFat/html/globals_defs.html delete mode 100644 libraries/SdFat/html/globals_func.html delete mode 100644 libraries/SdFat/html/globals_type.html delete mode 100644 libraries/SdFat/html/globals_vars.html delete mode 100644 libraries/SdFat/html/graph_legend.html delete mode 100644 libraries/SdFat/html/graph_legend.png delete mode 100644 libraries/SdFat/html/group__digital_pin.html delete mode 100644 libraries/SdFat/html/group__soft_s_p_i.html delete mode 100644 libraries/SdFat/html/hierarchy.html delete mode 100644 libraries/SdFat/html/index.html delete mode 100644 libraries/SdFat/html/inherit_graph_0.png delete mode 100644 libraries/SdFat/html/inherit_graph_1.png delete mode 100644 libraries/SdFat/html/inherit_graph_10.png delete mode 100644 libraries/SdFat/html/inherit_graph_11.png delete mode 100644 libraries/SdFat/html/inherit_graph_12.png delete mode 100644 libraries/SdFat/html/inherit_graph_13.png delete mode 100644 libraries/SdFat/html/inherit_graph_14.png delete mode 100644 libraries/SdFat/html/inherit_graph_15.png delete mode 100644 libraries/SdFat/html/inherit_graph_16.png delete mode 100644 libraries/SdFat/html/inherit_graph_17.png delete mode 100644 libraries/SdFat/html/inherit_graph_18.png delete mode 100644 libraries/SdFat/html/inherit_graph_19.png delete mode 100644 libraries/SdFat/html/inherit_graph_2.png delete mode 100644 libraries/SdFat/html/inherit_graph_20.png delete mode 100644 libraries/SdFat/html/inherit_graph_21.png delete mode 100644 libraries/SdFat/html/inherit_graph_22.png delete mode 100644 libraries/SdFat/html/inherit_graph_23.png delete mode 100644 libraries/SdFat/html/inherit_graph_24.png delete mode 100644 libraries/SdFat/html/inherit_graph_3.png delete mode 100644 libraries/SdFat/html/inherit_graph_4.png delete mode 100644 libraries/SdFat/html/inherit_graph_5.png delete mode 100644 libraries/SdFat/html/inherit_graph_6.png delete mode 100644 libraries/SdFat/html/inherit_graph_7.png delete mode 100644 libraries/SdFat/html/inherit_graph_8.png delete mode 100644 libraries/SdFat/html/inherit_graph_9.png delete mode 100644 libraries/SdFat/html/inherits.html delete mode 100644 libraries/SdFat/html/ios_8h.html delete mode 100644 libraries/SdFat/html/ios_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/ios_8h__incl.png delete mode 100644 libraries/SdFat/html/iostream_8h.html delete mode 100644 libraries/SdFat/html/iostream_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/iostream_8h__incl.png delete mode 100644 libraries/SdFat/html/istream_8h.html delete mode 100644 libraries/SdFat/html/istream_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/istream_8h__incl.png delete mode 100644 libraries/SdFat/html/jquery.js delete mode 100644 libraries/SdFat/html/modules.html delete mode 100644 libraries/SdFat/html/nav_f.png delete mode 100644 libraries/SdFat/html/nav_g.png delete mode 100644 libraries/SdFat/html/nav_h.png delete mode 100644 libraries/SdFat/html/open.png delete mode 100644 libraries/SdFat/html/ostream_8h.html delete mode 100644 libraries/SdFat/html/ostream_8h__dep__incl.png delete mode 100644 libraries/SdFat/html/ostream_8h__incl.png delete mode 100644 libraries/SdFat/html/search/all_0.html delete mode 100644 libraries/SdFat/html/search/all_0.js delete mode 100644 libraries/SdFat/html/search/all_1.html delete mode 100644 libraries/SdFat/html/search/all_1.js delete mode 100644 libraries/SdFat/html/search/all_10.html delete mode 100644 libraries/SdFat/html/search/all_10.js delete mode 100644 libraries/SdFat/html/search/all_11.html delete mode 100644 libraries/SdFat/html/search/all_11.js delete mode 100644 libraries/SdFat/html/search/all_12.html delete mode 100644 libraries/SdFat/html/search/all_12.js delete mode 100644 libraries/SdFat/html/search/all_13.html delete mode 100644 libraries/SdFat/html/search/all_13.js delete mode 100644 libraries/SdFat/html/search/all_14.html delete mode 100644 libraries/SdFat/html/search/all_14.js delete mode 100644 libraries/SdFat/html/search/all_2.html delete mode 100644 libraries/SdFat/html/search/all_2.js delete mode 100644 libraries/SdFat/html/search/all_3.html delete mode 100644 libraries/SdFat/html/search/all_3.js delete mode 100644 libraries/SdFat/html/search/all_4.html delete mode 100644 libraries/SdFat/html/search/all_4.js delete mode 100644 libraries/SdFat/html/search/all_5.html delete mode 100644 libraries/SdFat/html/search/all_5.js delete mode 100644 libraries/SdFat/html/search/all_6.html delete mode 100644 libraries/SdFat/html/search/all_6.js delete mode 100644 libraries/SdFat/html/search/all_7.html delete mode 100644 libraries/SdFat/html/search/all_7.js delete mode 100644 libraries/SdFat/html/search/all_8.html delete mode 100644 libraries/SdFat/html/search/all_8.js delete mode 100644 libraries/SdFat/html/search/all_9.html delete mode 100644 libraries/SdFat/html/search/all_9.js delete mode 100644 libraries/SdFat/html/search/all_a.html delete mode 100644 libraries/SdFat/html/search/all_a.js delete mode 100644 libraries/SdFat/html/search/all_b.html delete mode 100644 libraries/SdFat/html/search/all_b.js delete mode 100644 libraries/SdFat/html/search/all_c.html delete mode 100644 libraries/SdFat/html/search/all_c.js delete mode 100644 libraries/SdFat/html/search/all_d.html delete mode 100644 libraries/SdFat/html/search/all_d.js delete mode 100644 libraries/SdFat/html/search/all_e.html delete mode 100644 libraries/SdFat/html/search/all_e.js delete mode 100644 libraries/SdFat/html/search/all_f.html delete mode 100644 libraries/SdFat/html/search/all_f.js delete mode 100644 libraries/SdFat/html/search/classes_0.html delete mode 100644 libraries/SdFat/html/search/classes_0.js delete mode 100644 libraries/SdFat/html/search/classes_1.html delete mode 100644 libraries/SdFat/html/search/classes_1.js delete mode 100644 libraries/SdFat/html/search/classes_2.html delete mode 100644 libraries/SdFat/html/search/classes_2.js delete mode 100644 libraries/SdFat/html/search/classes_3.html delete mode 100644 libraries/SdFat/html/search/classes_3.js delete mode 100644 libraries/SdFat/html/search/classes_4.html delete mode 100644 libraries/SdFat/html/search/classes_4.js delete mode 100644 libraries/SdFat/html/search/classes_5.html delete mode 100644 libraries/SdFat/html/search/classes_5.js delete mode 100644 libraries/SdFat/html/search/classes_6.html delete mode 100644 libraries/SdFat/html/search/classes_6.js delete mode 100644 libraries/SdFat/html/search/classes_7.html delete mode 100644 libraries/SdFat/html/search/classes_7.js delete mode 100644 libraries/SdFat/html/search/classes_8.html delete mode 100644 libraries/SdFat/html/search/classes_8.js delete mode 100644 libraries/SdFat/html/search/classes_9.html delete mode 100644 libraries/SdFat/html/search/classes_9.js delete mode 100644 libraries/SdFat/html/search/close.png delete mode 100644 libraries/SdFat/html/search/defines_0.html delete mode 100644 libraries/SdFat/html/search/defines_0.js delete mode 100644 libraries/SdFat/html/search/defines_1.html delete mode 100644 libraries/SdFat/html/search/defines_1.js delete mode 100644 libraries/SdFat/html/search/defines_2.html delete mode 100644 libraries/SdFat/html/search/defines_2.js delete mode 100644 libraries/SdFat/html/search/defines_3.html delete mode 100644 libraries/SdFat/html/search/defines_3.js delete mode 100644 libraries/SdFat/html/search/defines_4.html delete mode 100644 libraries/SdFat/html/search/defines_4.js delete mode 100644 libraries/SdFat/html/search/defines_5.html delete mode 100644 libraries/SdFat/html/search/defines_5.js delete mode 100644 libraries/SdFat/html/search/defines_6.html delete mode 100644 libraries/SdFat/html/search/defines_6.js delete mode 100644 libraries/SdFat/html/search/defines_7.html delete mode 100644 libraries/SdFat/html/search/defines_7.js delete mode 100644 libraries/SdFat/html/search/defines_8.html delete mode 100644 libraries/SdFat/html/search/defines_8.js delete mode 100644 libraries/SdFat/html/search/enums_0.html delete mode 100644 libraries/SdFat/html/search/enums_0.js delete mode 100644 libraries/SdFat/html/search/enumvalues_0.html delete mode 100644 libraries/SdFat/html/search/enumvalues_0.js delete mode 100644 libraries/SdFat/html/search/enumvalues_1.html delete mode 100644 libraries/SdFat/html/search/enumvalues_1.js delete mode 100644 libraries/SdFat/html/search/enumvalues_2.html delete mode 100644 libraries/SdFat/html/search/enumvalues_2.js delete mode 100644 libraries/SdFat/html/search/files_0.html delete mode 100644 libraries/SdFat/html/search/files_0.js delete mode 100644 libraries/SdFat/html/search/files_1.html delete mode 100644 libraries/SdFat/html/search/files_1.js delete mode 100644 libraries/SdFat/html/search/files_2.html delete mode 100644 libraries/SdFat/html/search/files_2.js delete mode 100644 libraries/SdFat/html/search/files_3.html delete mode 100644 libraries/SdFat/html/search/files_3.js delete mode 100644 libraries/SdFat/html/search/files_4.html delete mode 100644 libraries/SdFat/html/search/files_4.js delete mode 100644 libraries/SdFat/html/search/files_5.html delete mode 100644 libraries/SdFat/html/search/files_5.js delete mode 100644 libraries/SdFat/html/search/files_6.html delete mode 100644 libraries/SdFat/html/search/files_6.js delete mode 100644 libraries/SdFat/html/search/functions_0.html delete mode 100644 libraries/SdFat/html/search/functions_0.js delete mode 100644 libraries/SdFat/html/search/functions_1.html delete mode 100644 libraries/SdFat/html/search/functions_1.js delete mode 100644 libraries/SdFat/html/search/functions_10.html delete mode 100644 libraries/SdFat/html/search/functions_10.js delete mode 100644 libraries/SdFat/html/search/functions_11.html delete mode 100644 libraries/SdFat/html/search/functions_11.js delete mode 100644 libraries/SdFat/html/search/functions_12.html delete mode 100644 libraries/SdFat/html/search/functions_12.js delete mode 100644 libraries/SdFat/html/search/functions_13.html delete mode 100644 libraries/SdFat/html/search/functions_13.js delete mode 100644 libraries/SdFat/html/search/functions_2.html delete mode 100644 libraries/SdFat/html/search/functions_2.js delete mode 100644 libraries/SdFat/html/search/functions_3.html delete mode 100644 libraries/SdFat/html/search/functions_3.js delete mode 100644 libraries/SdFat/html/search/functions_4.html delete mode 100644 libraries/SdFat/html/search/functions_4.js delete mode 100644 libraries/SdFat/html/search/functions_5.html delete mode 100644 libraries/SdFat/html/search/functions_5.js delete mode 100644 libraries/SdFat/html/search/functions_6.html delete mode 100644 libraries/SdFat/html/search/functions_6.js delete mode 100644 libraries/SdFat/html/search/functions_7.html delete mode 100644 libraries/SdFat/html/search/functions_7.js delete mode 100644 libraries/SdFat/html/search/functions_8.html delete mode 100644 libraries/SdFat/html/search/functions_8.js delete mode 100644 libraries/SdFat/html/search/functions_9.html delete mode 100644 libraries/SdFat/html/search/functions_9.js delete mode 100644 libraries/SdFat/html/search/functions_a.html delete mode 100644 libraries/SdFat/html/search/functions_a.js delete mode 100644 libraries/SdFat/html/search/functions_b.html delete mode 100644 libraries/SdFat/html/search/functions_b.js delete mode 100644 libraries/SdFat/html/search/functions_c.html delete mode 100644 libraries/SdFat/html/search/functions_c.js delete mode 100644 libraries/SdFat/html/search/functions_d.html delete mode 100644 libraries/SdFat/html/search/functions_d.js delete mode 100644 libraries/SdFat/html/search/functions_e.html delete mode 100644 libraries/SdFat/html/search/functions_e.js delete mode 100644 libraries/SdFat/html/search/functions_f.html delete mode 100644 libraries/SdFat/html/search/functions_f.js delete mode 100644 libraries/SdFat/html/search/groups_0.html delete mode 100644 libraries/SdFat/html/search/groups_0.js delete mode 100644 libraries/SdFat/html/search/groups_1.html delete mode 100644 libraries/SdFat/html/search/groups_1.js delete mode 100644 libraries/SdFat/html/search/mag_sel.png delete mode 100644 libraries/SdFat/html/search/nomatches.html delete mode 100644 libraries/SdFat/html/search/pages_0.html delete mode 100644 libraries/SdFat/html/search/pages_0.js delete mode 100644 libraries/SdFat/html/search/search.css delete mode 100644 libraries/SdFat/html/search/search.js delete mode 100644 libraries/SdFat/html/search/search_l.png delete mode 100644 libraries/SdFat/html/search/search_m.png delete mode 100644 libraries/SdFat/html/search/search_r.png delete mode 100644 libraries/SdFat/html/search/typedefs_0.html delete mode 100644 libraries/SdFat/html/search/typedefs_0.js delete mode 100644 libraries/SdFat/html/search/typedefs_1.html delete mode 100644 libraries/SdFat/html/search/typedefs_1.js delete mode 100644 libraries/SdFat/html/search/typedefs_2.html delete mode 100644 libraries/SdFat/html/search/typedefs_2.js delete mode 100644 libraries/SdFat/html/search/typedefs_3.html delete mode 100644 libraries/SdFat/html/search/typedefs_3.js delete mode 100644 libraries/SdFat/html/search/typedefs_4.html delete mode 100644 libraries/SdFat/html/search/typedefs_4.js delete mode 100644 libraries/SdFat/html/search/typedefs_5.html delete mode 100644 libraries/SdFat/html/search/typedefs_5.js delete mode 100644 libraries/SdFat/html/search/typedefs_6.html delete mode 100644 libraries/SdFat/html/search/typedefs_6.js delete mode 100644 libraries/SdFat/html/search/typedefs_7.html delete mode 100644 libraries/SdFat/html/search/typedefs_7.js delete mode 100644 libraries/SdFat/html/search/variables_0.html delete mode 100644 libraries/SdFat/html/search/variables_0.js delete mode 100644 libraries/SdFat/html/search/variables_1.html delete mode 100644 libraries/SdFat/html/search/variables_1.js delete mode 100644 libraries/SdFat/html/search/variables_10.html delete mode 100644 libraries/SdFat/html/search/variables_10.js delete mode 100644 libraries/SdFat/html/search/variables_11.html delete mode 100644 libraries/SdFat/html/search/variables_11.js delete mode 100644 libraries/SdFat/html/search/variables_12.html delete mode 100644 libraries/SdFat/html/search/variables_12.js delete mode 100644 libraries/SdFat/html/search/variables_13.html delete mode 100644 libraries/SdFat/html/search/variables_13.js delete mode 100644 libraries/SdFat/html/search/variables_14.html delete mode 100644 libraries/SdFat/html/search/variables_14.js delete mode 100644 libraries/SdFat/html/search/variables_2.html delete mode 100644 libraries/SdFat/html/search/variables_2.js delete mode 100644 libraries/SdFat/html/search/variables_3.html delete mode 100644 libraries/SdFat/html/search/variables_3.js delete mode 100644 libraries/SdFat/html/search/variables_4.html delete mode 100644 libraries/SdFat/html/search/variables_4.js delete mode 100644 libraries/SdFat/html/search/variables_5.html delete mode 100644 libraries/SdFat/html/search/variables_5.js delete mode 100644 libraries/SdFat/html/search/variables_6.html delete mode 100644 libraries/SdFat/html/search/variables_6.js delete mode 100644 libraries/SdFat/html/search/variables_7.html delete mode 100644 libraries/SdFat/html/search/variables_7.js delete mode 100644 libraries/SdFat/html/search/variables_8.html delete mode 100644 libraries/SdFat/html/search/variables_8.js delete mode 100644 libraries/SdFat/html/search/variables_9.html delete mode 100644 libraries/SdFat/html/search/variables_9.js delete mode 100644 libraries/SdFat/html/search/variables_a.html delete mode 100644 libraries/SdFat/html/search/variables_a.js delete mode 100644 libraries/SdFat/html/search/variables_b.html delete mode 100644 libraries/SdFat/html/search/variables_b.js delete mode 100644 libraries/SdFat/html/search/variables_c.html delete mode 100644 libraries/SdFat/html/search/variables_c.js delete mode 100644 libraries/SdFat/html/search/variables_d.html delete mode 100644 libraries/SdFat/html/search/variables_d.js delete mode 100644 libraries/SdFat/html/search/variables_e.html delete mode 100644 libraries/SdFat/html/search/variables_e.js delete mode 100644 libraries/SdFat/html/search/variables_f.html delete mode 100644 libraries/SdFat/html/search/variables_f.js delete mode 100644 libraries/SdFat/html/struct_fat_pos__t-members.html delete mode 100644 libraries/SdFat/html/struct_fat_pos__t.html delete mode 100644 libraries/SdFat/html/structdirectory_entry-members.html delete mode 100644 libraries/SdFat/html/structdirectory_entry.html delete mode 100644 libraries/SdFat/html/structfat32__boot-members.html delete mode 100644 libraries/SdFat/html/structfat32__boot.html delete mode 100644 libraries/SdFat/html/structfat32__fsinfo-members.html delete mode 100644 libraries/SdFat/html/structfat32__fsinfo.html delete mode 100644 libraries/SdFat/html/structfat__boot-members.html delete mode 100644 libraries/SdFat/html/structfat__boot.html delete mode 100644 libraries/SdFat/html/structfname__t-members.html delete mode 100644 libraries/SdFat/html/structfname__t.html delete mode 100644 libraries/SdFat/html/structlong_directory_entry-members.html delete mode 100644 libraries/SdFat/html/structlong_directory_entry.html delete mode 100644 libraries/SdFat/html/structmaster_boot_record-members.html delete mode 100644 libraries/SdFat/html/structmaster_boot_record.html delete mode 100644 libraries/SdFat/html/structmaster_boot_record__coll__graph.png delete mode 100644 libraries/SdFat/html/structpartition_table-members.html delete mode 100644 libraries/SdFat/html/structpartition_table.html delete mode 100644 libraries/SdFat/html/structpgm-members.html delete mode 100644 libraries/SdFat/html/structpgm.html delete mode 100644 libraries/SdFat/html/structpin__map__t.html delete mode 100644 libraries/SdFat/html/structsetfill-members.html delete mode 100644 libraries/SdFat/html/structsetfill.html delete mode 100644 libraries/SdFat/html/structsetprecision-members.html delete mode 100644 libraries/SdFat/html/structsetprecision.html delete mode 100644 libraries/SdFat/html/structsetw-members.html delete mode 100644 libraries/SdFat/html/structsetw.html delete mode 100644 libraries/SdFat/html/sync_off.png delete mode 100644 libraries/SdFat/html/sync_on.png delete mode 100644 libraries/SdFat/html/tab_a.png delete mode 100644 libraries/SdFat/html/tab_b.png delete mode 100644 libraries/SdFat/html/tab_h.png delete mode 100644 libraries/SdFat/html/tab_s.png delete mode 100644 libraries/SdFat/html/tabs.css delete mode 100644 libraries/SdFat/html/unioncache__t-members.html delete mode 100644 libraries/SdFat/html/unioncache__t.html delete mode 100644 libraries/SdFat/html/unioncache__t__coll__graph.png delete mode 100644 libraries/SdFat/readme.txt delete mode 100644 libraries/SdFat/utility/ArduinoFiles.h delete mode 100644 libraries/SdFat/utility/ArduinoStream.h delete mode 100644 libraries/SdFat/utility/DigitalPin.h delete mode 100644 libraries/SdFat/utility/FatApiConstants.h delete mode 100644 libraries/SdFat/utility/FatFile.cpp delete mode 100644 libraries/SdFat/utility/FatFile.h delete mode 100644 libraries/SdFat/utility/FatFileLFN.cpp delete mode 100644 libraries/SdFat/utility/FatFilePrint.cpp delete mode 100644 libraries/SdFat/utility/FatFileSFN.cpp delete mode 100644 libraries/SdFat/utility/FatFileSystem.h delete mode 100644 libraries/SdFat/utility/FatLib.h delete mode 100644 libraries/SdFat/utility/FatLibConfig.h delete mode 100644 libraries/SdFat/utility/FatStructs.h delete mode 100644 libraries/SdFat/utility/FatVolume.cpp delete mode 100644 libraries/SdFat/utility/FatVolume.h delete mode 100644 libraries/SdFat/utility/FmtNumber.cpp delete mode 100644 libraries/SdFat/utility/FmtNumber.h delete mode 100644 libraries/SdFat/utility/SoftSPI.h delete mode 100644 libraries/SdFat/utility/StdioStream.cpp delete mode 100644 libraries/SdFat/utility/StdioStream.h delete mode 100644 libraries/SdFat/utility/bufstream.h delete mode 100644 libraries/SdFat/utility/fstream.cpp delete mode 100644 libraries/SdFat/utility/fstream.h delete mode 100644 libraries/SdFat/utility/ios.h delete mode 100644 libraries/SdFat/utility/iostream.h delete mode 100644 libraries/SdFat/utility/istream.cpp delete mode 100644 libraries/SdFat/utility/istream.h delete mode 100644 libraries/SdFat/utility/ostream.cpp delete mode 100644 libraries/SdFat/utility/ostream.h delete mode 100644 libraries/petit_fatfs/diskio.h delete mode 100644 libraries/petit_fatfs/examples/demo/demo.ino delete mode 100644 libraries/petit_fatfs/integer.h delete mode 100644 libraries/petit_fatfs/keywords.txt delete mode 100644 libraries/petit_fatfs/mmc.c delete mode 100644 libraries/petit_fatfs/petit_fatfs.cpp delete mode 100644 libraries/petit_fatfs/petit_fatfs.h delete mode 100644 libraries/petit_fatfs/pff.c delete mode 100644 libraries/petit_fatfs/pff.h delete mode 100644 libraries/tinyFAT/Examples/All_In_One_Demo/All_In_One_Demo.ino delete mode 100644 libraries/tinyFAT/Examples/All_In_One_Demo/strings.ino delete mode 100644 libraries/tinyFAT/Examples/All_In_One_Demo/utils.ino delete mode 100644 libraries/tinyFAT/Examples/Demo_readBinary/Demo_readBinary.pde delete mode 100644 libraries/tinyFAT/Examples/Demo_readLn/Demo_readLn.pde delete mode 100644 libraries/tinyFAT/Examples/Demo_writeLn/Demo_writeLn.ino delete mode 100644 libraries/tinyFAT/Examples/Demo_writeLn/Demo_writeLn.pde delete mode 100644 libraries/tinyFAT/Examples/SpeedCheck_writeLn/SpeedCheck_writeLn.pde delete mode 100644 libraries/tinyFAT/HW_AVR.h delete mode 100644 libraries/tinyFAT/HW_AVR_defines.h delete mode 100644 libraries/tinyFAT/LICENSE.txt delete mode 100644 libraries/tinyFAT/SD_defines.h delete mode 100644 libraries/tinyFAT/keywords.txt delete mode 100644 libraries/tinyFAT/mmc.cpp delete mode 100644 libraries/tinyFAT/mmc.h delete mode 100644 libraries/tinyFAT/tinyFAT.cpp delete mode 100644 libraries/tinyFAT/tinyFAT.h delete mode 100644 libraries/tinyFAT/tinyFAT.pdf delete mode 100644 libraries/tinyFAT/version.txt diff --git a/libraries/SdFat/MinimumSerial.cpp b/libraries/SdFat/MinimumSerial.cpp deleted file mode 100644 index 1218566..0000000 --- a/libraries/SdFat/MinimumSerial.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* 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 "MinimumSerial.h" -const uint16_t MIN_2X_BAUD = F_CPU/(4*(2*0XFFF + 1)) + 1; -//------------------------------------------------------------------------------ -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) && baud > MIN_2X_BAUD) { - // 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); -} -//------------------------------------------------------------------------------ -int MinimumSerial::read() { - if (UCSR0A & (1 << RXC0)) { - return UDR0; - } - return -1; -} -//------------------------------------------------------------------------------ -size_t MinimumSerial::write(uint8_t b) { - while (((1 << UDRIE0) & UCSR0B) || !(UCSR0A & (1 << UDRE0))) {} - UDR0 = b; - return 1; -} -#endif // defined(UDR0) || defined(DOXYGEN) diff --git a/libraries/SdFat/MinimumSerial.h b/libraries/SdFat/MinimumSerial.h deleted file mode 100644 index 667668f..0000000 --- a/libraries/SdFat/MinimumSerial.h +++ /dev/null @@ -1,50 +0,0 @@ -/* 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 MinimumSerial_h -#define MinimumSerial_h -#include -//============================================================================== -/** - * \class MinimumSerial - * \brief mini serial class for the %SdFat library. - */ -class MinimumSerial : public Print { - public: - /** - * 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 begin(uint32_t baud); - /** - * Unbuffered read - * \return -1 if no character is available or an available character. - */ - int read(); - /** - * Unbuffered write - * - * \param[in] b byte to write. - * \return 1 - */ - size_t write(uint8_t b); - using Print::write; -}; -#endif // MinimumSerial_h diff --git a/libraries/SdFat/SdFat.h b/libraries/SdFat/SdFat.h deleted file mode 100644 index b6724a4..0000000 --- a/libraries/SdFat/SdFat.h +++ /dev/null @@ -1,341 +0,0 @@ -/* 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 SdFat_h -#define SdFat_h -/** - * \file - * \brief SdFat class - */ -#include "SdSpiCard.h" -#include "utility/FatLib.h" -//------------------------------------------------------------------------------ -/** SdFat version YYYYMMDD */ -#define SD_FAT_VERSION 20150324 -//============================================================================== -/** - * \class SdBaseFile - * \brief Class for backward compatibility. - */ -class SdBaseFile : public FatFile { - public: - SdBaseFile() {} - /** Create a file object and open it in the current working directory. - * - * \param[in] path A path for a file to be opened. - * - * \param[in] oflag Values for \a oflag are constructed by a - * bitwise-inclusive OR of open flags. see - * FatFile::open(FatFile*, const char*, uint8_t). - */ - SdBaseFile(const char* path, uint8_t oflag) : FatFile(path, oflag) {} -}; -#if ENABLE_ARDUINO_FEATURES -/** - * \class SdFile - * \brief Class for backward compatibility. - */ - -class SdFile : public PrintFile { - public: - SdFile() {} - /** Create a file object and open it in the current working directory. - * - * \param[in] path A path for a file to be opened. - * - * \param[in] oflag Values for \a oflag are constructed by a - * bitwise-inclusive OR of open flags. see - * FatFile::open(FatFile*, const char*, uint8_t). - */ - SdFile(const char* path, uint8_t oflag) : PrintFile(path, oflag) {} -}; -#endif // #if ENABLE_ARDUINO_FEATURES -/** - * \class SdFatBase - * \brief Virtual base class for %SdFat library. - */ -class SdFatBase : public FatFileSystem { - public: - /** Initialize SD card and file system. - * \param[in] spi SPI object for the card. - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool begin(SdSpiCard::m_spi_t* spi, uint8_t csPin = SS, uint8_t divisor = 2) { - return m_sdCard.begin(spi, csPin, divisor) && - FatFileSystem::begin(); - } - /** \return Pointer to SD card object */ - SdSpiCard *card() { - return &m_sdCard; - } - /** %Print any SD error code to Serial and halt. */ - void errorHalt() { - errorHalt(&Serial); - } - /** %Print any SD error code and halt. - * - * \param[in] pr Print destination. - */ - void errorHalt(Print* pr); - /** %Print msg, any SD error code and halt. - * - * \param[in] msg Message to print. - */ - void errorHalt(char const* msg) { - errorHalt(&Serial, msg); - } - /** %Print msg, any SD error code, and halt. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void errorHalt(Print* pr, char const* msg); - /** %Print msg, any SD error code, and halt. - * - * \param[in] msg Message to print. - */ - void errorHalt(const __FlashStringHelper* msg) { - errorHalt(&Serial, msg); - } - /** %Print msg, any SD error code, and halt. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void errorHalt(Print* pr, const __FlashStringHelper* msg); - /** %Print any SD error code to Serial */ - void errorPrint() { - errorPrint(&Serial); - } - /** %Print any SD error code. - * \param[in] pr Print device. - */ - void errorPrint(Print* pr); - /** %Print msg, any SD error code. - * - * \param[in] msg Message to print. - */ - void errorPrint(const char* msg) { - errorPrint(&Serial, msg); - } - /** %Print msg, any SD error code. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void errorPrint(Print* pr, char const* msg); - /** %Print msg, any SD error code. - * - * \param[in] msg Message to print. - */ - void errorPrint(const __FlashStringHelper* msg) { - errorPrint(&Serial, msg); - } - /** %Print msg, any SD error code. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void errorPrint(Print* pr, const __FlashStringHelper* msg); - /** Diagnostic call to initialize FatFileSystem - use for - * diagnostic purposes only. - * \return true for success else false. - */ - bool fsBegin() { - return FatFileSystem::begin(); - } - /** %Print any SD error code and halt. */ - void initErrorHalt() { - initErrorHalt(&Serial); - } - /** %Print error details and halt after begin fails. - * - * \param[in] pr Print destination. - */ - void initErrorHalt(Print* pr); - /**Print message, error details, and halt after SdFat::init() fails. - * - * \param[in] msg Message to print. - */ - void initErrorHalt(char const *msg) { - initErrorHalt(&Serial, msg); - } - /**Print message, error details, and halt after SdFatBase::init() fails. - * \param[in] pr Print device. - * \param[in] msg Message to print. - */ - void initErrorHalt(Print* pr, char const *msg); - /**Print message, error details, and halt after SdFat::init() fails. - * - * \param[in] msg Message to print. - */ - void initErrorHalt(const __FlashStringHelper* msg) { - initErrorHalt(&Serial, msg); - } - /**Print message, error details, and halt after SdFatBase::init() fails. - * \param[in] pr Print device for message. - * \param[in] msg Message to print. - */ - void initErrorHalt(Print* pr, const __FlashStringHelper* msg); - /** Print error details after SdFat::init() fails. */ - void initErrorPrint() { - initErrorPrint(&Serial); - } - /** Print error details after SdFatBase::init() fails. - * - * \param[in] pr Print destination. - */ - void initErrorPrint(Print* pr); - /**Print message and error details and halt after SdFat::init() fails. - * - * \param[in] msg Message to print. - */ - void initErrorPrint(char const *msg) { - initErrorPrint(&Serial, msg); - } - /**Print message and error details and halt after SdFatBase::init() fails. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void initErrorPrint(Print* pr, char const *msg); - /**Print message and error details and halt after SdFat::init() fails. - * - * \param[in] msg Message to print. - */ - void initErrorPrint(const __FlashStringHelper* msg) { - initErrorPrint(&Serial, msg); - } - /**Print message and error details and halt after SdFatBase::init() fails. - * - * \param[in] pr Print destination. - * \param[in] msg Message to print. - */ - void initErrorPrint(Print* pr, const __FlashStringHelper* msg); - - private: - uint8_t cardErrorCode() { - return m_sdCard.errorCode(); - } - uint8_t cardErrorData() { - return m_sdCard.errorData(); - } - bool readBlock(uint32_t block, uint8_t* dst) { - return m_sdCard.readBlock(block, dst); - } - bool writeBlock(uint32_t block, const uint8_t* src) { - return m_sdCard.writeBlock(block, src); - } - bool readBlocks(uint32_t block, uint8_t* dst, size_t n) { - return m_sdCard.readBlocks(block, dst, n); - } - bool writeBlocks(uint32_t block, const uint8_t* src, size_t n) { - return m_sdCard.writeBlocks(block, src, n); - } - SdSpiCard m_sdCard; -}; -//============================================================================== -/** - * \class SdFat - * \brief Main file system class for %SdFat library. - */ -class SdFat : public SdFatBase { - public: - /** Initialize SD card and file system. - * - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool begin(uint8_t csPin = SS, uint8_t divisor = 2) { - return SdFatBase::begin(&m_spi, csPin, divisor); - } - /** Diagnostic call to initialize SD card - use for diagnostic purposes only. - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool cardBegin(uint8_t csPin = SS, uint8_t divisor = 2) { - return card()->begin(&m_spi, csPin, divisor); - } - private: - SpiDefault_t m_spi; -}; -//============================================================================== -#if SD_SPI_CONFIGURATION >= 3 || defined(DOXYGEN) -/** - * \class SdFatLibSpi - * \brief SdFat class using the standard Arduino SPI library. - */ -class SdFatLibSpi: public SdFatBase { - public: - /** Initialize SD card and file system. - * - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool begin(uint8_t csPin = SS, uint8_t divisor = 2) { - return SdFatBase::begin(&m_spi, csPin, divisor); - } - /** Diagnostic call to initialize SD card - use for diagnostic purposes only. - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool cardBegin(uint8_t csPin = SS, uint8_t divisor = 2) { - return card()->begin(&m_spi, csPin, divisor); - } - - private: - SdSpiLib m_spi; -}; -//============================================================================== -/** - * \class SdFatSoftSpi - * \brief SdFat class using software SPI. - */ -template -class SdFatSoftSpi : public SdFatBase { - public: - /** Initialize SD card and file system. - * - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool begin(uint8_t csPin = SS, uint8_t divisor = 2) { - return SdFatBase::begin(&m_spi, csPin, divisor); - } - /** Diagnostic call to initialize SD card - use for diagnostic purposes only. - * \param[in] csPin SD card chip select pin. - * \param[in] divisor SPI divisor. - * \return true for success else false. - */ - bool cardBegin(uint8_t csPin = SS, uint8_t divisor = 2) { - return card()->begin(&m_spi, csPin, divisor); - } - - private: - SdSpiSoft m_spi; -}; -#endif /// SD_SPI_CONFIGURATION >= 3 || defined(DOXYGEN) -#endif // SdFat_h diff --git a/libraries/SdFat/SdFat.html b/libraries/SdFat/SdFat.html deleted file mode 100644 index a01f20b..0000000 --- a/libraries/SdFat/SdFat.html +++ /dev/null @@ -1,10 +0,0 @@ - - -A web page that points a browser to a different page - - - - -Your browser didn't automatically redirect. Open html/index.html manually. - - diff --git a/libraries/SdFat/SdFatBase.cpp b/libraries/SdFat/SdFatBase.cpp deleted file mode 100644 index 1727b0a..0000000 --- a/libraries/SdFat/SdFatBase.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* 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 "SdFat.h" -//------------------------------------------------------------------------------ -void SdFatBase::errorHalt(Print* pr) { - errorPrint(pr); - while (1) {} -} -//------------------------------------------------------------------------------ -void SdFatBase::errorHalt(Print* pr, char const* msg) { - errorPrint(pr, msg); - while (1) {} -} -//------------------------------------------------------------------------------ -void SdFatBase::errorHalt(Print* pr, const __FlashStringHelper* msg) { - errorPrint(pr, msg); - while (1) {} -} -//------------------------------------------------------------------------------ -void SdFatBase::errorPrint(Print* pr) { - if (!cardErrorCode()) { - return; - } - pr->print(F("SD errorCode: 0X")); - pr->print(cardErrorCode(), HEX); - pr->print(F(",0X")); - pr->println(cardErrorData(), HEX); -} -//------------------------------------------------------------------------------ -void SdFatBase::errorPrint(Print* pr, char const* msg) { - pr->print(F("error: ")); - pr->println(msg); - errorPrint(pr); -} -//------------------------------------------------------------------------------ -void SdFatBase::errorPrint(Print* pr, const __FlashStringHelper* msg) { - pr->print(F("error: ")); - pr->println(msg); - errorPrint(pr); -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorHalt(Print* pr) { - initErrorPrint(pr); - while (1) {} -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorHalt(Print* pr, char const *msg) { - pr->println(msg); - initErrorHalt(pr); -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorHalt(Print* pr, const __FlashStringHelper* msg) { - pr->println(msg); - initErrorHalt(pr); -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorPrint(Print* pr) { - if (cardErrorCode()) { - pr->println(F("Can't access SD card. Do not reformat.")); - if (cardErrorCode() == SD_CARD_ERROR_CMD0) { - pr->println(F("No card, wrong chip select pin, or SPI problem?")); - } - errorPrint(pr); - } else if (vol()->fatType() == 0) { - pr->println(F("Invalid format, reformat SD.")); - } else if (!vwd()->isOpen()) { - pr->println(F("Can't open root directory.")); - } else { - pr->println(F("No error found.")); - } -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorPrint(Print* pr, char const *msg) { - pr->println(msg); - initErrorPrint(pr); -} -//------------------------------------------------------------------------------ -void SdFatBase::initErrorPrint(Print* pr, const __FlashStringHelper* msg) { - pr->println(msg); - initErrorPrint(pr); -} - diff --git a/libraries/SdFat/SdFatConfig.h b/libraries/SdFat/SdFatConfig.h deleted file mode 100644 index 431d493..0000000 --- a/libraries/SdFat/SdFatConfig.h +++ /dev/null @@ -1,188 +0,0 @@ -/* 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 USE_LONG_FILE_NAMES nonzero to use long file names (LFN). - * Long File Name are limited to a maximum length of 255 characters. - * - * This implementation allows 7-bit characters in the range - * 0X20 to 0X7E except the following characters are not allowed: - * - * < (less than) - * > (greater than) - * : (colon) - * " (double quote) - * / (forward slash) - * \ (backslash) - * | (vertical bar or pipe) - * ? (question mark) - * * (asterisk) - * - */ -#define USE_LONG_FILE_NAMES 1 -//------------------------------------------------------------------------------ -/** - * Set ARDUINO_FILE_USES_STREAM nonzero to use Stream as the base class - * for the Arduino File class. If ARDUINO_FILE_USES_STREAM is zero, Print - * will be used as the base class for the Arduino File class. - * - * You can save some flash if you do not use Stream input functions such as - * find(), findUntil(), readBytesUntil(), readString(), readStringUntil(), - * parseInt(), and parseFloat(). - */ -#define ARDUINO_FILE_USES_STREAM 1 -//------------------------------------------------------------------------------ -/** - * The symbol SD_SPI_CONFIGURATION defines SPI access to the SD card. - * - * IF SD_SPI_CONFIGUTATION is define to be zero, only the SdFat class - * is define and SdFat uses a fast custom SPI implementation. - * - * If SD_SPI_CONFIGURATION is define to be one, only the SdFat class is - * define and SdFat uses the standard Arduino SPI.h library. - * - * If SD_SPI_CONFIGURATION is define to be two, only the SdFat class is - * define and SdFat uses software SPI on the pins defined below. - * - * If SD_SPI_CONFIGURATION is define to be three, the three classes, SdFat, - * SdFatLibSpi, and SdFatSoftSpi are defined. SdFat uses the fast - * custom SPI implementation. SdFatLibSpi uses the standard Arduino SPI - * library. SdFatSoftSpi is a template class that uses Software SPI. The - * template parameters define the software SPI pins. See the ThreeCard - * example for simultaneous use of all three classes. - */ -#define SD_SPI_CONFIGURATION 0 -//------------------------------------------------------------------------------ -/** - * If SD_SPI_CONFIGURATION is defined to be two, these definitions - * will define the pins used for software SPI. - * - * The default definition allows Uno shields to be used on other boards. - */ -/** 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; -//------------------------------------------------------------------------------ -/** - * 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 -//------------------------------------------------------------------------------ -/** - * Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature - * of the standard Arduino SPI library. You must include SPI.h in your - * programs 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 FAT12_SUPPORT nonzero to enable use if FAT12 volumes. - * FAT12 has not been well tested and requires additional flash. - */ -#define FAT12_SUPPORT 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 -//------------------------------------------------------------------------------ -/** - * 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. This 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_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_IO 0 -#else // RAMEND -#define USE_MULTI_BLOCK_IO 1 -#endif // RAMEND -#endif // SdFatConfig_h diff --git a/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.cpp b/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.cpp deleted file mode 100644 index f09f099..0000000 --- a/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.cpp +++ /dev/null @@ -1,82 +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 - * . - */ -#include -static uint16_t failCount; -static uint16_t testCount; -static Print* testOut = &Serial; -//------------------------------------------------------------------------------ -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.read() <= 0) {} - delay(200); // Catch Due reset problem - - testOut->print(F("FreeRam: ")); - testOut->println(FreeRam()); - testOut->println(); - failCount = 0; - testCount = 0; -} -//------------------------------------------------------------------------------ -void testEnd() { - testOut->println(); - testOut->println(F("Compiled: " __DATE__ " " __TIME__)); - testOut->print(F("FreeRam: ")); - testOut->println(FreeRam()); - testOut->print(F("Test count: ")); - testOut->println(testCount); - testOut->print(F("Fail count: ")); - testOut->println(failCount); -} -//------------------------------------------------------------------------------ -static void testResult(bool b, uint8_t n) { - while (n++ < 60) testOut->write(' '); - if (b) { - testOut->println(F("..ok")); - } else { - testOut->println(F("FAIL")); - failCount++; - } - testCount++; -} -//------------------------------------------------------------------------------ -void testVerify_P(char* result, PGM_P expect) { - testOut->write('"'); - testOut->print(result); - testOut->print("\",\""); - testOut->print((const __FlashStringHelper*)expect); - testOut->write('"'); - uint8_t n = strlen(result) + strlenPGM(expect) + 5; - testResult(!strcmp_P(result, expect), n); -} -//------------------------------------------------------------------------------ -void testVerify_P(bool b, PGM_P msg) { - testOut->print((const __FlashStringHelper*)msg); - uint8_t n = strlenPGM(msg); - testResult(b, n); -} diff --git a/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.h b/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.h deleted file mode 100644 index 736f67f..0000000 --- a/libraries/SdFat/SdFatTestSuite/SdFatTestSuite.h +++ /dev/null @@ -1,45 +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 - * . - */ -#ifndef SdFatTestSuite_h -#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(); -void testEnd(); -void testVerify_P(bool b, PGM_P msg); -void testVerify_P(char* result, PGM_P expect); -#endif // SdFatTestSuite_h diff --git a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino b/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino deleted file mode 100644 index 4b4fe3a..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_File/ATS_SD_File.ino +++ /dev/null @@ -1,106 +0,0 @@ -// modified from ArduinoTestSuite 0022 by William Greiman -// Tests writing to and reading from a file, in particular the -// the Stream implementation (e.g. read() and peek()). - -#include -#include -#include -SdFat SD; -#define FILE_WRITE O_RDWR | O_CREAT | O_AT_END -#define ATS_PrintTestStatus(msg, b) testVerify_P(b, PSTR(msg)) -void setup() { - boolean b; - SdFile f; - uint32_t fs; - - testBegin(); - - ATS_PrintTestStatus("SD.begin()", b = SD.begin()); - if (!b) goto done; - - SD.remove("test.txt"); - - f.open("test.txt", FILE_WRITE); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - f.print("abc"); - f.print("de"); - f.close(); - - f.open("test.txt", FILE_WRITE); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - f.print("fgh"); - f.close(); - - f.open("test.txt", O_READ); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - fs =f.fileSize(); - ATS_PrintTestStatus("read()", f.read() == 'a'); - ATS_PrintTestStatus("peek()", f.peek() == 'b'); - ATS_PrintTestStatus("read()", f.read() == 'b'); - ATS_PrintTestStatus("read()", f.read() == 'c'); - ATS_PrintTestStatus("peek()", f.peek() == 'd'); - ATS_PrintTestStatus("peek()", f.peek() == 'd'); - ATS_PrintTestStatus("peek()", f.peek() == 'd'); - ATS_PrintTestStatus("peek()", f.peek() == 'd'); - ATS_PrintTestStatus("read()", f.read() == 'd'); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("read()", f.read() == 'e'); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("peek()", f.peek() == 'f'); - ATS_PrintTestStatus("read()", f.read() == 'f'); - ATS_PrintTestStatus("peek()", f.peek() == 'g'); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("peek()", f.peek() == 'g'); - ATS_PrintTestStatus("read()", f.read() == 'g'); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("available()", f.curPosition() != fs); - ATS_PrintTestStatus("peek()", f.peek() == 'h'); - ATS_PrintTestStatus("read()", f.read() == 'h'); - ATS_PrintTestStatus("available()", f.curPosition() == fs); - ATS_PrintTestStatus("peek()", f.peek() == -1); - ATS_PrintTestStatus("read()", f.read() == -1); - ATS_PrintTestStatus("peek()", f.peek() == -1); - ATS_PrintTestStatus("read()", f.read() == -1); - - f.close(); - - SD.remove("test2.txt"); - - f.open("test2.txt", FILE_WRITE); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - f.print("ABC"); - f.close(); - - f.open("test.txt", O_READ); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - ATS_PrintTestStatus("peek()", f.peek() == 'a'); - - f.close(); - - f.open("test2.txt", O_READ); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - ATS_PrintTestStatus("peek()", f.peek() == 'A'); - ATS_PrintTestStatus("read()", f.read() == 'A'); - - f.close(); - -done: - testEnd(); - -} - -void loop() {} - - diff --git a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino b/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino deleted file mode 100644 index 1427bb5..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Files/ATS_SD_Files.ino +++ /dev/null @@ -1,76 +0,0 @@ -// modified from ArduinoTestSuite 0022 by William Greiman -#include -#include -#include -SdFat SD; -#define FILE_WRITE O_RDWR | O_CREAT | O_AT_END -#define ATS_PrintTestStatus(msg, b) testVerify_P(b, PSTR(msg)) - -void setup() { - boolean b; - SdFile f; - - testBegin(); - - ATS_PrintTestStatus("SD.begin()", b = SD.begin()); - if (!b) goto done; - - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf.txt")); - ATS_PrintTestStatus("SD.open()", f.open("asdf.txt", FILE_WRITE)); f.close(); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf.txt")); - ATS_PrintTestStatus("SD.exists()", SD.exists("/asdf.txt")); - ATS_PrintTestStatus("SD.remove()", SD.remove("asdf.txt")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf.txt")); - - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf")); - ATS_PrintTestStatus("SD.mkdir()", SD.mkdir("asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("/asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf/")); - ATS_PrintTestStatus("SD.rmdir()", SD.rmdir("asdf")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf")); - - ATS_PrintTestStatus("SD.mkdir()", SD.mkdir("x/y/z")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/y")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/y/")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/y/z")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/y/z/")); - ATS_PrintTestStatus("SD.exists()", SD.exists("/x/y/z/")); - ATS_PrintTestStatus("SD.rmdir()", SD.rmdir("x/y/z")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x/y")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y/z")); - ATS_PrintTestStatus("SD.rmdir()", SD.rmdir("x/y/")); - ATS_PrintTestStatus("SD.exists()", SD.exists("x")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y/z")); - ATS_PrintTestStatus("SD.rmdir()", SD.rmdir("/x")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y/z")); - - ATS_PrintTestStatus("!SD.open()", !(f.open("asdf/asdf.txt", FILE_WRITE))); f.close(); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf.txt")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf/asdf.txt")); - ATS_PrintTestStatus("SD.mkdir()", SD.mkdir("asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf")); - ATS_PrintTestStatus("SD.open()", f.open("asdf/asdf.txt", FILE_WRITE)); f.close(); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf/asdf.txt")); - ATS_PrintTestStatus("!SD.rmdir()", !SD.rmdir("asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf/asdf.txt")); - ATS_PrintTestStatus("SD.remove()", SD.remove("asdf/asdf.txt")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf/asdf.txt")); - ATS_PrintTestStatus("SD.exists()", SD.exists("asdf")); - ATS_PrintTestStatus("SD.rmdir()", SD.rmdir("asdf")); - ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf")); - -done: - - testEnd(); - -} -void loop() {} diff --git a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino b/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino deleted file mode 100644 index 2d16972..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/ATS_SD_Seek/ATS_SD_Seek.ino +++ /dev/null @@ -1,109 +0,0 @@ -// modified from ArduinoTestSuite 0022 by William Greiman -// Tests writing to and reading from a file, in particular the -// the Stream implementation (e.g. read() and peek()). -#include -#include -#include -SdFat SD; -#define FILE_WRITE O_RDWR | O_CREAT | O_AT_END -#define ATS_PrintTestStatus(msg, b) testVerify_P(b, PSTR(msg)) - -void setup() { - boolean b; - SdFile f; - - testBegin(); - - ATS_PrintTestStatus("SD.begin()", b = SD.begin()); - if (!b) goto done; - - SD.remove("test.txt"); - - f.open("test.txt", FILE_WRITE); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - ATS_PrintTestStatus("initial position", f.curPosition() == 0); - ATS_PrintTestStatus("initial size", f.fileSize() == 0); - - f.print("0123456789"); - - ATS_PrintTestStatus("position after writing", f.curPosition() == 10); - ATS_PrintTestStatus("size after writing", f.fileSize() == 10); - - f.seekSet(0); - - ATS_PrintTestStatus("size after seek", f.fileSize() == 10); - ATS_PrintTestStatus("position after seek", f.curPosition() == 0); - - f.seekSet(7); - - ATS_PrintTestStatus("position after seek", f.curPosition() == 7); - ATS_PrintTestStatus("reading after seek", f.read() == '7'); - ATS_PrintTestStatus("position after reading after seeking", f.curPosition() == 8); - ATS_PrintTestStatus("reading after reading after seeking", f.read() == '8'); - - f.seekSet(3); - - ATS_PrintTestStatus("position after seeking", f.curPosition() == 3); - ATS_PrintTestStatus("peeking after seeking", f.peek() == '3'); - ATS_PrintTestStatus("position after peeking after seeking", f.curPosition() == 3); - ATS_PrintTestStatus("peeking after peeking after seeking", f.peek() == '3'); - ATS_PrintTestStatus("position after peeking after seeking", f.curPosition() == 3); - ATS_PrintTestStatus("peeking after peeking after seeking", f.read() == '3'); - ATS_PrintTestStatus("position after peeking after seeking", f.curPosition() == 4); - - f.seekSet(1); - - ATS_PrintTestStatus("position after seeking", f.curPosition() == 1); - ATS_PrintTestStatus("peeking after seeking", f.peek() == '1'); - - f.seekSet(4); - - ATS_PrintTestStatus("position after seeking", f.curPosition() == 4); - ATS_PrintTestStatus("peeking after seeking", f.peek() == '4'); - - f.seekSet(7); - - ATS_PrintTestStatus("position()", f.curPosition() == 7); - ATS_PrintTestStatus("read()", f.read() == '7'); - - f.seekSet(0); - f.peek(); - f.print("AB"); - - ATS_PrintTestStatus("position()", f.curPosition() == 2); - ATS_PrintTestStatus("size()", f.fileSize() == 10); - ATS_PrintTestStatus("read()", f.read() == '2'); - - f.seekSet(0); - - ATS_PrintTestStatus("read()", f.read() == 'A'); - ATS_PrintTestStatus("read()", f.read() == 'B'); - ATS_PrintTestStatus("read()", f.read() == '2'); - - f.close(); - - f.open("test.txt", O_READ); - ATS_PrintTestStatus("SD.open()", f.isOpen()); - if (!f.isOpen()) goto done; - - ATS_PrintTestStatus("position()", f.curPosition() == 0); - ATS_PrintTestStatus("size()", f.fileSize() == 10); - ATS_PrintTestStatus("peek()", f.peek() == 'A'); - ATS_PrintTestStatus("read()", f.read() == 'A'); - - f.seekSet(4); - - ATS_PrintTestStatus("position()", f.curPosition() == 4); - ATS_PrintTestStatus("size()", f.fileSize() == 10); - ATS_PrintTestStatus("peek()", f.peek() == '4'); - ATS_PrintTestStatus("read()", f.read() == '4'); - - f.close(); - -done: - testEnd(); -} - -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/SdFatTestSuite/examples/StressTest/StressTest.ino b/libraries/SdFat/SdFatTestSuite/examples/StressTest/StressTest.ino deleted file mode 100644 index 11fb804..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/StressTest/StressTest.ino +++ /dev/null @@ -1,76 +0,0 @@ -// This stress test will create and write files until the SD is full. -#include -#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/libraries/SdFat/SdFatTestSuite/examples/TestMkdir/TestMkdir.ino b/libraries/SdFat/SdFatTestSuite/examples/TestMkdir/TestMkdir.ino deleted file mode 100644 index a98f822..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/TestMkdir/TestMkdir.ino +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This sketch is a test of subdirectory and file creation. - * It also tests allocation of clusters to directories. - * - * It will create two subdirectories and create enough files - * to force the allocation of a cluster to each directory. - * - * More than 3000 files may be created on a FAT32 volume. - * - * Note: Some cards may 'stutter' others just get slow due - * to the number of flash erases this program causes. - */ -#include -#include -#include - -const uint8_t SD_CHIP_SELECT = SS; - -SdFat sd; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) - -/* - * create enough files to force a cluster to be allocated to dir. - */ -void dirAllocTest(FatFile* dir) { - char buf[32], name[32]; - SdFile file; - uint16_t n; - uint32_t size = dir->dirSize(); - - // create files and write name to file - for (n = 0; ; n++){ - // make file name - sprintf(name, "%u.TXT", n); - - // open start time - uint32_t t0 = millis(); - if (!file.open(dir, name, O_WRITE | O_CREAT | O_EXCL)) { - error("open for write failed"); - } - - // open end time and write start time - uint32_t t1 = millis(); - // write file name to file - file.print(name); - if (!file.close()) error("close write"); - - // write end time - uint32_t t2 = millis(); - Serial.print(F("WR ")); - Serial.print(n); - Serial.write(' '); - - // print time to create file - Serial.print(t1 - t0); - Serial.write(' '); - - // print time to write file - Serial.println(t2 - t1); - - // directory size will change when a cluster is added - if (dir->curPosition() > size) break; - } - - // read files and check content - for (uint16_t i = 0; i <= n; i++) { - sprintf(name, "%u.TXT", i); - - // open start time - uint32_t t0 = millis(); - if (!file.open(dir, name, O_READ)) { - error("open for read failed"); - } - - // open end time and read start time - uint32_t t1 = millis(); - int16_t nr = file.read(buf, sizeof(buf)); - if (nr < 5) error("file.read failed"); - - // read end time - uint32_t t2 = millis(); - - // check file content - if (strlen(name) != nr || strncmp(name, buf, nr)) { - error("content compare failed"); - } - if (!file.close()) error("close read failed"); - - Serial.print(F("RD ")); - Serial.print(i); - Serial.write(' '); - - // print open time - Serial.print(t1 - t0); - Serial.write(' '); - - // print read time - Serial.println(t2 - t1); - } -} - -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - Serial.println(F("Type any character to start")); - 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.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) sd.initErrorHalt(); - - uint32_t m = millis(); - // write files to root if FAT32 - if (sd.vol()->fatType() == 32) { - Serial.println(F("Writing files to root")); - dirAllocTest(sd.vwd()); - } - - // create sub1 and write files - SdFile sub1; - if (!sub1.mkdir(sd.vwd(), "SUB1")) error("makdeDir SUB1 failed"); - Serial.println(F("Writing files to SUB1")); - dirAllocTest(&sub1); - - // create sub2 and write files - SdFile sub2; - if (!sub2.mkdir(&sub1, "SUB2")) error("mkdir SUB2 failed"); - Serial.println(F("Writing files to SUB2")); - dirAllocTest(&sub2); - m = millis() - m; - Serial.print(F("Done millis: ")); - Serial.println(m); -} - -void loop() { } \ No newline at end of file diff --git a/libraries/SdFat/SdFatTestSuite/examples/TestRmdir/TestRmdir.ino b/libraries/SdFat/SdFatTestSuite/examples/TestRmdir/TestRmdir.ino deleted file mode 100644 index 013e921..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/TestRmdir/TestRmdir.ino +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This sketch will remove the files and directories - * created by the SdFatMakeDir.pde sketch. - * - * Performance is erratic due to the large number - * of flash erase operations caused by many random - * writes to file structures. - */ -#include -#include -#include - -const uint8_t SD_CHIP_SELECT = SS; - -SdFat sd; - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) - -/* - * remove all files in dir. - */ -void deleteFiles(FatFile* dir) { - char name[32]; - SdFile file; - - // open and delete files - for (uint16_t n = 0; ; n++){ - sprintf(name, "%u.TXT", n); - - // open start time - uint32_t t0 = millis(); - - // assume done if open fails - if (!file.open(dir, name, O_WRITE)) return; - - // open end time and remove start time - uint32_t t1 = millis(); - if (!file.remove()) error("file.remove failed"); - - // remove end time - uint32_t t2 = millis(); - - Serial.print(F("RM ")); - Serial.print(n); - Serial.write(' '); - - // open time - Serial.print(t1 - t0); - Serial.write(' '); - - // remove time - Serial.println(t2 - t1); - } -} - -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - Serial.println(F("Type any character to start")); - 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.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) sd.initErrorHalt(); - - - // delete files in root if FAT32 - if (sd.vol()->fatType() == 32) { - Serial.println(F("Remove files in root")); - deleteFiles(sd.vwd()); - } - - // open SUB1 and delete files - SdFile sub1; - if (!sub1.open("SUB1", O_READ)) error("open SUB1 failed"); - Serial.println(F("Remove files in SUB1")); - deleteFiles(&sub1); - - // open SUB2 and delete files - SdFile sub2; - if (!sub2.open(&sub1, "SUB2", O_READ)) error("open SUB2 failed"); - Serial.println(F("Remove files in SUB2")); - deleteFiles(&sub2); - - // remove SUB2 - if (!sub2.rmdir()) error("sub2.rmdir failed"); - Serial.println(F("SUB2 removed")); - - // remove SUB1 - if (!sub1.rmdir()) error("sub1.rmdir failed"); - Serial.println(F("SUB1 removed")); - - Serial.println(F("Done")); -} - -void loop() { } diff --git a/libraries/SdFat/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino b/libraries/SdFat/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino deleted file mode 100644 index dc65e12..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/fstreamTest/fstreamTest.ino +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include -SdFat sd; -char *testName = "SDFAT.TST"; -//------------------------------------------------------------------------------ -void fstreamOpen() { - ios::openmode nocreate[] = {ios::in, ios::in | ios::out}; - ios::openmode create[] = - {ios::out, ios::out | ios::app, ios::app, ios::out | ios::trunc, - ios::in | ios::out | ios::trunc, ios::in | ios::out | ios::app, - ios::in | ios::app}; - ios::openmode illegal[] = - {0, ios::trunc, ios::app | ios::trunc, ios::in | ios::app | ios::trunc, - ios::in | ios::trunc, ios::out | ios::app | ios::trunc, - ios::in | ios::out | ios::app | ios::trunc}; - - sd.remove(testName); - fstream file(testName); - testVerifyMsg(!file.is_open()&& !sd.exists(testName), "fstream constructor"); - - for (uint8_t i = 0 ; i < sizeof(nocreate)/sizeof(nocreate[1]); i++) { - file.close(); - sd.remove(testName); - file.open(testName, nocreate[i]); - testVerifyMsg(!sd.exists(testName) && !file.is_open(), "fstream nocreate !exists"); - } - for (uint8_t i = 0 ; i < sizeof(create)/sizeof(create[1]); i++) { - file.close(); - sd.remove(testName); - file.open(testName, create[i]); - testVerifyMsg(sd.exists(testName) && file.is_open(), "fstream create openmode"); - } - for (uint8_t i = 0 ; i < sizeof(illegal)/sizeof(illegal[1]); i++) { - file.close(); - file.open(testName, illegal[i]); - testVerifyMsg(sd.exists(testName) && !file.is_open(), "fstream illegal openmode"); - } - for (uint8_t i = 0 ; i < sizeof(nocreate)/sizeof(nocreate[1]); i++) { - file.close(); - file.open(testName, nocreate[i]); - testVerifyMsg(sd.exists(testName) && file.is_open(), "fstream nocreate exists"); - } -} -//------------------------------------------------------------------------------ -void testPosition() { - sd.remove(testName); - ofstream ofs(testName); - testVerifyBool(ofs.good() && ofs.tellp() == 0); - ofs.seekp(0, ios::end); - testVerifyBool(ofs.good() && ofs.tellp() == 0); - ofs << "abcde"; - testVerifyBool(ofs.good() && ofs.tellp() == 5); - ofs.seekp(4); - testVerifyBool(ofs.good() && ofs.tellp() == 4); - ofs.seekp(-1, ios::cur); - testVerifyBool(ofs.good() && ofs.tellp() == 3); - ofs.close(); - ifstream ifs(testName, ios::ate); - testVerifyBool(ifs.good() && ifs.tellg() == 5); - ifs.seekg(0); - testVerifyBool(ifs.get() == 'a' && ifs.get() == 'b'); - testVerifyBool(ifs.tellg() == 2 && ifs.good()); - ifs.seekg(3, ios::cur); - testVerifyBool(ifs.tellg() == 5 && ifs.good()); - ifs.seekg(4, ios::beg); - testVerifyBool(ifs.good() && ifs.tellg() == 4); - ifs.close(); - ofs.open(testName, ios::app); - testVerifyBool(ofs.good() && ofs.tellp() == 0); - ofs << 'f'; - testVerifyBool(ofs.good() && ofs.tellp() == 6); - ofs.close(); - ofs.open(testName, ios::trunc); - ofs.seekp(0, ios::end); - testVerifyBool(ofs.good() && ofs.tellp() == 0); - ofs << "ABCDEF"; - ofs.close(); - fstream fs(testName); - testVerifyBool(fs.good() && fs.tellp() == 0 && fs.tellg() == 0); - fs.seekg(2); - testVerifyBool(fs.good() && fs.get() == 'C'); -} -//------------------------------------------------------------------------------ -void setup() { - - testBegin(); - if (!sd.begin()) sd.initErrorHalt(); - fstreamOpen(); - testPosition(); - testEnd(); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/SdFatTestSuite/examples/istreamTest/istreamTest.ino b/libraries/SdFat/SdFatTestSuite/examples/istreamTest/istreamTest.ino deleted file mode 100644 index 3cf4d6d..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/istreamTest/istreamTest.ino +++ /dev/null @@ -1,261 +0,0 @@ -#include -#include -#include - -char buf[100]; -ibufstream ib; -#define ibInit(s) ibInit_P(PSTR(s)) - -//---------------------------------------------------------- -void ibInit_P(PGM_P p) { - if (strlen_P(p) >= sizeof(buf)) { - ib.init(""); - ib.setstate(ios::badbit); - } else { - ib.clear(); - strncpy_P(buf, p, sizeof(buf)); - ib.init(buf); - } -} -//------------------------------------------------------------------------------ -void istreamBool() { - bool b; - ibInit(" 0 1 2"); - 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()); -} -//------------------------------------------------------------------------------ -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'); - testVerifyBool((ib >> uc) && ib.good() && uc == 'u'); - testVerifyBool(ib.get() == ' '); - testVerifyBool(ib.peek() == 'g' && ib.good()); - testVerifyBool(ib.get() == 'g' && ib.good()); - testVerifyBool(ib.get() == -1 && ib.eof()); -} -//------------------------------------------------------------------------------ -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()); - testVerifyBool((ib >> f) && f == 1.0 && ib.good()); - testVerifyBool((ib >> f) && f == 2.0 && ib.good()); - testVerifyBool((ib >> f) && f == 3.4 && 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-3 && ib.good()); - testVerifyBool((ib >> f) && fabs(f + 123.4567) < 1e-5 && ib.eof()); - 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"); - testVerifyBool(ib.get() == 'a' && ib.good() && ib.gcount() == 1); - testVerifyBool(ib.get() == 'b' && ib.good() && ib.gcount() == 1); - 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); - testVerifyStr(s, "ab"); - testVerifyBool(ib.get() == '\n' && ib.good() && ib.gcount() == 1); - ib.get(s, sizeof(s)); - testVerifyBool(ib.good() && ib.gcount() == 3); - testVerifyStr(s, "cde"); - ib.get(s, sizeof(s)); - testVerifyBool(ib.eof() && ib.gcount() == 1); - testVerifyStr(s, "f"); - - ibInit( - "short line\n" - "\n" - "17 character line\n" - "too long for buffer\n" - "line with no nl" - ); - char buf[18]; - ib.getline(buf, sizeof(buf)); - testVerifyBool(ib.good() && ib.gcount() == 11); - testVerifyStr(buf, "short line"); - ib.getline(buf, sizeof(buf)); - testVerifyBool(ib.good() && ib.gcount() == 1 && buf[0] == '\0'); - ib.getline(buf, sizeof(buf)); - testVerifyBool(ib.good() && ib.gcount() == 18); - testVerifyStr(buf, "17 character line"); - ib.getline(buf, sizeof(buf)); - testVerifyBool(ib.fail() && !ib.eof() && ib.gcount() == 17); - testVerifyStr(buf, "too long for buff"); - ib.clear(); - ib.getline(buf, sizeof(buf)); - testVerifyBool(ib.good() && !ib.eof() && ib.gcount() == 3); - testVerifyStr(buf, "er"); - ib.getline(buf, sizeof(buf)); - testVerifyBool(!ib.fail() && ib.eof() && ib.gcount() == 15); - testVerifyStr(buf, "line with no nl"); -} -//------------------------------------------------------------------------------ -void istreamNumber() { - short s; - signed short ss; - unsigned short us; - int i; - signed int si; - unsigned int ui; - long l; - signed long sl; - unsigned long ul; - - ibInit("-32769"); - testVerifyBool(!(ib >> s) && ib.fail()); - ibInit("-32768 0 32767 32768"); - testVerifyBool((ib >> s) && s == -32768 && ib.good()); - testVerifyBool((ib >> s) && s == 0 && ib.good()); - testVerifyBool((ib >> s) && s == 32767 && ib.good()); - testVerifyBool(!(ib >> s) && ib.fail()); - - ibInit("-32769"); - testVerifyBool(!(ib >> ss) && ib.fail()); - ibInit("-32768 0 32767 32768"); - testVerifyBool((ib >> ss) && ss == -32768 && ib.good()); - 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()); - -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()); - } 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"); - testVerifyBool((ib >> l) && l == -2147483648 && ib.good()); - testVerifyBool((ib >> l) && l == 0 && ib.good()); - testVerifyBool((ib >> l) && l == 2147483647 && ib.good()); - testVerifyBool(!(ib >> l) && ib.fail()); - - ibInit("-2147483649"); - testVerifyBool(!(ib >> sl) && ib.fail()); - ibInit("-2147483648 0 2147483647 2147483648"); - testVerifyBool((ib >> sl) && sl == -2147483648 && ib.good()); - 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); - testVerifyBool((ib >> hex >> i) && i == 0xabc); - testVerifyBool((ib >> i) && i == 0xdef); - testVerifyBool((ib >> i) && i == 0xabc); - testVerifyBool((ib >> dec >> i) && i ==567); -} -//------------------------------------------------------------------------------ -void istreamStr() { - char str[20]; - ibInit("abc def\r\n hij"); - testVerifyBool((ib >> str) && ib.good()); - testVerifyStr(str, "abc"); - testVerifyBool((ib >> str) && ib.good()); - testVerifyStr(str, "def"); - testVerifyBool((ib >> str) && ib.eof()); - testVerifyStr(str, "hij"); -} -//------------------------------------------------------------------------------ -void setup() { - testBegin(); - istreamBool(); - istreamChar(); - istreamDouble(); - istreamFloat(); - istreamGet(); - istreamNumber(); - istreamStr(); - testEnd(); -} -//------------------------------------------------------------------------------ -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/SdFatTestSuite/examples/lfnSize/lfnSize.ino b/libraries/SdFat/SdFatTestSuite/examples/lfnSize/lfnSize.ino deleted file mode 100644 index a37e9b2..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/lfnSize/lfnSize.ino +++ /dev/null @@ -1,36 +0,0 @@ -// Program to compare size of SdFat with the SD.h library. -#include -// Select the test library by commenting out one of the following two lines. -// #include -#include - -// SD chip select pin. -const uint8_t SD_CS_PIN = SS; - -#ifdef __SD_H__ -File file; -#else // __SD_H__ -SdFat SD; -SdFile file; -#endif // __SD_H__ - -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - if (!SD.begin(SD_CS_PIN)) { - Serial.println("begin failed"); - return; - } - #ifdef __SD_H__ - file = SD.open("SFN_file.txt", FILE_WRITE); - #else // __SD_H__ - file.open("LFN_file.txt", O_RDWR | O_CREAT); - #endif // __SD_H__ - - file.println("Hello"); - file.close(); - Serial.println("Done"); -} -//------------------------------------------------------------------------------ -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/SdFatTestSuite/examples/lfnTest/lfnTest.ino b/libraries/SdFat/SdFatTestSuite/examples/lfnTest/lfnTest.ino deleted file mode 100644 index 72be3bc..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/lfnTest/lfnTest.ino +++ /dev/null @@ -1,235 +0,0 @@ -#include -#include -#include -const uint8_t SD_CS_PIN = SS; -SdFat sd; -SdFile file; -char name[260]; - -//------------------------------------------------------------------------------ -char* testName[] = { - "low.low", - "low.Mix", - "low.UP", - "Mix.low", - "Mix.Mix", - "Mix.UP", - "UP.low", - "UP.Mix", - "UP.UP", - ".dot", - ".dot.dot", - "A b c . txt", - " Leading space and no extension", - "Trailing dots and space . . .", - "Long extension.extension", - "Space after dot. txt", - "Dot.dot.test.txt", - "Dot.dot.test.seq.txt", - "LOW.LOW", - "MIX.MIX", - "Invalid character *.test" -}; -//------------------------------------------------------------------------------ -bool checkName(char first, size_t len) { - size_t i; - if (len < 5 || len > sizeof(name)) { - return false; - } - if ( name[0] != first) { - return false; - } - for (i = 1; i < (len - 4); i++) { - if (name[i] != ('0' + (i + 1) %10)) { - return false; - } - } - char* p = ".txt"; - while (*p) { - if (name[i++] != *p++) { - return false; - } - } - return name[i] == 0; -} -//------------------------------------------------------------------------------ -void makeName(char first, size_t len) { - size_t i; - if (len > sizeof(name)) { - len = 255; - } - if (len < 5) { - len = 5; - } - name[0] = first; - for (i = 1; i < (len - 4); i++) { - name[i] = '0' + (i + 1) %10; - } - char* p = ".txt"; - while (*p) name[i++] = *p++; - name[i] = 0; -} -//------------------------------------------------------------------------------ -// test open, remove, getName, and ls. -void basicTest() { - size_t i; - size_t n = sd.vol()->fatType() == 32 ? 255 : 99; - uint16_t index; - uint16_t maxIndex = 0; - - makeName('Z', 256); - if (!file.open(name, O_RDWR | O_CREAT)) { - Serial.println(F("255 limit OK")); - } else { - sd.errorHalt(F("255 limit")); - } - for (i = 5; i <= n; i++) { - makeName('A', i); - - if (!file.open(name, O_RDWR | O_CREAT)) { - sd.errorHalt(F("open A")); - } - file.println(name); - Serial.print(i); - Serial.write(' '); - Serial.print(file.dirIndex()); - Serial.write(' '); - Serial.print(file.fileSize()); - Serial.println(F(" open A")); - if (file.fileSize() != (i + 2)) { - sd.errorHalt(F("file size A")); - } - if (file.dirIndex() >= maxIndex) { - maxIndex = file.dirIndex(); - } else { - Serial.print(maxIndex); Serial.print(',');Serial.println(file.dirIndex()); - sd.errorHalt(F("dirIndex")); - } - file.close(); - if (!file.open(sd.vwd(), maxIndex, O_READ)) { - sd.errorHalt(F("open by index")); - } - memset(name, 0, sizeof(name)); - if (!file.getName(name, sizeof(name))) { - sd.errorHalt(F("getName")); - } - if (!checkName('A', i)) { - Serial.println(name); - sd.errorHalt(F("checkName")); - } - file.close(); - } - for (i = n; i >= 5; i -= 2) { - makeName('A', i); - Serial.print(i); - Serial.println(F( " rm A")); - if (!sd.remove(name)) { - sd.errorHalt(F("remove A")); - } - } - for (i = n; i >= 5; i -= 2) { - makeName('B', i); - if (!file.open(name, O_RDWR | O_CREAT)) { - sd.errorHalt(F("open B")); - } - file.println(name); - Serial.print(i); - Serial.write(' '); - Serial.print(file.dirIndex()); - Serial.write(' '); - Serial.print(file.fileSize()); - Serial.println(F(" open B")); - if (file.fileSize() != (i + 2)) { - sd.errorHalt(F("file size B")); - } - if (file.dirIndex() > maxIndex) { - sd.errorHalt(F("maxIndex")); - } - file.close(); - } - Serial.println(F("----- ls ------")); - sd.ls(); - for (i = 5; i <= n; i++) { - char fc = i & 1 ? 'B' : 'A'; - makeName(fc, i); - Serial.print(i); - Serial.print(F(" rm ")); - Serial.println(fc); - if (!sd.remove(name)) { - sd.errorHalt(F("remove A/B")); - } - } - if (file.openNext(sd.vwd())) { - sd.errorHalt(F("remove all")); - } - Serial.println(); - Serial.println(F("basicTest done")); -} -//------------------------------------------------------------------------------ -void nameTest() { - Serial.println(); - uint8_t n = sizeof(testName)/sizeof(char*); - for (uint8_t i = 0; i < n; i++) { - Serial.print(F("Name: ")); - Serial.write('"'); - Serial.print(testName[i]); - Serial.println('"'); - if(!file.open(testName[i], O_CREAT | O_RDWR)) { - Serial.println(F("Open failed")); - } else { - file.println(testName[i]); - if (!file.getName(name, sizeof(name))) { - sd.errorHalt(F("getFilemame")); - } - file.println(name); - Serial.print(F("LFN: ")); - Serial.write('"'); - Serial.print(name); - Serial.println('"'); - Serial.print(F("SFN: ")); - Serial.write('"'); - file.printSFN(&Serial); - Serial.println('"'); - Serial.print(F("Index: ")); - if (file.dirIndex() < 10) { - Serial.write(' '); - } - Serial.println(file.dirIndex()); - file.close(); - } - Serial.println(); - } - Serial.println(F("----- ls ------")); - sd.ls(); - Serial.println(); - Serial.println(F("nameTest done")); -} -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while(!Serial); - Serial.print(F("\r\nFreeRam: ")); - Serial.println(FreeRam()); - Serial.println(F("Type any character to start.")); - while (Serial.read() < 0) {} - if (!sd.begin(SD_CS_PIN)) sd.initErrorHalt(); - if (file.openNext(sd.vwd())) { - file.close(); - delay(100); - while (Serial.read() >= 0) {} - Serial.print(F("Type 'W' to wipe the card: ")); - int c; - while ((c = Serial.read()) < 0) {} - if (c != 'W') { - sd.errorHalt(F("Invalid")); - } - Serial.println((char)c); - if (!sd.wipe(&Serial) || !sd.begin(SD_CS_PIN)) { - sd.errorHalt(F("wipe failed")); - } - } - basicTest(); - nameTest(); -} -//------------------------------------------------------------------------------ -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/SdFatTestSuite/examples/lfnTestCout/lfnTestCout.ino b/libraries/SdFat/SdFatTestSuite/examples/lfnTestCout/lfnTestCout.ino deleted file mode 100644 index 79fd223..0000000 --- a/libraries/SdFat/SdFatTestSuite/examples/lfnTestCout/lfnTestCout.ino +++ /dev/null @@ -1,219 +0,0 @@ -#include -#include -#include -const uint8_t SD_CS_PIN = SS; -SdFat sd; -SdFile file; -char name[260]; - -// Serial output stream -ArduinoOutStream cout(Serial); - -// Serial in buffer. -char cinBuf[10]; - -// Serial input stream -ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); -//------------------------------------------------------------------------------ -char* testName[] = { - "low.low", - "low.Mix", - "low.UP", - "Mix.low", - "Mix.Mix", - "Mix.UP", - "UP.low", - "UP.Mix", - "UP.UP", - ".dot", - ".dot.dot", - "A b c . txt", - " Leading space and no extension", - "Trailing dots and space . . .", - "Long extension.extension", - "Space after dot. txt", - "Dot.dot.test.txt", - "Dot.dot.test.seq.txt", - "LOW.LOW", - "MIX.MIX", - "Invalid character *.test" -}; -//------------------------------------------------------------------------------ -bool checkName(char first, size_t len) { - size_t i; - if (len < 5 || len > sizeof(name)) { - return false; - } - if ( name[0] != first) { - return false; - } - for (i = 1; i < (len - 4); i++) { - if (name[i] != ('0' + (i + 1) %10)) { - return false; - } - } - char* p = ".txt"; - while (*p) { - if (name[i++] != *p++) { - return false; - } - } - return name[i] == 0; -} -//------------------------------------------------------------------------------ -void makeName(char first, size_t len) { - size_t i; - if (len > sizeof(name)) { - len = 255; - } - if (len < 5) { - len = 5; - } - name[0] = first; - for (i = 1; i < (len - 4); i++) { - name[i] = '0' + (i + 1) %10; - } - char* p = ".txt"; - while (*p) name[i++] = *p++; - name[i] = 0; -} -//------------------------------------------------------------------------------ -// test open, remove, getName, and ls. -void basicTest() { - size_t i; - size_t n = sd.vol()->fatType() == 32 ? 255 : 99; - uint16_t index; - uint16_t maxIndex = 0; - - makeName('Z', 256); - if (!file.open(name, O_RDWR | O_CREAT)) { - cout << F("255 limit OK") << endl; - } else { - sd.errorHalt(F("255 limit")); - } - for (i = 5; i <= n; i++) { - makeName('A', i); - - if (!file.open(name, O_RDWR | O_CREAT)) { - sd.errorHalt(F("open A")); - } - file.println(name); - cout << setw(3) << i << setw(5) << file.dirIndex() << F(" open A") << endl; - - if (file.fileSize() != (i + 2)) { - sd.errorHalt(F("file size A")); - } - if (file.dirIndex() >= maxIndex) { - maxIndex = file.dirIndex(); - } else { - sd.errorHalt(F("dirIndex")); - } - file.close(); - if (!file.open(sd.vwd(), maxIndex, O_READ)) { - sd.errorHalt(F("open by index")); - } - memset(name, 0, sizeof(name)); - if (!file.getName(name, sizeof(name))) { - sd.errorHalt(F("getName")); - } - if (!checkName('A', i)) { - cout << name << endl; - sd.errorHalt(F("checkName")); - } - file.close(); - } - for (i = n; i >= 5; i -= 2) { - makeName('A', i); - cout << setw(3) << i << F( " rm A") << endl; - if (!sd.remove(name)) { - sd.errorHalt(F("remove A")); - } - } - for (i = n; i >= 5; i -= 2) { - makeName('B', i); - if (!file.open(name, O_RDWR | O_CREAT)) { - sd.errorHalt(F("open B")); - } - file.println(name); - - cout << setw(3) << i << setw(5) << file.dirIndex() << F(" open B") << endl; - - if (file.fileSize() != (i + 2)) { - sd.errorHalt(F("file size B")); - } - if (file.dirIndex() > maxIndex) { - sd.errorHalt(F("maxIndex")); - } - file.close(); - } - cout << endl << F("----- ls ------") << endl; - sd.ls(); - for (i = 5; i <= n; i++) { - char fc = i & 1 ? 'B' : 'A'; - makeName(fc, i); - cout << setw(3) << i << F(" rm ") << fc << endl; - if (!sd.remove(name)) { - sd.errorHalt(F("remove A/B")); - } - } - if (file.openNext(sd.vwd())) { - sd.errorHalt(F("remove all")); - } - cout << endl << F("basicTest done") << endl; -} -//------------------------------------------------------------------------------ -void nameTest() { - cout << endl; - uint8_t n = sizeof(testName)/sizeof(char*); - for (uint8_t i = 0; i < n; i++) { - cout << F("Name: \"") << testName[i] << '"' << endl; - if(!file.open(testName[i], O_CREAT | O_RDWR)) { - cout < -#include -#include -//------------------------------------------------------------------------------ -void ostreamBool() { - char buf[40]; - obufstream ob(buf, sizeof(buf)); - bool f = false; - bool t = true; - ob << t << ',' << f << ',' << setw(2) << t << ',' << left << setw(2) << f; - testVerifyStr(buf, "1,0, 1,0 "); - - ob.init(buf, sizeof(buf)); - ob << boolalpha << t << ',' << f << ',' << setw(5) << t; - ob << ',' << right << setw(6) << f; - testVerifyStr(buf, "true,false,true , false"); -} -//------------------------------------------------------------------------------ -void ostreamChar() { - char buf[40]; - obufstream ob(buf, sizeof(buf)); - char c = 'c'; - signed char sc = 's'; - unsigned char uc = 'u'; - ob <<'l' << c << sc << uc; - ob.put('p'); - testVerifyStr(buf, "lcsup"); - - ob.init(buf, sizeof(buf)); - ob << 's' << setw(2) << 'r' << 'n' << left << setw(2) << 'l'; - ob << 'm' << right << setw(2) << 'e'; - testVerifyStr(buf, "s rnl m e"); - - ob.init(buf, sizeof(buf)); - ob << setfill('f') << setw(5) << 'r'; - testVerifyStr(buf, "ffffr"); -} -//------------------------------------------------------------------------------ -void ostreamFloat() { - char buf[50]; - obufstream ob(buf, sizeof(buf)); - float f = 9.87654; - double d = -123.4567; - ob << f <<','; - ob << internal << setw(10) << d << ','; - ob << setfill('0') << setw(10) << d; - testVerifyStr(buf, "9.88,- 123.46,-000123.46"); - - ob.init(buf, sizeof(buf)); - ob << setw(10) << left << d << ',' << showpos << -d << ','; - ob << setprecision(0) << d; - testVerifyStr(buf, "-123.46000,+123.46,-123"); - - ob.init(buf, sizeof(buf)); - ob << showpoint << d << noshowpoint << ',' << d << ','; - ob << setprecision(4) << f << ',' << setprecision(2) << noshowpos << f; - testVerifyStr(buf, "-123.,-123,+9.8765,9.88"); -} -//------------------------------------------------------------------------------ -void ostreamNumber() { - char buf[50]; - obufstream ob(buf, sizeof(buf)); - - short s = 1; - short signed ss = 2; - short unsigned su = 3; - int i = 4; - int signed is = 5; - int unsigned iu = 6; - long l = 7; - long signed ls = 8; - long unsigned lu = 9; - - - ob << s << ss << su << i << is << iu << l <. - */ -#include -#include "SdFat.h" -#include "SdFatUtil.h" -//------------------------------------------------------------------------------ -#ifdef __arm__ -extern "C" char* sbrk(int incr); -int SdFatUtil::FreeRam() { - char top; - return &top - reinterpret_cast(sbrk(0)); -} -#else // __arm__ -extern char *__brkval; -extern char __bss_end; -/** Amount of free RAM - * \return The number of free bytes. - */ -int SdFatUtil::FreeRam() { - char top; - return __brkval ? &top - __brkval : &top - &__bss_end; -} -#endif // __arm -//------------------------------------------------------------------------------ -void SdFatUtil::print_P(Print* pr, PGM_P str) { - for (uint8_t c; (c = pgm_read_byte(str)); str++) { - pr->write(c); - } -} -//------------------------------------------------------------------------------ -void SdFatUtil::println_P(Print* pr, PGM_P str) { - print_P(pr, str); - pr->println(); -} diff --git a/libraries/SdFat/SdFatUtil.h b/libraries/SdFat/SdFatUtil.h deleted file mode 100644 index 1193218..0000000 --- a/libraries/SdFat/SdFatUtil.h +++ /dev/null @@ -1,67 +0,0 @@ -/* 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 SdFatUtil_h -#define SdFatUtil_h -/** - * \file - * \brief Useful utility functions. - */ -#include "SdFat.h" -/** 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.*/ -#define PgmPrintln(x) SerialPrintln_P(PSTR(x)) - -namespace SdFatUtil { - /** Amount of free RAM - * \return The number of free bytes. - */ - int FreeRam(); - /** %Print a string in flash memory. - * - * \param[in] pr Print object for output. - * \param[in] str Pointer to string stored in flash memory. - */ - void print_P(Print* pr, PGM_P str); - /** %Print a string in flash memory followed by a CR/LF. - * - * \param[in] pr Print object for output. - * \param[in] str Pointer to string stored in flash memory. - */ - void println_P(Print* pr, PGM_P str); - //---------------------------------------------------------------------------- - /** %Print a string in flash memory to Serial. - * - * \param[in] str Pointer to string stored in flash memory. - */ - inline void SerialPrint_P(PGM_P str) { - print_P(&Serial, str); - } - //---------------------------------------------------------------------------- - /** %Print a string in flash memory to Serial followed by a CR/LF. - * - * \param[in] str Pointer to string stored in flash memory. - */ - inline void SerialPrintln_P(PGM_P str) { - println_P(&Serial, str); - } -} // namespace SdFatUtil -using namespace SdFatUtil; // NOLINT -#endif // #define SdFatUtil_h diff --git a/libraries/SdFat/SdFatmainpage.h b/libraries/SdFat/SdFatmainpage.h deleted file mode 100644 index b758f33..0000000 --- a/libraries/SdFat/SdFatmainpage.h +++ /dev/null @@ -1,392 +0,0 @@ -/* 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, 2015 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 supports Long %File Names or short 8.3 names. -Edit the SdFatConfig.h file to select short or long file names. - -The main classes in %SdFat are SdFat, SdFatSoftSpi, SdFatLibSpi, -SdBaseFile, SdFile, File, StdioStream, \ref fstream, \ref ifstream, -and \ref ofstream. - -The SdFat, SdFatLibSpi, and SdFatSoftSpi classes maintain a FAT volume, -a current working directory, and simplifies initialization of other classes. -The SdFat class uses a fast custom hardware SPI implementation. The -SdFatLibSpi class uses the standard Arduino SPI library. The SdFatSoftSpi -class uses software SPI. - -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 ifstream, \ref ofstream, \ref istream, and \ref ostream -follow the C++ \ref iostream standard when possible. - -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. - -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 folder. - -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 USE_LONG_FILE_NAMES nonzero to enable Long %File Names. By default, -Long %File Names are enabled. For the leanest fastest library disable -Long %File Names. Long %File names require extra flash but no extra RAM. -Opening Long %File Names can be slower than opening Short %File Names. -Data read and write performance is not changed by the type of %File Name. - -Set SD_SPI_CONFIGURATION to enable various SPI options. The SdFatSoftSpi -and SdFatLibSpi classes can be enabled. SdFatLibSpi uses the standard -Arduino SPI library and SdFatSoftSpi uses software SPI. - -To enable SD card CRC checking set USE_SD_CRC nonzero. - -Set FAT12_SUPPORT nonzero to enable use of FAT12 volumes. -FAT12 has not been well tested and requires additional flash. - -Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature -of the standard Arduino SPI library. You must include SPI.h in your -programs when ENABLE_SPI_TRANSACTION is nonzero. - -Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during -SD card busy waits. - -\section SDPath Paths and Working Directories - -Relative paths in SdFat are resolved in a manner similar to Windows. - -Each instance of SdFat has a current directory. In SdFat this directory -is called the volume working directory, vwd. Initially this directory is -the root directory for the volume. - -The volume working directory is changed by calling SdFat::chdir(path). - -The call sd.chdir("/2014") will change the volume working directory -for sd to "/2014", assuming "/2014" exists. - -Relative paths for SdFat member functions are resolved by starting at -the volume working directory. - -For example, the call sd.mkdir("April") will create the directory -"/2014/April" assuming the volume working directory is "/2014". - -SdFat has a current working directory, cwd, that is used to resolve paths -for file.open() calls. - -For a single SD card the current working directory is always the volume -working directory for that card. - -For multiple SD cards the current working directory is set to the volume -working directory of a card by calling the SdFat::chvol() member function. -The chvol() call is like the Windows \: command. - -The call sd2.chvol() will set the current working directory to the volume -working directory for sd2. - -If the volume working directory for sd2 is "/music" the call - -file.open("BigBand.wav", O_READ); - -will then open "/music/BigBand.wav" on sd2. - -The following functions are used to change or get current directories. -See the html documentation for more information. -@code -bool SdFat::chdir(bool set_cwd = false); -bool SdFat::chdir(const char* path, bool set_cwd = false); -void SdFat::chvol(); -SdBaseFile* SdFat::vwd(); -static SdBaseFile* SdBaseFile::cwd(); -@endcode - -\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. - -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. - -\section comment Bugs and Comments - -If you wish to report bugs or have comments, send email to -fat16lib@sbcglobal.net. If possible, include a simple program that illustrates -the bug or problem. - -\section Trouble Troubleshooting - -The two example programs QuickStart, and SdInfo are useful for troubleshooting. - -A message like this from SdInfo with erorCode 0X1 indicates the SD card -is not seen by SdFat. This is often caused by a wiring error and reformatting -the card will not solve the problem. -
-cardBegin failed
-SD errorCode: 0X1
-SD errorData: 0XFF
-
-Here is a similar message from QuickStart: -
-SD initialization failed.
-Do not reformat the card!
-Is the card correctly inserted?
-Is chipSelect set to the correct value?
-Does another SPI device need to be disabled?
-Is there a wiring/soldering problem?
-
-errorCode: 0x1, errorData: 0xff
-
-Here is a message from QuickStart that indicates a formatting problem: -
-Card successfully initialized.
-Can't find a valid FAT16/FAT32 partition.
-Try reformatting the card.  For best results use
-the SdFormatter program in SdFat/examples or download
-and use SDFormatter from www.sdcard.org/downloads.
-
- -The best source of recent information and help is the Arduino forum. - -http://arduino.cc/forum/ - -Also search the Adafruit forum. - -http://forums.adafruit.com/ - -If you are using a Teensy try. - -http://forum.pjrc.com/forum.php - -\section SdFatClass SdFat Usage - -SdFat supports Long File Names. Long names in SdFat are limited to 7-bit -ASCII characters in the range 0X20 - 0XFE The following are reserved characters: -
    -
  • < (less than) -
  • > (greater than) -
  • : (colon) -
  • " (double quote) -
  • / (forward slash) -
  • \ (backslash) -
  • | (vertical bar or pipe) -
  • ? (question mark) -
  • * (asterisk) -
-%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. Files that have a base-name where all characters have the -same case and an extension where all characters have the same case will -display properly. Examples this type name are UPPER.low, lower.TXT, -UPPER.TXT, and lower.txt. - -An application which writes to a file using print(), println() or -\link SdFile::write write() \endlink must close the file or call -\link SdFile::sync() sync() \endlink at the appropriate time to -force data and directory information to be written to the SD Card. - -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 program, SdFormatter.ino, is included in the -%SdFat/examples/SdFormatter directory. This program 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. - -LongFileName - Example use of openNext, printName, and open by index. - -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 program 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 program will format an SD or SDHC card. - -SoftwareSpi - Simple demonstration of the SdFatSoftSpi template class. - -SdInfo - Initialize an SD card and analyze its structure for trouble shooting. - -StdioBench - Demo and test of stdio style stream. - -StreamParseInt - Demo of the SD.h API and the File class parseInt() function. - -ThreeCards - Demonstrate simultaneous use of SdFat, SdFatLibSpi, SdFatSoftSpi. - -Timestamp - Sets file create, modify, and access timestamps. - -TwoCards - Example using two SD cards. - */ diff --git a/libraries/SdFat/SdInfo.h b/libraries/SdFat/SdInfo.h deleted file mode 100644 index d502c2f..0000000 --- a/libraries/SdFat/SdInfo.h +++ /dev/null @@ -1,381 +0,0 @@ -/* Arduino SdSpiCard Library - * Copyright (C) 2012 by William Greiman - * - * This file is part of the Arduino SdSpiCard 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 SdSpiCard Library. If not, see - * . - */ -#ifndef SdInfo_h -#define SdInfo_h -#include -// Based on the document: -// -// SD Specifications -// Part 1 -// Physical Layer -// Simplified Specification -// Version 3.01 -// May 18, 2010 -// -// http://www.sdcard.org/developers/tech/sdcard/pls/simplified_specs -//------------------------------------------------------------------------------ -// 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 (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; -/** card returned an error response for CMD18 (read multiple block) */ -uint8_t const SD_CARD_ERROR_CMD18 = 0X5; -/** card returned an error response for CMD24 (write block) */ -uint8_t const SD_CARD_ERROR_CMD24 = 0X6; -/** WRITE_MULTIPLE_BLOCKS command failed */ -uint8_t const SD_CARD_ERROR_CMD25 = 0X7; -/** card returned an error response for CMD58 (read OCR) */ -uint8_t const SD_CARD_ERROR_CMD58 = 0X8; -/** SET_WR_BLK_ERASE_COUNT failed */ -uint8_t const SD_CARD_ERROR_ACMD23 = 0X9; -/** ACMD41 initialization process timeout */ -uint8_t const SD_CARD_ERROR_ACMD41 = 0XA; -/** card returned a bad CSR version field */ -uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB; -/** erase block group command failed */ -uint8_t const SD_CARD_ERROR_ERASE = 0XC; -/** card not capable of single block erase */ -uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD; -/** Erase sequence timed out */ -uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE; -/** card returned an error token instead of read data */ -uint8_t const SD_CARD_ERROR_READ = 0XF; -/** read CID or CSD failed */ -uint8_t const SD_CARD_ERROR_READ_REG = 0X10; -/** timeout while waiting for start of read data */ -uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11; -/** card did not accept STOP_TRAN_TOKEN */ -uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12; -/** card returned an error token as a response to a write operation */ -uint8_t const SD_CARD_ERROR_WRITE = 0X13; -/** attempt to write protected block zero */ -uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14; // REMOVE - not used -/** card did not go ready for a multiple block write */ -uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15; -/** card returned an error to a CMD13 status check after a write */ -uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16; -/** timeout occurred during write programming */ -uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17; -/** incorrect rate selected */ -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 */ -uint8_t const SD_CARD_TYPE_SD1 = 1; -/** Standard capacity V2 SD card */ -uint8_t const SD_CARD_TYPE_SD2 = 2; -/** High Capacity SD card */ -uint8_t const SD_CARD_TYPE_SDHC = 3; -//------------------------------------------------------------------------------ -// 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; -/** SEND_IF_COND - verify SD Memory Card interface operating condition.*/ -uint8_t const CMD8 = 0X08; -/** SEND_CSD - read the Card Specific Data (CSD register) */ -uint8_t const CMD9 = 0X09; -/** SEND_CID - read the card identification information (CID register) */ -uint8_t const CMD10 = 0X0A; -/** STOP_TRANSMISSION - end multiple block read sequence */ -uint8_t const CMD12 = 0X0C; -/** SEND_STATUS - read the card status register */ -uint8_t const CMD13 = 0X0D; -/** READ_SINGLE_BLOCK - read a single data block from the card */ -uint8_t const CMD17 = 0X11; -/** READ_MULTIPLE_BLOCK - read a multiple data blocks from the card */ -uint8_t const CMD18 = 0X12; -/** WRITE_BLOCK - write a single data block to the card */ -uint8_t const CMD24 = 0X18; -/** WRITE_MULTIPLE_BLOCK - write blocks of data until a STOP_TRANSMISSION */ -uint8_t const CMD25 = 0X19; -/** ERASE_WR_BLK_START - sets the address of the first block to be erased */ -uint8_t const CMD32 = 0X20; -/** ERASE_WR_BLK_END - sets the address of the last block of the continuous - range to be erased*/ -uint8_t const CMD33 = 0X21; -/** ERASE - erase all previously selected blocks */ -uint8_t const CMD38 = 0X26; -/** APP_CMD - escape for application specific command */ -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; -/** SD_SEND_OP_COMD - Sends host capacity support information and - activates the card's initialization process */ -uint8_t const ACMD41 = 0X29; -//============================================================================== -/** status for card in the ready state */ -uint8_t const R1_READY_STATE = 0X00; -/** status for card in the idle state */ -uint8_t const R1_IDLE_STATE = 0X01; -/** status bit for illegal command */ -uint8_t const R1_ILLEGAL_COMMAND = 0X04; -/** start data token for read or write single block*/ -uint8_t const DATA_START_BLOCK = 0XFE; -/** stop token for write multiple blocks*/ -uint8_t const STOP_TRAN_TOKEN = 0XFD; -/** start data token for write multiple blocks*/ -uint8_t const WRITE_MULTIPLE_TOKEN = 0XFC; -/** mask for data response tokens after a write block operation */ -uint8_t const DATA_RES_MASK = 0X1F; -/** write data accepted token */ -uint8_t const DATA_RES_ACCEPTED = 0X05; -//============================================================================== -/** - * \class CID - * \brief Card IDentification (CID) register. - */ -typedef struct CID { - // byte 0 - /** Manufacturer ID */ - unsigned char mid; - // byte 1-2 - /** OEM/Application ID */ - char oid[2]; - // byte 3-7 - /** Product name */ - char pnm[5]; - // byte 8 - /** Product revision least significant digit */ - unsigned char prv_m : 4; - /** Product revision most significant digit */ - unsigned char prv_n : 4; - // byte 9-12 - /** Product serial number */ - uint32_t psn; - // byte 13 - /** Manufacturing date year low digit */ - unsigned char mdt_year_high : 4; - /** not used */ - unsigned char reserved : 4; - // byte 14 - /** Manufacturing date month */ - unsigned char mdt_month : 4; - /** Manufacturing date year low digit */ - unsigned char mdt_year_low : 4; - // byte 15 - /** not used always 1 */ - unsigned char always1 : 1; - /** CRC7 checksum */ - unsigned char crc : 7; -} __attribute__((packed)) cid_t; -//============================================================================== -/** - * \class CSDV1 - * \brief CSD register for version 1.00 cards . - */ -typedef struct CSDV1 { - // byte 0 - unsigned char reserved1 : 6; - unsigned char csd_ver : 2; - // byte 1 - unsigned char taac; - // byte 2 - unsigned char nsac; - // byte 3 - unsigned char tran_speed; - // byte 4 - unsigned char ccc_high; - // byte 5 - unsigned char read_bl_len : 4; - unsigned char ccc_low : 4; - // byte 6 - unsigned char c_size_high : 2; - unsigned char reserved2 : 2; - unsigned char dsr_imp : 1; - unsigned char read_blk_misalign : 1; - unsigned char write_blk_misalign : 1; - unsigned char read_bl_partial : 1; - // byte 7 - unsigned char c_size_mid; - // byte 8 - unsigned char vdd_r_curr_max : 3; - unsigned char vdd_r_curr_min : 3; - unsigned char c_size_low : 2; - // byte 9 - unsigned char c_size_mult_high : 2; - unsigned char vdd_w_cur_max : 3; - unsigned char vdd_w_curr_min : 3; - // byte 10 - unsigned char sector_size_high : 6; - unsigned char erase_blk_en : 1; - unsigned char c_size_mult_low : 1; - // byte 11 - unsigned char wp_grp_size : 7; - unsigned char sector_size_low : 1; - // byte 12 - unsigned char write_bl_len_high : 2; - unsigned char r2w_factor : 3; - unsigned char reserved3 : 2; - unsigned char wp_grp_enable : 1; - // byte 13 - unsigned char reserved4 : 5; - unsigned char write_partial : 1; - unsigned char write_bl_len_low : 2; - // byte 14 - unsigned char reserved5: 2; - unsigned char file_format : 2; - unsigned char tmp_write_protect : 1; - unsigned char perm_write_protect : 1; - unsigned char copy : 1; - /** Indicates the file format on the card */ - unsigned char file_format_grp : 1; - // byte 15 - unsigned char always1 : 1; - unsigned char crc : 7; -} __attribute__((packed)) csd1_t; -//============================================================================== -/** - * \class CSDV2 - * \brief CSD register for version 2.00 cards. - */ -typedef struct CSDV2 { - // byte 0 - unsigned char reserved1 : 6; - unsigned char csd_ver : 2; - // byte 1 - /** fixed to 0X0E */ - unsigned char taac; - // byte 2 - /** fixed to 0 */ - unsigned char nsac; - // byte 3 - unsigned char tran_speed; - // byte 4 - unsigned char ccc_high; - // byte 5 - /** This field is fixed to 9h, which indicates READ_BL_LEN=512 Byte */ - unsigned char read_bl_len : 4; - unsigned char ccc_low : 4; - // byte 6 - /** not used */ - unsigned char reserved2 : 4; - unsigned char dsr_imp : 1; - /** fixed to 0 */ - unsigned char read_blk_misalign : 1; - /** fixed to 0 */ - unsigned char write_blk_misalign : 1; - /** fixed to 0 - no partial read */ - unsigned char read_bl_partial : 1; - // byte 7 - /** 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; - // byte 9 - /** low part of card size */ - unsigned char c_size_low; - // byte 10 - /** sector size is fixed at 64 KB */ - unsigned char sector_size_high : 6; - /** fixed to 1 - erase single is supported */ - unsigned char erase_blk_en : 1; - /** not used */ - unsigned char reserved4 : 1; - // byte 11 - unsigned char wp_grp_size : 7; - /** sector size is fixed at 64 KB */ - unsigned char sector_size_low : 1; - // byte 12 - /** write_bl_len fixed for 512 byte blocks */ - unsigned char write_bl_len_high : 2; - /** fixed value of 2 */ - unsigned char r2w_factor : 3; - /** not used */ - unsigned char reserved5 : 2; - /** fixed value of 0 - no write protect groups */ - unsigned char wp_grp_enable : 1; - // byte 13 - unsigned char reserved6 : 5; - /** always zero - no partial block read*/ - unsigned char write_partial : 1; - /** write_bl_len fixed for 512 byte blocks */ - unsigned char write_bl_len_low : 2; - // byte 14 - unsigned char reserved7: 2; - /** Do not use always 0 */ - unsigned char file_format : 2; - unsigned char tmp_write_protect : 1; - unsigned char perm_write_protect : 1; - unsigned char copy : 1; - /** Do not use always 0 */ - unsigned char file_format_grp : 1; - // byte 15 - /** not used always 1 */ - unsigned char always1 : 1; - /** checksum */ - unsigned char crc : 7; -} __attribute__((packed)) csd2_t; -//============================================================================== -/** - * \class csd_t - * \brief Union of old and new style CSD register. - */ -union csd_t { - csd1_t v1; - csd2_t v2; -}; -#endif // SdInfo_h diff --git a/libraries/SdFat/SdSpi.h b/libraries/SdFat/SdSpi.h deleted file mode 100644 index b87cf1e..0000000 --- a/libraries/SdFat/SdSpi.h +++ /dev/null @@ -1,370 +0,0 @@ -/* 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 "SdFatConfig.h" - -//------------------------------------------------------------------------------ -/** - * \class SdSpiBase - * \brief Virtual SPI class for access to SD and SDHC flash memory cards. - */ -class SdSpiBase { - public: - /** Initialize the SPI bus */ - virtual void begin() = 0; - /** Set SPI options for access to SD/SDHC cards. - * - * \param[in] divisor SCK clock divider relative to the system clock. - */ - virtual void init(uint8_t divisor); - /** Receive a byte. - * - * \return The byte. - */ - virtual uint8_t receive() = 0; - /** 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. - */ - virtual uint8_t receive(uint8_t* buf, size_t n) = 0; - /** Send a byte. - * - * \param[in] data Byte to send - */ - virtual void send(uint8_t data) = 0; - /** Send multiple bytes. - * - * \param[in] buf Buffer for data to be sent. - * \param[in] n Number of bytes to send. - */ - virtual void send(const uint8_t* buf, size_t n) = 0; - /** \return true if hardware SPI else false */ - virtual bool useSpiTransactions() = 0; -}; -//------------------------------------------------------------------------------ -/** - * \class SdSpi - * \brief SPI class for access to SD and SDHC flash memory cards. - */ -#if SD_SPI_CONFIGURATION >= 3 -class SdSpi : public SdSpiBase { -#else // SD_SPI_CONFIGURATION >= 3 -class SdSpi { -#endif // SD_SPI_CONFIGURATION >= 3 - public: - /** Initialize the SPI bus */ - void begin(); - /** Set SPI options for access to SD/SDHC cards. - * - * \param[in] divisor SCK clock divider relative to the system clock. - */ - void init(uint8_t divisor); - /** 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); - /** \return true - uses SPI transactions */ - bool useSpiTransactions() { - return true; - } -}; -//------------------------------------------------------------------------------ -/** - * \class SdSpiLib - * \brief Arduino SPI library class for access to SD and SDHC flash - * memory cards. - */ -#if SD_SPI_CONFIGURATION >= 3 || SD_SPI_CONFIGURATION == 1 || defined(DOXYGEN) -#include -#if SD_SPI_CONFIGURATION >= 3 -class SdSpiLib : public SdSpiBase { -#else // SD_SPI_CONFIGURATION >= 3 -class SdSpiLib { -#endif // SD_SPI_CONFIGURATION >= 3 - public: - /** - * Initialize SPI pins. - */ - void begin() { - SPI.begin(); - } - /** Set SPI options for access to SD/SDHC cards. - * - * \param[in] divisor SCK clock divider relative to the system clock. - */ - void init(uint8_t divisor) { - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); -#ifndef SPI_CLOCK_DIV128 - SPI.setClockDivider(divisor); -#else // SPI_CLOCK_DIV128 - int v; - if (divisor <= 2) { - v = SPI_CLOCK_DIV2; - } else if (divisor <= 4) { - v = SPI_CLOCK_DIV4; - } else if (divisor <= 8) { - v = SPI_CLOCK_DIV8; - } else if (divisor <= 16) { - v = SPI_CLOCK_DIV16; - } else if (divisor <= 32) { - v = SPI_CLOCK_DIV32; - } else if (divisor <= 64) { - v = SPI_CLOCK_DIV64; - } else { - v = SPI_CLOCK_DIV128; - } - SPI.setClockDivider(v); -#endif // SPI_CLOCK_DIV128 - } - /** Receive a byte. - * - * \return The byte. - */ - uint8_t receive() { - return SPI.transfer(0XFF); - } - /** 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) { - for (size_t i = 0; i < n; i++) { - buf[i] = SPI.transfer(0XFF); - } - return 0; - } - /** Send a byte. - * - * \param[in] b Byte to send - */ - void send(uint8_t b) { - SPI.transfer(b); - } - /** 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) { - for (size_t i = 0; i < n; i++) { - SPI.transfer(buf[i]); - } - } - /** \return true - uses SPI transactions */ - bool useSpiTransactions() { - return true; - } -}; -#endif // SD_SPI_CONFIGURATION >= 3 || SD_SPI_CONFIGURATION == 1 -//------------------------------------------------------------------------------ -#if SD_SPI_CONFIGURATION > 1 || defined(DOXYGEN) -#include "utility/SoftSPI.h" -/** - * \class SdSpiSoft - * \brief Software SPI class for access to SD and SDHC flash memory cards. - */ -template -class SdSpiSoft : public SdSpiBase { - public: - /** - * initialize SPI pins - */ - void begin() { - m_spi.begin(); - } - /** - * Initialize hardware SPI - dummy for soft SPI - * \param[in] divisor SCK divisor - ignored. - */ - void init(uint8_t divisor) {} - /** Receive a byte. - * - * \return The byte. - */ - uint8_t receive() { - return m_spi.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) { - for (size_t i = 0; i < n; i++) { - buf[i] = receive(); - } - return 0; - } - /** Send a byte. - * - * \param[in] data Byte to send - */ - void send(uint8_t data) { - m_spi.send(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) { - for (size_t i = 0; i < n; i++) { - send(buf[i]); - } - } - /** \return false - no SPI transactions */ - bool useSpiTransactions() { - return false; - } - - private: - SoftSPI m_spi; -}; -#endif // SD_SPI_CONFIGURATION > 1 || defined(DOXYGEN) -//------------------------------------------------------------------------------ -#if SD_SPI_CONFIGURATION == 0 || SD_SPI_CONFIGURATION >= 3 -/** Default is custom fast SPI. */ -typedef SdSpi SpiDefault_t; -#elif SD_SPI_CONFIGURATION == 1 -/** Default is Arduino library SPI. */ -typedef SdSpiLib SpiDefault_t; -#elif SD_SPI_CONFIGURATION == 2 -/** Default is software SPI. */ -typedef SdSpiSoft -SpiDefault_t; -#else // SD_SPI_CONFIGURATION == 0 || SD_SPI_CONFIGURATION >= 3 -#error bad SD_SPI_CONFIGURATION -#endif // SD_SPI_CONFIGURATION == 0 || SD_SPI_CONFIGURATION >= 3 -//------------------------------------------------------------------------------ -// Use of in-line for AVR to save flash. -#ifdef __AVR__ -//------------------------------------------------------------------------------ -inline void SdSpi::begin() { -#ifdef __AVR_ATmega328P__ - // Save a few bytes for 328 CPU - gcc optimizes single bit '|' to sbi. - PORTB |= 1 << 2; // SS high - DDRB |= 1 << 2; // SS output mode - DDRB |= 1 << 3; // MOSI output mode - DDRB |= 1 << 5; // SCK output mode -#else // __AVR_ATmega328P__ - - // 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(MOSI, OUTPUT); - pinMode(SCK, OUTPUT); -#endif // __AVR_ATmega328P__ -} -//------------------------------------------------------------------------------ -inline void SdSpi::init(uint8_t divisor) { - uint8_t b = 2; - uint8_t r = 0; - - // See AVR processor documentation. - for (; divisor > b && r < 7; b <<= 1, r += r < 5 ? 1 : 2) {} - SPCR = (1 << SPE) | (1 << MSTR) | (r >> 1); - SPSR = r & 1 ? 0 : 1 << SPI2X; -} -//------------------------------------------------------------------------------ -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 // __AVR__ -#endif // SdSpi_h diff --git a/libraries/SdFat/SdSpiCard.cpp b/libraries/SdFat/SdSpiCard.cpp deleted file mode 100644 index 1747484..0000000 --- a/libraries/SdFat/SdSpiCard.cpp +++ /dev/null @@ -1,636 +0,0 @@ -/* Arduino SdSpiCard Library - * Copyright (C) 2012 by William Greiman - * - * This file is part of the Arduino SdSpiCard 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 SdSpiCard Library. If not, see - * . - */ -#include "SdSpiCard.h" -#include "SdSpi.h" -#if ENABLE_SPI_TRANSACTION -#include -#endif // ENABLE_SPI_TRANSACTION -// debug trace macro -#define SD_TRACE(m, b) -// #define SD_TRACE(m, b) Serial.print(m);Serial.println(b); -//============================================================================== -#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; - } - } - return (crc << 1) | 1; -} -//------------------------------------------------------------------------------ -#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; -} -#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__ - } - return crc; -} -#endif // CRC_CCITT -#endif // USE_SD_CRC -//============================================================================== -// SdSpiCard member functions -//------------------------------------------------------------------------------ -bool SdSpiCard::begin(m_spi_t* spi, uint8_t chipSelectPin, uint8_t sckDivisor) { - m_errorCode = m_type = 0; - m_spi = spi; - m_chipSelectPin = chipSelectPin; - // 16-bit init start time allows over a minute - uint16_t t0 = (uint16_t)millis(); - uint32_t arg; - - pinMode(m_chipSelectPin, OUTPUT); - digitalWrite(m_chipSelectPin, HIGH); - spiBegin(); - - // set SCK rate for initialization commands - m_sckDivisor = SPI_SCK_INIT_DIVISOR; - spiInit(m_sckDivisor); - - // 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 (cardCommand(CMD0, 0) != R1_IDLE_STATE) { - if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) { - error(SD_CARD_ERROR_CMD0); - goto fail; - } - } -#if USE_SD_CRC - if (cardCommand(CMD59, 1) != R1_IDLE_STATE) { - error(SD_CARD_ERROR_CMD59); - goto fail; - } -#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 = spiReceive(); - } - 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; - - 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; - } - } - // 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 ((spiReceive() & 0XC0) == 0XC0) { - type(SD_CARD_TYPE_SDHC); - } - // Discard rest of ocr - contains allowed voltage range. - for (uint8_t i = 0; i < 3; i++) { - spiReceive(); - } - } - chipSelectHigh(); - m_sckDivisor = sckDivisor; - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -// send command and return error code. Return zero for OK -uint8_t SdSpiCard::cardCommand(uint8_t cmd, uint32_t arg) { - // select card - chipSelectLow(); - - // 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++) { - spiSend(d[k]); - } -#else // USE_SD_CRC - // send command - spiSend(cmd | 0x40); - - // send argument - for (int8_t i = 3; i >= 0; i--) { - spiSend(pa[i]); - } - - // send CRC - correct for CMD0 with arg zero or CMD8 with arg 0X1AA - spiSend(cmd == CMD0 ? 0X95 : 0X87); -#endif // USE_SD_CRC - - // skip stuff byte for stop read - if (cmd == CMD12) { - spiReceive(); - } - - // wait for response - for (uint8_t i = 0; ((m_status = spiReceive()) & 0X80) && i != 0XFF; i++) { - } - return m_status; -} -//------------------------------------------------------------------------------ -uint32_t SdSpiCard::cardSize() { - csd_t csd; - if (!readCSD(&csd)) { - return 0; - } - if (csd.v1.csd_ver == 0) { - uint8_t read_bl_len = csd.v1.read_bl_len; - uint16_t c_size = (csd.v1.c_size_high << 10) - | (csd.v1.c_size_mid << 2) | csd.v1.c_size_low; - uint8_t c_size_mult = (csd.v1.c_size_mult_high << 1) - | 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 = 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); - return 0; - } -} -//------------------------------------------------------------------------------ -void SdSpiCard::spiYield() { -#if ENABLE_SPI_TRANSACTION && ENABLE_SPI_YIELD && defined(SPI_HAS_TRANSACTION) - chipSelectHigh(); - chipSelectLow(); -#endif // ENABLE_SPI_TRANSACTION && ENABLE_SPI_YIELD && SPI_HAS_TRANSACTION -} -//------------------------------------------------------------------------------ -void SdSpiCard::chipSelectHigh() { - digitalWrite(m_chipSelectPin, HIGH); - // insure MISO goes high impedance - spiSend(0XFF); -#if ENABLE_SPI_TRANSACTION && defined(SPI_HAS_TRANSACTION) - if (useSpiTransactions()) { - SPI.endTransaction(); - } -#endif // ENABLE_SPI_TRANSACTION && defined(SPI_HAS_TRANSACTION) -} -//------------------------------------------------------------------------------ -void SdSpiCard::chipSelectLow() { -#if ENABLE_SPI_TRANSACTION && defined(SPI_HAS_TRANSACTION) - if (useSpiTransactions()) { - SPI.beginTransaction(SPISettings()); - } -#endif // ENABLE_SPI_TRANSACTION && defined(SPI_HAS_TRANSACTION) - spiInit(m_sckDivisor); - digitalWrite(m_chipSelectPin, LOW); -} -//------------------------------------------------------------------------------ -bool SdSpiCard::erase(uint32_t firstBlock, uint32_t lastBlock) { - csd_t csd; - if (!readCSD(&csd)) { - goto fail; - } - // check for single block erase - if (!csd.v1.erase_blk_en) { - // erase size mask - uint8_t m = (csd.v1.sector_size_high << 1) | csd.v1.sector_size_low; - if ((firstBlock & m) != 0 || ((lastBlock + 1) & m) != 0) { - // error card can't erase specified area - error(SD_CARD_ERROR_ERASE_SINGLE_BLOCK); - goto fail; - } - } - if (m_type != SD_CARD_TYPE_SDHC) { - firstBlock <<= 9; - lastBlock <<= 9; - } - if (cardCommand(CMD32, firstBlock) - || cardCommand(CMD33, lastBlock) - || cardCommand(CMD38, 0)) { - error(SD_CARD_ERROR_ERASE); - goto fail; - } - if (!waitNotBusy(SD_ERASE_TIMEOUT)) { - error(SD_CARD_ERROR_ERASE_TIMEOUT); - goto fail; - } - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::eraseSingleBlockEnable() { - csd_t csd; - return readCSD(&csd) ? csd.v1.erase_blk_en : false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::isBusy() { - bool rtn; - chipSelectLow(); - for (uint8_t i = 0; i < 8; i++) { - rtn = spiReceive() != 0XFF; - if (!rtn) { - break; - } - } - chipSelectHigh(); - return rtn; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::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)) { - error(SD_CARD_ERROR_CMD17); - goto fail; - } - return readData(dst, 512); - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::readBlocks(uint32_t block, uint8_t* dst, size_t count) { - if (!readStart(block)) { - return false; - } - for (uint16_t b = 0; b < count; b++, dst += 512) { - if (!readData(dst)) { - return false; - } - } - return readStop(); -} -//------------------------------------------------------------------------------ -bool SdSpiCard::readData(uint8_t *dst) { - chipSelectLow(); - return readData(dst, 512); -} -//------------------------------------------------------------------------------ -bool SdSpiCard::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 ((m_status = spiReceive()) == 0XFF) { - if (((uint16_t)millis() - t0) > SD_READ_TIMEOUT) { - error(SD_CARD_ERROR_READ_TIMEOUT); - goto fail; - } - } - if (m_status != DATA_START_BLOCK) { - error(SD_CARD_ERROR_READ); - goto fail; - } - // transfer data - if ((m_status = spiReceive(dst, count))) { - error(SD_CARD_ERROR_SPI_DMA); - goto fail; - } - -#if USE_SD_CRC - // get crc - crc = (spiReceive() << 8) | spiReceive(); - if (crc != CRC_CCITT(dst, count)) { - error(SD_CARD_ERROR_READ_CRC); - goto fail; - } -#else - // discard crc - spiReceive(); - spiReceive(); -#endif // USE_SD_CRC - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::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] = spiReceive(); - } - - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -/** read CID or CSR register */ -bool SdSpiCard::readRegister(uint8_t cmd, void* buf) { - uint8_t* dst = reinterpret_cast(buf); - if (cardCommand(cmd, 0)) { - error(SD_CARD_ERROR_READ_REG); - goto fail; - } - return readData(dst, 16); - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::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); - goto fail; - } - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::readStop() { - if (cardCommand(CMD12, 0)) { - error(SD_CARD_ERROR_CMD12); - goto fail; - } - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -// wait for card to go not busy -bool SdSpiCard::waitNotBusy(uint16_t timeoutMillis) { - uint16_t t0 = millis(); - while (spiReceive() != 0XFF) { - if (((uint16_t)millis() - t0) >= timeoutMillis) { - goto fail; - } - spiYield(); - } - return true; - -fail: - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::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)) { - error(SD_CARD_ERROR_CMD24); - goto fail; - } - 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) || spiReceive()) { - error(SD_CARD_ERROR_WRITE_PROGRAMMING); - goto fail; - } -#endif // CHECK_PROGRAMMING - - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::writeBlocks(uint32_t block, const uint8_t* src, size_t count) { - if (!writeStart(block, count)) { - return false; - } - for (size_t b = 0; b < count; b++, src += 512) { - if (!writeData(src)) { - return false; - } - } - return writeStop(); -} -//------------------------------------------------------------------------------ -bool SdSpiCard::writeData(const uint8_t* src) { - chipSelectLow(); - // wait for previous write to finish - if (!waitNotBusy(SD_WRITE_TIMEOUT)) { - goto fail; - } - if (!writeData(WRITE_MULTIPLE_TOKEN, src)) { - goto fail; - } - chipSelectHigh(); - return true; - -fail: - error(SD_CARD_ERROR_WRITE_MULTIPLE); - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -// send one block of data for write block or write multiple blocks -bool SdSpiCard::writeData(uint8_t token, const uint8_t* src) { -#if USE_SD_CRC - uint16_t crc = CRC_CCITT(src, 512); -#else // USE_SD_CRC - uint16_t crc = 0XFFFF; -#endif // USE_SD_CRC - spiSend(token); - spiSend(src, 512); - spiSend(crc >> 8); - spiSend(crc & 0XFF); - - m_status = spiReceive(); - if ((m_status & DATA_RES_MASK) != DATA_RES_ACCEPTED) { - error(SD_CARD_ERROR_WRITE); - goto fail; - } - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::writeStart(uint32_t blockNumber, uint32_t eraseCount) { - SD_TRACE("WS", blockNumber); - // send pre-erase count - if (cardAcmd(ACMD23, eraseCount)) { - error(SD_CARD_ERROR_ACMD23); - goto fail; - } - // use address if not SDHC card - if (type() != SD_CARD_TYPE_SDHC) { - blockNumber <<= 9; - } - if (cardCommand(CMD25, blockNumber)) { - error(SD_CARD_ERROR_CMD25); - goto fail; - } - chipSelectHigh(); - return true; - -fail: - chipSelectHigh(); - return false; -} -//------------------------------------------------------------------------------ -bool SdSpiCard::writeStop() { - chipSelectLow(); - if (!waitNotBusy(SD_WRITE_TIMEOUT)) { - goto fail; - } - spiSend(STOP_TRAN_TOKEN); - if (!waitNotBusy(SD_WRITE_TIMEOUT)) { - goto fail; - } - chipSelectHigh(); - return true; - -fail: - error(SD_CARD_ERROR_STOP_TRAN); - chipSelectHigh(); - return false; -} diff --git a/libraries/SdFat/SdSpiCard.h b/libraries/SdFat/SdSpiCard.h deleted file mode 100644 index ab2d0a3..0000000 --- a/libraries/SdFat/SdSpiCard.h +++ /dev/null @@ -1,308 +0,0 @@ -/* Arduino SdSpiCard Library - * Copyright (C) 2012 by William Greiman - * - * This file is part of the Arduino SdSpiCard 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 SdSpiCard Library. If not, see - * . - */ -#ifndef SpiCard_h -#define SpiCard_h -/** - * \file - * \brief SdSpiCard class for V2 SD/SDHC cards - */ -#include -#include -#include -#include -//============================================================================== -/** - * \class SdSpiCard - * \brief Raw access to SD and SDHC flash memory cards via SPI protocol. - */ -class SdSpiCard { - public: - /** typedef for SPI class. */ -#if SD_SPI_CONFIGURATION < 3 - typedef SpiDefault_t m_spi_t; -#else // SD_SPI_CONFIGURATION < 3 - typedef SdSpiBase m_spi_t; -#endif // SD_SPI_CONFIGURATION < 3 - /** Construct an instance of SdSpiCard. */ - SdSpiCard() : m_errorCode(SD_CARD_ERROR_INIT_NOT_CALLED), m_type(0) {} - /** Initialize the SD card. - * \param[in] spi SPI object. - * \param[in] chipSelectPin SD chip select pin. - * \param[in] sckDivisor SPI clock divisor. - * \return true for success else false. - */ - bool begin(m_spi_t* spi, uint8_t chipSelectPin = SS, - uint8_t sckDivisor = SPI_FULL_SPEED); - /** - * Determine the size of an SD flash memory card. - * - * \return The number of 512 byte data blocks in the card - * or zero if an error occurs. - */ - uint32_t cardSize(); - /** Erase a range of blocks. - * - * \param[in] firstBlock The address of the first block in the range. - * \param[in] lastBlock The 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. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool erase(uint32_t firstBlock, uint32_t lastBlock); - /** Determine if card supports single block erase. - * - * \return true is returned if single block erase is supported. - * false is returned if single block erase is not supported. - */ - bool eraseSingleBlockEnable(); - /** - * Set SD error code. - * \param[in] code value for error code. - */ - void error(uint8_t code) { - m_errorCode = code; - } - /** - * \return code for the last error. See SdSpiCard.h for a list of error codes. - */ - int errorCode() const { - return m_errorCode; - } - /** \return error data for last error. */ - int errorData() const { - return m_status; - } - /** - * Check for busy. MISO low indicates the card is busy. - * - * \return true if busy else false. - */ - bool isBusy(); - /** - * Read a 512 byte block from an SD card. - * - * \param[in] block Logical block to be read. - * \param[out] dst Pointer to the location that will receive the data. - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool readBlock(uint32_t block, uint8_t* dst); - /** - * Read multiple 512 byte blocks from an SD card. - * - * \param[in] block Logical block to be read. - * \param[in] count Number of blocks to be read. - * \param[out] dst Pointer to the location that will receive the data. - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool readBlocks(uint32_t block, uint8_t* dst, size_t count); - /** - * Read a card's CID register. The CID contains card identification - * information such as Manufacturer ID, Product name, Product serial - * number and Manufacturing date. - * - * \param[out] cid pointer to area for returned data. - * - * \return true for success or false for failure. - */ - bool readCID(cid_t* cid) { - return readRegister(CMD10, cid); - } - /** - * Read a card's CSD register. The CSD contains Card-Specific Data that - * provides information regarding access to the card's contents. - * - * \param[out] csd pointer to area for returned data. - * - * \return true for success or false for failure. - */ - bool readCSD(csd_t* csd) { - return readRegister(CMD9, csd); - } - /** Read one data block in a multiple block read sequence - * - * \param[out] dst Pointer to the location for the data to be read. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool readData(uint8_t *dst); - /** Read OCR register. - * - * \param[out] ocr Value of OCR register. - * \return true for success else false. - */ - bool readOCR(uint32_t* ocr); - /** Start a read multiple blocks sequence. - * - * \param[in] blockNumber Address 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. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool readStart(uint32_t blockNumber); - /** End a read multiple blocks sequence. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool readStop(); - /** 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 m_type; - } - /** - * Writes a 512 byte block to an SD card. - * - * \param[in] blockNumber Logical block to be written. - * \param[in] src Pointer to the location of the data to be written. - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool writeBlock(uint32_t blockNumber, const uint8_t* src); - /** - * Write multiple 512 byte blocks to an SD card. - * - * \param[in] block Logical block to be written. - * \param[in] count Number of blocks to be written. - * \param[in] src Pointer to the location of the data to be written. - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool writeBlocks(uint32_t block, const uint8_t* src, size_t count); - /** Write one data block in a multiple block write sequence - * \param[in] src Pointer to the location of the data to be written. - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool writeData(const uint8_t* src); - /** Start a write multiple blocks sequence. - * - * \param[in] blockNumber Address of first block in sequence. - * \param[in] eraseCount The number of blocks to be pre-erased. - * - * \note This function is used with writeData() and writeStop() - * for optimized multiple block writes. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool writeStart(uint32_t blockNumber, uint32_t eraseCount); - /** End a write multiple blocks sequence. - * - * \return The value true is returned for success and - * the value false is returned for failure. - */ - bool writeStop(); - - private: - // private functions - uint8_t cardAcmd(uint8_t cmd, uint32_t arg) { - cardCommand(CMD55, 0); - return cardCommand(cmd, arg); - } - uint8_t cardCommand(uint8_t cmd, uint32_t arg); - bool readData(uint8_t* dst, size_t count); - bool readRegister(uint8_t cmd, void* buf); - void chipSelectHigh(); - void chipSelectLow(); - void spiYield(); - void type(uint8_t value) { - m_type = value; - } - bool waitNotBusy(uint16_t timeoutMillis); - bool writeData(uint8_t token, const uint8_t* src); - void spiBegin() { - m_spi->begin(); - } - void spiInit(uint8_t spiDivisor) { - m_spi->init(spiDivisor); - } - uint8_t spiReceive() { - return m_spi->receive(); - } - uint8_t spiReceive(uint8_t* buf, size_t n) { - return m_spi->receive(buf, n); - } - void spiSend(uint8_t data) { - m_spi->send(data); - } - void spiSend(const uint8_t* buf, size_t n) { - m_spi->send(buf, n); - } - bool useSpiTransactions() { - return m_spi->useSpiTransactions(); - } - m_spi_t* m_spi; - uint8_t m_chipSelectPin; - uint8_t m_errorCode; - uint8_t m_sckDivisor; - uint8_t m_status; - uint8_t m_type; -}; -//============================================================================== -/** - * \class Sd2Card - * \brief Raw access to SD and SDHC card using default SPI library. - */ -class Sd2Card : public SdSpiCard { - public: - /** Initialize the SD card. - * \param[in] chipSelectPin SD chip select pin. - * \param[in] sckDivisor SPI clock divisor. - * \return true for success else false. - */ - bool begin(uint8_t chipSelectPin = SS, uint8_t sckDivisor = 2) { - return SdSpiCard::begin(&m_spi, chipSelectPin, sckDivisor); - } - /** Initialize the SD card. Obsolete form. - * \param[in] chipSelectPin SD chip select pin. - * \param[in] sckDivisor SPI clock divisor. - * \return true for success else false. - */ - bool init(uint8_t sckDivisor = 2, uint8_t chipSelectPin = SS) { - return begin(chipSelectPin, sckDivisor); - } - private: - bool begin(m_spi_t* spi, uint8_t chipSelectPin = SS, - uint8_t sckDivisor = SPI_FULL_SPEED) { - return false; - } - SpiDefault_t m_spi; -}; -#endif // SpiCard_h diff --git a/libraries/SdFat/SdSpiSAM3X.cpp b/libraries/SdFat/SdSpiSAM3X.cpp deleted file mode 100644 index 2298009..0000000 --- a/libraries/SdFat/SdSpiSAM3X.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/* 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 "SdSpi.h" -#if defined(__SAM3X8E__) || defined(__SAM3X8H__) -/** 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 // defined(__SAM3X8E__) || defined(__SAM3X8H__) diff --git a/libraries/SdFat/SdSpiSTM32F1.cpp b/libraries/SdFat/SdSpiSTM32F1.cpp deleted file mode 100644 index a36d5a1..0000000 --- a/libraries/SdFat/SdSpiSTM32F1.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* Arduino SdSpi Library - * Copyright (C) 2013 by William Greiman - * - * STM32F1 code for Maple and Maple Mini support, 2015 by Victor Perez - * - * 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 - * . - */ -#if defined(__STM32F1__) -#include "SdSpi.h" -#include -#include -/** Use STM32 DMAC if nonzero */ -#define USE_STM32F1_DMAC 1 -/** Time in ms for DMA receive timeout */ -#define STM32F1_DMA_TIMEOUT 100 -/** DMAC receive channel */ -#define SPI1_DMAC_RX_CH DMA_CH2 -/** DMAC transmit channel */ -#define SPI1_DMAC_TX_CH DMA_CH3 - -volatile bool SPI_DMA_TX_Active = false; -volatile bool SPI_DMA_RX_Active = false; - -/** ISR for DMA TX event. */ -inline void SPI_DMA_TX_Event() { - SPI_DMA_TX_Active = false; - dma_disable(DMA1, SPI_DMAC_TX_CH); -} - -/** ISR for DMA RX event. */ -inline void SPI_DMA_RX_Event() { - SPI_DMA_RX_Active = false; - dma_disable(DMA1, SPI1_DMAC_RX_CH); -} -//------------------------------------------------------------------------------ - -/** Disable DMA Channel. */ -static void dmac_channel_disable(dma_channel ul_num) { - dma_disable(DMA1, ul_num); -} -/** Enable DMA Channel. */ -static void dmac_channel_enable(dma_channel ul_num) { - dma_enable(DMA1, ul_num); -} -//------------------------------------------------------------------------------ -void SdSpi::begin() { - SPI.begin(); -} -//------------------------------------------------------------------------------ -// start RX DMA - -static void spiDmaRX(uint8_t* dst, uint16_t count) { -// spi_rx_dma_enable(SPI1); - if (count < 1) return; - dma_setup_transfer(DMA1, SPI1_DMAC_RX_CH, &SPI1->regs->DR, DMA_SIZE_8BITS, - dst, DMA_SIZE_8BITS, (DMA_MINC_MODE | DMA_TRNS_CMPLT)); - dma_set_num_transfers(DMA1, SPI1_DMAC_RX_CH, count); // 2 bytes per pixel - SPI_DMA_RX_Active = true; - dma_enable(DMA1, SPI1_DMAC_RX_CH); -} -//------------------------------------------------------------------------------ -// start TX DMA -static void spiDmaTX(const uint8_t* src, uint16_t count) { - if (count < 1) return; - static uint8_t ff = 0XFF; - - if (!src) { - src = &ff; - dma_setup_transfer(DMA1, SPI1_DMAC_TX_CH, &SPI1->regs->DR, DMA_SIZE_8BITS, - const_cast(src), DMA_SIZE_8BITS, - (DMA_FROM_MEM | DMA_TRNS_CMPLT)); - } else { - dma_setup_transfer(DMA1, SPI1_DMAC_TX_CH, &SPI1->regs->DR, DMA_SIZE_8BITS, - const_cast(src), DMA_SIZE_8BITS, - (DMA_MINC_MODE | DMA_FROM_MEM | DMA_TRNS_CMPLT)); - } - dma_set_num_transfers(DMA1, SPI1_DMAC_TX_CH, count); // 2 bytes per pixel - SPI_DMA_TX_Active = true; - dma_enable(DMA1, SPI1_DMAC_TX_CH); -} -//------------------------------------------------------------------------------ -// initialize SPI controller STM32F1 -void SdSpi::init(uint8_t sckDivisor) { - if (sckDivisor < SPI_CLOCK_DIV2 || sckDivisor > SPI_CLOCK_DIV256) { - sckDivisor = SPI_CLOCK_DIV2; // may not be needed, testing. - } - SPI.setClockDivider(sckDivisor); - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); - -#if USE_STM32F1_DMAC - dma_init(DMA1); - dma_attach_interrupt(DMA1, SPI1_DMAC_TX_CH, SPI_DMA_TX_Event); - dma_attach_interrupt(DMA1, SPI1_DMAC_RX_CH, SPI_DMA_RX_Event); - spi_tx_dma_enable(SPI1); - spi_rx_dma_enable(SPI1); -#endif // USE_STM32F1_DMAC -} -//------------------------------------------------------------------------------ -// STM32 -static inline uint8_t spiTransfer(uint8_t b) { - return SPI.transfer(b); -} -//------------------------------------------------------------------------------ -// should be valid for STM32 -/** SPI receive a byte */ -uint8_t SdSpi::receive() { - return spiTransfer(0xFF); -} -//------------------------------------------------------------------------------ -/** SPI receive multiple bytes */ -// check and finish. - -uint8_t SdSpi::receive(uint8_t* buf, size_t n) { - int rtn = 0; - -#if USE_STM32F1_DMAC - - spiDmaRX(buf, n); - spiDmaTX(0, n); - - uint32_t m = millis(); - while (SPI_DMA_RX_Active) { - if ((millis() - m) > STM32F1_DMA_TIMEOUT) { - dmac_channel_disable(SPI_DMAC_RX_CH); - dmac_channel_disable(SPI_DMAC_TX_CH); - rtn = 2; - break; - } - } - -#else // USE_STM32F1_DMAC - for (size_t i = 0; i < n; i++) { - buf[i] = SPI.transfer(0xFF); - } -#endif // USE_STM32F1_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) { -#if USE_STM32F1_DMAC - spiDmaTX(buf, n); - while (SPI_DMA_TX_Active) {} - -#else // #if USE_STM32F1_DMAC - SPI.write(buf, n); -#endif // #if USE_STM32F1_DMAC - // leave RX register empty - // while (spi_is_rx_nonempty(SPI1)) - uint8_t b = spi_rx_reg(SPI1); -} -#endif // USE_NATIVE_STM32F1_SPI diff --git a/libraries/SdFat/SdSpiTeensy3.cpp b/libraries/SdFat/SdSpiTeensy3.cpp deleted file mode 100644 index a9fe8b3..0000000 --- a/libraries/SdFat/SdSpiTeensy3.cpp +++ /dev/null @@ -1,301 +0,0 @@ -/* 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 "SdSpi.h" -#if defined(__arm__) && defined(CORE_TEENSY) -// SPI definitions -#include "kinetis.h" -#ifdef KINETISK -// 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 -} -#else // KINETISK -//============================================================================== -// Use standard SPI library if not KINETISK -#include "SPI.h" -/** - * Initialize SPI pins. - */ -void SdSpi::begin() { - SPI.begin(); -} -/** Set SPI options for access to SD/SDHC cards. - * - * \param[in] divisor SCK clock divider relative to the system clock. - */ -void SdSpi::init(uint8_t divisor) { - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); -#ifndef SPI_CLOCK_DIV128 - SPI.setClockDivider(divisor); -#else // SPI_CLOCK_DIV128 - int v; - if (divisor <= 2) { - v = SPI_CLOCK_DIV2; - } else if (divisor <= 4) { - v = SPI_CLOCK_DIV4; - } else if (divisor <= 8) { - v = SPI_CLOCK_DIV8; - } else if (divisor <= 16) { - v = SPI_CLOCK_DIV16; - } else if (divisor <= 32) { - v = SPI_CLOCK_DIV32; - } else if (divisor <= 64) { - v = SPI_CLOCK_DIV64; - } else { - v = SPI_CLOCK_DIV128; - } - SPI.setClockDivider(v); -#endif // SPI_CLOCK_DIV128 -} -/** Receive a byte. - * - * \return The byte. - */ -uint8_t SdSpi::receive() { - return SPI.transfer(0XFF); -} -/** 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 SdSpi::receive(uint8_t* buf, size_t n) { - for (size_t i = 0; i < n; i++) { - buf[i] = SPI.transfer(0XFF); - } - return 0; -} -/** Send a byte. - * - * \param[in] b Byte to send - */ -void SdSpi::send(uint8_t b) { - SPI.transfer(b); -} -/** Send multiple bytes. - * - * \param[in] buf Buffer for data to be sent. - * \param[in] n Number of bytes to send. - */ -void SdSpi::send(const uint8_t* buf , size_t n) { - for (size_t i = 0; i < n; i++) { - SPI.transfer(buf[i]); - } -} -#endif // KINETISK -#endif // defined(__arm__) && defined(CORE_TEENSY) diff --git a/libraries/SdFat/SdVolume.h b/libraries/SdFat/SdVolume.h deleted file mode 100644 index f76db7a..0000000 --- a/libraries/SdFat/SdVolume.h +++ /dev/null @@ -1,71 +0,0 @@ -/* 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 SdVolume_h -#include "SdSpiCard.h" -#include "utility/FatLib.h" -#define SdVolume_h -#ifndef USE_SD_VOLUME -#error SdVolume is deperacated. Remove this line to continue using this class. -#endif // USE_SD_VOLUME -//============================================================================== -/** - * \class SdVolume - * \brief SdVolume Soon to be removed. - */ -class SdVolume : public FatVolume { - public: - /** Initialize a FAT volume. Try partition one first then try super - * floppy format. - * - * \param[in] dev The Sd2Card where the volume is located. - * - * \return true for success else false. - */ - bool init(Sd2Card* dev) { - return init(dev, 1) ? true : init(dev, 0); - } - /** Initialize a FAT volume. - * - * \param[in] dev The Sd2Card where the volume is located. - * \param[in] part the partition to use. Zero for super floppy or 1-4. - * \return true for success else false. - */ - bool init(Sd2Card* dev, uint8_t part) { - m_sdCard = dev; - return FatVolume::init(part); - } - - private: -// friend class FatFile; - bool readBlock(uint32_t block, uint8_t* dst) { - return m_sdCard->readBlock(block, dst); - } - bool writeBlock(uint32_t block, const uint8_t* src) { - return m_sdCard->writeBlock(block, src); - } - bool readBlocks(uint32_t block, uint8_t* dst, size_t n) { - return m_sdCard->readBlocks(block, dst, n); - } - bool writeBlocks(uint32_t block, const uint8_t* src, size_t n) { - return m_sdCard->writeBlocks(block, src, n); - } - Sd2Card* m_sdCard; // Sd2Card object for cache -}; -#endif // SdVolume_h diff --git a/libraries/SdFat/changes.txt b/libraries/SdFat/changes.txt deleted file mode 100644 index 01bb462..0000000 --- a/libraries/SdFat/changes.txt +++ /dev/null @@ -1,439 +0,0 @@ -16 Mar 2015 - -Minimal support for Teensy-LC. - -23 Feb 2015 - -New 1284P software SPI macros. - -01 Feb 2015 - -Code cleanup and re-factor. - -04 Dec 2014 - -Added support for Long File Names. - -14 Nov 2014 - -Replaced the core SdFat code with FatLib, a generic FAT12/FAT16/FAT32 -library. This may result in bugs and backward compatibility problems. - -Added SdFatSoftSpi, software SPI template class. - -Allow simultaneous use of hardware and software SPI with multiple cards. -See the ThreeCard example. - -Added minimal Long File Name support. See the LongFileName example. - -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. - -Error messages and output from programs are now sent to a stdOut Print -stream. - -The default stdOut is a small non-interrupt driven class that outputs 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 stdOut stream with SdFat::stdOut(). - -If USE_SERIAL_FOR_STD_OUT in SdFatConfig.h is nonzero, the Arduino Serial -object will be used as the default for stdOut. - - -05 Dec 2011 - -Changes for Arduino 1.0 - - -17 Sep 2011 - -Changes for Arduino 1.0 beta 4 - -Improved SPI handling - -02 Sep 2011 --------------------------------------------------------------------------------- -Warning: -Several changes are not backward compatible with the previous -version of SdFat. - -The function cwd() was renamed vwd() to allow multiple SD cards. - -The type SdBaseFile was added to the class hierarchy to avoid conflicts with -other Arduino libraries that are derived from the Print class. Directory -files should be declared type SdBaseFile. --------------------------------------------------------------------------------- - -Added support for multiple SD cards. - -Change the name of SdFat::cwd() to SdFat::vwd() since the volume -working directory is not the current working directory with -multiple SD cards. - -Added the static function SdBaseFile::cwd() to return a pointer -to the current working directory. - -Added the TwoCards.pde example to demonstrate use of multiple SD cards. - -Added readCSV.pde example to demonstrate iostream extractors. - -Added bool SdBaseFile::timestamp(SdBaseFile* file) to copy one -file's timestamps to another file. - -Improved messages in the QuickStart.pde example. - -Added maximum latency test to the bench.pde example. - -Rearanged class hierarchy to fix conflicts with Flash.h and other Adruino -libraries. Print is no longer a private parent of file stream classes. - -Added high speed multiple block read functions to Sd2Card. - -Changed include files in SdFatUtil.h - -Removed option to write protect block zero of an SD card. - -Changes for Arduino 1.0. - -02 Jul 2011 - -This is a major update based on previous beta versions. -Read all changes since 10 Oct 2001 - -Simplified examples in extra/examplesV1 - -28 Jun 2011 - -This is a release candidate to replace sdfatlib20101010. - -Initialize SPI bus before every access. - -Improved write multiple block functions for fast data logging. - -SdVolume::cacheClear() returns zero if it fails. - -Documentation changes. - -04 Jun 2011 - -Added SdFatTestSuite and fixed bugs found by test programs. - -Added functions: - -bool SdFat::truncate(const char* path, uint32_t length); - -int16_t SdFile::fgets(char* str, int16_t num, char* delim); - -11 May 2011 - -Added QuickStart sketch and QuickStart.txt file for fast hardware test. - -Added several new examples. - -Version of ls() that can write to any Print object. - -New functions including freeClusterCount(), openNext() rename(). - -14 Apr 2011 - -Total rewrite to add iostreams and SdFat class with current working directory. -Old API maintained for backward compatibility. - - -27 Nov 2010 - - -Added experimental support for FAT12. This can be enabled by setting -FAT12_SUPPORT nonzero in SdFatConfig.h. - -Added an experimental sketch, SdFatFormatter.pde, to format SD cards as -FAT16 and SDHC cards as FAT32. See SdFat/examples/SdFormatter. - -The return type of SdVolume::cacheClear was changed to cache_t*. - -Many internal changes to support FAT12 and formatting SD/SDHC cards. - - -10 Oct 2010 - -Added Mega 2560. - -Fixed rmRfStar() bug. - -Fixed Sanguino NULL definition. - -18 Aug 2010 - -Optimized write() for append at end of file. Up to 50% faster sequential write. - -13 Aug 2010 - -Added the following function to allow the SD chip select pin to be set -at runtime. Warning - if the hardware SS pin is not used as chip select, -the hardware SS pin will be set to output mode by init(). An avr processor -will not function as an SPI master unless SS is set to output mode. - -uint8_t Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin); - -Added more SPI clock rate choices. The above init() function and -uint8_t Sd2Card::init(uint8_t sckRateID) call the new function -uint8_t Sd2Card::setSckRate(uint8_t sckRateID). - -setSckRate() sets the SPI clock rate to F_CPU/pow(2, 1 + sckRateID). -On an 16 MHz cpu this ranges from 8 MHz for sckRateId = 0 to 125 kHz -for sckRateID = 6. This function must be called after the init() call. - -Modified most examples to call card.init(SPI_HALF_SPEED) to avoid SPI bus -errors with breadboards and jumpers. This sets the SPI speed to F_CPU/4. -Defined SPI_FULL_SPEED so init(SPI_FULL_SPEED) sets the SPI speed to F_CPU/2. - -Added the following function to cancel date/time callback. This function -must now be used instead of dateTimeCallback(NULL). - -static void SdFat::dateTimeCallbackCancel(void); - - -The following member functions have been added for users who wish to avoid -calls to functions with non-const references. - -uint8_t SdFile::contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock); -uint8_t SdFile::createContiguous(SdFile* dirFile, - const char* fileName, uint32_t size); -static void SdFile::dateTimeCallback( - void (*dateTime)(uint16_t* date, uint16_t* time)); -uint8_t SdFile::dirEntry(dir_t* dir); -uint8_t SdFile::makeDir(SdFile* dir, const char* dirName); -uint8_t SdFile::open(SdFile* dirFile, const char* fileName, uint8_t oflag); -uint8_t SdFile::open(SdFile* dirFile, const char* fileName); -uint8_t SdFile::open(SdFile* dirFile, uint16_t index, uint8_t oflag); -uint8_t SdFile::openRoot(SdVolume* vol); -int8_t SdFile::readDir(dir_t* dir); -static uint8_t remove(SdFile* dirFile, const char* fileName); -uint8_t SdVolume::init(Sd2Card* dev); -uint8_t SdVolume::init(Sd2Card* dev, uint8_t part); - -The following member functions have been marked as deprecated since they -are now wrappers for the new functions. dateTimeCallback is the only wrapper -with extra overhead. The other wrappers are squeezed out by the complier. -These wrappers will be maintained in the future for backward compatibility. - -uint8_t SdFile::contiguousRange(uint32_t& bgnBlock, uint32_t& endBlock); -uint8_t SdFile::createContiguous(SdFile& dirFile, - const char* fileName, uint32_t size); -static void SdFile::dateTimeCallback( - void (*dateTime)(uint16_t& date, uint16_t& time)); -uint8_t SdFile::dirEntry(dir_t& dir); -uint8_t SdFile::makeDir(SdFile& dir, const char* dirName); -uint8_t SdFile::open(SdFile& dirFile, const char* fileName, uint8_t oflag); -uint8_t SdFile::open(SdFile& dirFile, const char* fileName); -uint8_t SdFile::open(SdFile& dirFile, uint16_t index, uint8_t oflag); -uint8_t SdFile::openRoot(SdVolume& vol); -int8_t SdFile::readDir(dir_t& dir); -static uint8_t remove(SdFile& dirFile, const char* fileName); -uint8_t SdVolume::init(Sd2Card& dev); -uint8_t SdVolume::init(Sd2Card& dev, uint8_t part); - -The deprecated function can be disabled by editing SdFat.h and setting -#define ALLOW_DEPRECATED_FUNCTIONS 0 - -Fixed file modify time for file rewrite. - -Major internal cleanup/reformat based on Google cpplint.py code style. - -New Sd2Card::init() algorithm. - -New SdFatInfo sketch for modified SdReadData() and other internal changes. - -Modified examples to eliminate deprecated functions. - -11 Jun 2010 -Added definitions for Teensy to ArduinoPins.h (Paul Stoffregen) - -Added troubleshooting.txt - - -23 Dec 2009 - -Added Software SPI capability. See Sd2Card.h - -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. - -Added file ArduinoPins.h for pin definitions. - -More error printout in examples. - - -25 Nov 2009 - -Added new functions for SdFile class: - -dateTimeCallback(), dirEntry(), isRoot(), isSubDir, ls(), -makeDir(), printDirName(), printFatDate(), printFatTime(), -printTwoDigits(), rmDir(), and rmRStar(). - -Added new examples to test and illustrate use of new functions. - -Removed sdCard() from SdFile class. - -Fixed several bugs. - - - - -12 Nov 2009 - -Major rewrite of the version of SdFat that was included with -the WaveRP library. - -This is a preview that is being released to obtain comments -from several colleagues and future users. diff --git a/libraries/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino b/libraries/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino deleted file mode 100644 index 1a18228..0000000 --- a/libraries/SdFat/examples/#attic/AnalogLogger/AnalogLogger.ino +++ /dev/null @@ -1,188 +0,0 @@ -// A simple data logger for the Arduino analog pins with optional DS1307 -// uses RTClib from https://github.com/adafruit/RTClib -#include -#include -#include // define FreeRam() - -#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 -#define ECHO_TO_SERIAL 1 // echo data to serial port if nonzero -#define WAIT_TO_START 1 // Wait for serial input in setup() -#define ADC_DELAY 10 // ADC delay for high impedence sensors - -// file system object -SdFat sd; - -// text file for logging -ofstream logfile; - -// Serial print stream -ArduinoOutStream cout(Serial); - -// buffer to format data - makes it eaiser to echo to Serial -char buf[80]; -//------------------------------------------------------------------------------ -#if SENSOR_COUNT > 6 -#error SENSOR_COUNT too large -#endif // SENSOR_COUNT -//------------------------------------------------------------------------------ -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) -//------------------------------------------------------------------------------ -#if USE_DS1307 -// use RTClib from Adafruit -// https://github.com/adafruit/RTClib - -// The Arduino IDE has a bug that causes Wire and RTClib to be loaded even -// if USE_DS1307 is false. - -#error remove this line and uncomment the next two lines. -//#include -//#include -RTC_DS1307 RTC; // define the Real Time Clock object -//------------------------------------------------------------------------------ -// 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()); -} -//------------------------------------------------------------------------------ -// format 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; -} -#endif // USE_DS1307 -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - // F() stores strings in flash to save RAM - cout << endl << F("FreeRam: ") << FreeRam() << endl; - -#if WAIT_TO_START - cout << F("Type any character to start\n"); - while (Serial.read() <= 0) {} - delay(400); // catch Due reset problem - while (Serial.read() >= 0) {} -#endif // WAIT_TO_START - -#if USE_DS1307 - // connect to RTC - Wire.begin(); - if (!RTC.begin()) { - error("RTC failed"); - } - - // set date time callback function - SdFile::dateTimeCallback(dateTime); - DateTime now = RTC.now(); - cout << now << endl; -#endif // USE_DS1307 - - // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with - 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"; - - for (uint8_t i = 0; i < 100; i++) { - name[6] = i/10 + '0'; - name[7] = i%10 + '0'; - if (sd.exists(name)) { - continue; - } - logfile.open(name); - break; - } - if (!logfile.is_open()) { - error("file.open"); - } - - cout << F("Logging to: ") << name << endl; - cout << F("Type any character to stop\n\n"); - - // format header in buffer - obufstream bout(buf, sizeof(buf)); - - bout << F("millis"); - -#if USE_DS1307 - bout << F(",date,time"); -#endif // USE_DS1307 - - for (uint8_t i = 0; i < SENSOR_COUNT; i++) { - bout << F(",sens") << int(i); - } - logfile << buf << endl; - -#if ECHO_TO_SERIAL - cout << buf << endl; -#endif // ECHO_TO_SERIAL -} -//------------------------------------------------------------------------------ -void loop() { - uint32_t m; - - // wait for time to be a multiple of interval - do { - m = millis(); - } while (m % LOG_INTERVAL); - - // use buffer stream to format line - obufstream bout(buf, sizeof(buf)); - - // start with time in millis - bout << m; - -#if USE_DS1307 - DateTime now = RTC.now(); - bout << ',' << now; -#endif // USE_DS1307 - - // read analog pins and format data - for (uint8_t ia = 0; ia < SENSOR_COUNT; ia++) { -#if ADC_DELAY - analogRead(ia); - delay(ADC_DELAY); -#endif // ADC_DELAY - bout << ',' << analogRead(ia); - } - bout << endl; - - // log data and flush to SD - logfile << buf << flush; - - // check for error - if (!logfile) { - error("write data failed"); - } - -#if ECHO_TO_SERIAL - cout << buf; -#endif // ECHO_TO_SERIAL - - // don't log two points in the same millis - if (m == millis()) { - delay(1); - } - - if (!Serial.available()) { - return; - } - logfile.close(); - cout << F("Done!"); - while (1); -} \ No newline at end of file diff --git a/libraries/SdFat/examples/#attic/BaseExtCaseTest/BaseExtCaseTest.ino b/libraries/SdFat/examples/#attic/BaseExtCaseTest/BaseExtCaseTest.ino deleted file mode 100644 index 8dad337..0000000 --- a/libraries/SdFat/examples/#attic/BaseExtCaseTest/BaseExtCaseTest.ino +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Program to test Short File Name character case flags. - */ -#include -#include - -SdFat sd; - -SdFile file; -char* name[] = { - "low.low", "low.Mix", "low.UP", - "Mix.low", "Mix.Mix", "Mix.UP", - "UP.low", "UP.Mix", "UP.UP" -}; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - Serial.println("type any character to start"); - while (Serial.read() < 0) {} - if (!sd.begin()) { - Serial.println("begin failed"); - return; - } - for (uint8_t i = 0; i < 9; i++) { - sd.remove(name[i]); - if (!file.open(name[i], O_RDWR | O_CREAT | O_EXCL)) { - sd.errorHalt(name[i]); - } - file.println(name[i]); - - file.close(); - } - sd.ls(LS_DATE|LS_SIZE); - Serial.println("Done"); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/HelloWorld/HelloWorld.ino b/libraries/SdFat/examples/#attic/HelloWorld/HelloWorld.ino deleted file mode 100644 index 1162f0f..0000000 --- a/libraries/SdFat/examples/#attic/HelloWorld/HelloWorld.ino +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include - -// create a serial output stream -ArduinoOutStream cout(Serial); - -void setup() { - Serial.begin(9600); - - while (!Serial) {} // wait for Leonardo - delay(2000); - - cout << "Hello, World!\n"; -} - -void loop() {} diff --git a/libraries/SdFat/examples/#attic/MiniSerial/MiniSerial.ino b/libraries/SdFat/examples/#attic/MiniSerial/MiniSerial.ino deleted file mode 100644 index f196ace..0000000 --- a/libraries/SdFat/examples/#attic/MiniSerial/MiniSerial.ino +++ /dev/null @@ -1,29 +0,0 @@ -// 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 -#include -#ifdef UDR0 // Must be AVR with serial port zero. -#include - -MinimumSerial MiniSerial; - -void setup() { - MiniSerial.begin(9600); - MiniSerial.println(FreeRam()); -} -void loop() { - int c; - MiniSerial.println(F("Type any Character")); - while ((c = MiniSerial.read()) < 0) {} - MiniSerial.print(F("Read: ")); - MiniSerial.println((char)c); - while (MiniSerial.read() >= 0) {} -} -#else // UDR0 -#error no AVR serial port 0 -#endif // UDR0 \ No newline at end of file diff --git a/libraries/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino b/libraries/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino deleted file mode 100644 index 96f7179..0000000 --- a/libraries/SdFat/examples/#attic/PrintBenchmarkSD/PrintBenchmarkSD.ino +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This program 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) { - } - // F() 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.getWriteError()) { - 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/libraries/SdFat/examples/#attic/SD_Size/SD_Size.ino b/libraries/SdFat/examples/#attic/SD_Size/SD_Size.ino deleted file mode 100644 index 0b0ed4d..0000000 --- a/libraries/SdFat/examples/#attic/SD_Size/SD_Size.ino +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Program to compare size of Arduino SD library with SdFat. - * See SdFatSize.ino for SdFat program. - */ -#include -#include - -File file; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - if (!SD.begin()) { - Serial.println("begin failed"); - return; - } - file = SD.open("TEST_SD.TXT", FILE_WRITE); - - file.println("Hello"); - - file.close(); - Serial.println("Done"); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/SdFatSize/SdFatSize.ino b/libraries/SdFat/examples/#attic/SdFatSize/SdFatSize.ino deleted file mode 100644 index cbaf1be..0000000 --- a/libraries/SdFat/examples/#attic/SdFatSize/SdFatSize.ino +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Program to compare size of SdFat with Arduino SD library. - * See SD_Size.ino for Arduino SD program. - * - */ -#include -#include - -SdFat sd; - -SdFile file; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - if (!sd.begin()) { - Serial.println("begin failed"); - return; - } - file.open("SizeTest.txt", O_RDWR | O_CREAT | O_AT_END); - - file.println("Hello"); - - file.close(); - Serial.println("Done"); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/append/append.ino b/libraries/SdFat/examples/#attic/append/append.ino deleted file mode 100644 index 724b1a1..0000000 --- a/libraries/SdFat/examples/#attic/append/append.ino +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Append Example - * - * This program shows how to use open for append. - * The program will append 100 line each time it opens the file. - * The program will open and close the file 100 times. - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -// create Serial stream -ArduinoOutStream cout(Serial); - -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) -//------------------------------------------------------------------------------ -void setup() { - // filename for this example - char name[] = "append.txt"; - - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - // F() stores strings in flash to save RAM - cout << endl << F("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(); - } - - cout << F("Appending to: ") << name; - - for (uint8_t i = 0; i < 100; i++) { - // open stream for append - ofstream sdout(name, ios::out | ios::app); - if (!sdout) { - error("open failed"); - } - - // append 100 lines to the file - for (uint8_t j = 0; j < 100; j++) { - // use int() so byte will print as decimal number - sdout << "line " << int(j) << " of pass " << int(i); - sdout << " millis = " << millis() << endl; - } - // close the stream - sdout.close(); - - if (!sdout) { - error("append data failed"); - } - - // output progress indicator - if (i % 25 == 0) { - cout << endl; - } - cout << '.'; - } - cout << endl << "Done" << endl; -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/average/average.ino b/libraries/SdFat/examples/#attic/average/average.ino deleted file mode 100644 index eb48b1c..0000000 --- a/libraries/SdFat/examples/#attic/average/average.ino +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Calculate the sum and average of a list of floating point numbers - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// object for the SD file system -SdFat sd; - -// define a serial output stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -void writeTestFile() { - // open the output file - ofstream sdout("AvgTest.txt"); - - // write a series of float numbers - for (int16_t i = -1001; i < 2000; i += 13) { - sdout << 0.1 * i << endl; - } - if (!sdout) { - sd.errorHalt("sdout failed"); - } - - sdout.close(); -} -//------------------------------------------------------------------------------ -void calcAverage() { - uint16_t n = 0; // count of input numbers - double num; // current input number - double sum = 0; // sum of input numbers - - // open the input file - ifstream sdin("AvgTest.txt"); - - // check for an open failure - if (!sdin) { - sd.errorHalt("sdin failed"); - } - - // read and sum the numbers - while (sdin >> num) { - n++; - sum += num; - } - - // print the results - cout << "sum of " << n << " numbers = " << sum << endl; - cout << "average = " << sum/n << endl; -} -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - // F() stores strings in flash to save RAM - cout << F("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(); - } - - // write the test file - writeTestFile(); - - // read the test file and calculate the average - calcAverage(); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/benchSD/benchSD.ino b/libraries/SdFat/examples/#attic/benchSD/benchSD.ino deleted file mode 100644 index 647b2fc..0000000 --- a/libraries/SdFat/examples/#attic/benchSD/benchSD.ino +++ /dev/null @@ -1,140 +0,0 @@ -/* - * This program 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) {} - - // F() 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", O_RDWR | 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/libraries/SdFat/examples/#attic/bufstream/bufstream.ino b/libraries/SdFat/examples/#attic/bufstream/bufstream.ino deleted file mode 100644 index b0d6c83..0000000 --- a/libraries/SdFat/examples/#attic/bufstream/bufstream.ino +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Use of ibufsteam to parse a line and obufstream to format a line - */ -#include -#include - -// create a serial output stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -void setup() { - char buf[20]; // buffer for formatted line - 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"); - - // parse the string "123 456 789" - bin >> i >> j >> k; - - // initialize output buffer - obufstream bout(buf, sizeof(buf)); - - // format the output string - bout << k << ',' << j << ',' << i << endl; - - // write the string to serial - cout << buf; -} - -void loop() {} diff --git a/libraries/SdFat/examples/#attic/eventlog/eventlog.ino b/libraries/SdFat/examples/#attic/eventlog/eventlog.ino deleted file mode 100644 index 88332cd..0000000 --- a/libraries/SdFat/examples/#attic/eventlog/eventlog.ino +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Append a line to a file - demo of pathnames and streams - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -// define a serial output stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -/* - * Append a line to logfile.txt - */ -void logEvent(const char *msg) { - // create dir if needed - sd.mkdir("logs/2014/Jan"); - - // create or open a file for append - ofstream sdlog("logs/2014/Jan/logfile.txt", ios::out | ios::app); - - // append a line to the file - sdlog << msg << endl; - - // check for errors - if (!sdlog) { - sd.errorHalt("append failed"); - } - - sdlog.close(); -} -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - // F() stores strings in flash to save RAM - cout << F("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(); - } - - // append a line to the logfile - logEvent("Another line for the logfile"); - - cout << F("Done - check /logs/2014/Jan/logfile.txt on the SD") << endl; -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino b/libraries/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino deleted file mode 100644 index 2c6cdac..0000000 --- a/libraries/SdFat/examples/#attic/fgetsRewrite/fgetsRewrite.ino +++ /dev/null @@ -1,106 +0,0 @@ -// Demo of rewriting a line read by fgets -#include -#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(F(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 << F("-----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 << F("\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.print(F( - "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 << F("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 << F("\nDone\n"); -} -void loop(void) {} diff --git a/libraries/SdFat/examples/#attic/readlog/readlog.ino b/libraries/SdFat/examples/#attic/readlog/readlog.ino deleted file mode 100644 index c95a3e1..0000000 --- a/libraries/SdFat/examples/#attic/readlog/readlog.ino +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Read the logfile created by the eventlog.ino example. - * Demo of pathnames and working directories - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -// define a serial output stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -void setup() { - 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.begin(chipSelect, SPI_HALF_SPEED)) { - sd.initErrorHalt(); - } - - // set current working directory - if (!sd.chdir("logs/2014/Jan/")) { - sd.errorHalt("chdir failed. Did you run eventlog.ino?"); - } - // open file in current working directory - ifstream file("logfile.txt"); - - if (!file.is_open()) { - sd.errorHalt("open failed"); - } - - // copy the file to Serial - while ((c = file.get()) >= 0) { - cout << (char)c; - } - - cout << "Done" << endl; -} -//------------------------------------------------------------------------------ -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/examples/#attic/readme.txt b/libraries/SdFat/examples/#attic/readme.txt deleted file mode 100644 index dc45750..0000000 --- a/libraries/SdFat/examples/#attic/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ -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. diff --git a/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h b/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h deleted file mode 100644 index 35a34e5..0000000 --- a/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.h +++ /dev/null @@ -1,39 +0,0 @@ -#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 values - 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 values - 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 values - 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/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino b/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino deleted file mode 100644 index eda8541..0000000 --- a/libraries/SdFat/examples/AnalogBinLogger/AnalogBinLogger.ino +++ /dev/null @@ -1,829 +0,0 @@ -/** - * 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. - */ -#ifdef __AVR__ -#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) errorFlash(F(msg)) -//------------------------------------------------------------------------------ -void errorFlash(const __FlashStringHelper* msg) { - sd.errorPrint(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(&csvName[BASE_NAME_SIZE + 3], "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")); - } -} -#else // __AVR__ -#error This program is only for AVR. -#endif // __AVR__ \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/LongFileName.ino b/libraries/SdFat/examples/LongFileName/LongFileName.ino deleted file mode 100644 index 81c9a47..0000000 --- a/libraries/SdFat/examples/LongFileName/LongFileName.ino +++ /dev/null @@ -1,94 +0,0 @@ -// Example use of lfnOpenNext and open by index. -// You can use test files located in -// SdFat/examples/LongFileName/testFiles. -#include -#include -#include - -// SD card chip select pin. -const uint8_t SD_CS_PIN = SS; - -SdFat sd; -SdFile file; -SdFile dirFile; - -// Number of files found. -uint16_t n = 0; - -// Max of ten files since files are selected with a single digit. -const uint16_t nMax = 10; - -// Position of file's directory entry. -uint16_t dirIndex[nMax]; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} - delay(1000); - - // Print the location of some test files. - Serial.println(F("\r\n" - "You can use test files located in\r\n" - "SdFat/examples/LongFileName/testFiles")); - - if (!sd.begin(SD_CS_PIN)) { - sd.initErrorHalt(); - } - Serial.print(F("Free RAM: ")); - Serial.println(FreeRam()); - Serial.println(); - - // List files in root directory. - if (!dirFile.open("/", O_READ)) { - sd.errorHalt("open root failed"); - } - while (n < nMax && file.openNext(&dirFile, O_READ)) { - - // Skip directories and hidden files. - if (!file.isSubDir() && !file.isHidden()) { - - // Save dirIndex of file in directory. - dirIndex[n] = file.dirIndex(); - - // Print the file number and name. - Serial.print(n++); - Serial.write(' '); - file.printName(&Serial); - Serial.println(); - } - file.close(); - } -} -//------------------------------------------------------------------------------ -void loop() { - int c; - - // Discard any Serial input. - while (Serial.read() > 0) {} - Serial.print(F("\r\nEnter File Number: ")); - - while ((c = Serial.read()) < 0) {}; - if (!isdigit(c) || (c -= '0') >= n) { - Serial.println(F("Invald number")); - return; - } - Serial.println(c); - if (!file.open(&dirFile, dirIndex[c], O_READ)) { - sd.errorHalt(F("open")); - } - Serial.println(); - - char last; - - // Copy up to 500 characters to Serial. - for (int i = 0; i < 500 && (c = file.read()) > 0; i++) { - Serial.write(last = (char)c); - } - // Add new line if missing from last line. - if (last != '\n') { - Serial.println(); - } - file.close(); - Serial.flush(); - delay(100); -} \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/testFiles/A long name can be 255 characters.txt b/libraries/SdFat/examples/LongFileName/testFiles/A long name can be 255 characters.txt deleted file mode 100644 index 62c7a7b..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/A long name can be 255 characters.txt +++ /dev/null @@ -1,4 +0,0 @@ -This is "A long name can be 255 characters.txt" -This file has a typical Long File Name. - -The maximum length of a Long File Name is 255 characters. diff --git a/libraries/SdFat/examples/LongFileName/testFiles/LFN,NAME.TXT b/libraries/SdFat/examples/LongFileName/testFiles/LFN,NAME.TXT deleted file mode 100644 index 3fc38d6..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/LFN,NAME.TXT +++ /dev/null @@ -1 +0,0 @@ -LFN,NAME.TXT is not 8.3 since it has a comma. \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/testFiles/MIXCASE.txt b/libraries/SdFat/examples/LongFileName/testFiles/MIXCASE.txt deleted file mode 100644 index ce66142..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/MIXCASE.txt +++ /dev/null @@ -1,5 +0,0 @@ -MIXCASE.txt does not have a Long File Name. - -Starting with NT, file names of this form, -have the basename and extension character case -encoded in two bits of the 8.3 directory entry. diff --git a/libraries/SdFat/examples/LongFileName/testFiles/Not_8_3.txt b/libraries/SdFat/examples/LongFileName/testFiles/Not_8_3.txt deleted file mode 100644 index 701a34f..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/Not_8_3.txt +++ /dev/null @@ -1,2 +0,0 @@ -Not_8_3.txt has a Long File Name -since the basename is mixed case. \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/testFiles/OK%83.TXT b/libraries/SdFat/examples/LongFileName/testFiles/OK%83.TXT deleted file mode 100644 index 6935e78..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/OK%83.TXT +++ /dev/null @@ -1 +0,0 @@ -OK%83.TXT is a valid 8.3 name. \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/testFiles/STD_8_3.TXT b/libraries/SdFat/examples/LongFileName/testFiles/STD_8_3.TXT deleted file mode 100644 index e0d2234..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/STD_8_3.TXT +++ /dev/null @@ -1 +0,0 @@ -STD_8_3.TXT - a vanilla 8.3 name. \ No newline at end of file diff --git a/libraries/SdFat/examples/LongFileName/testFiles/With Blank.txt b/libraries/SdFat/examples/LongFileName/testFiles/With Blank.txt deleted file mode 100644 index ef37e07..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/With Blank.txt +++ /dev/null @@ -1,2 +0,0 @@ -With Blank.txt -Just another example of a Long File Name. diff --git a/libraries/SdFat/examples/LongFileName/testFiles/With.Two dots.txt b/libraries/SdFat/examples/LongFileName/testFiles/With.Two dots.txt deleted file mode 100644 index 1739391..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/With.Two dots.txt +++ /dev/null @@ -1,2 +0,0 @@ -"With Two.dots.txt" -Lots of reasons this is a Long File Name. diff --git a/libraries/SdFat/examples/LongFileName/testFiles/lower.txt b/libraries/SdFat/examples/LongFileName/testFiles/lower.txt deleted file mode 100644 index 43a6bd0..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/lower.txt +++ /dev/null @@ -1,5 +0,0 @@ -lower.txt does not have a Long File Name. - -Starting with NT, file names of this form, -have the basename and extension character case -encoded in two bits of the 8.3 directory entry. diff --git a/libraries/SdFat/examples/LongFileName/testFiles/mixed.TXT b/libraries/SdFat/examples/LongFileName/testFiles/mixed.TXT deleted file mode 100644 index 03d9bd0..0000000 --- a/libraries/SdFat/examples/LongFileName/testFiles/mixed.TXT +++ /dev/null @@ -1,5 +0,0 @@ -mixed.TXT does not have a Long File Name. - -Starting with NT, file names of this form, -have the basename and extension character case -encoded in two bits of the 8.3 directory entry. \ No newline at end of file diff --git a/libraries/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino b/libraries/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino deleted file mode 100644 index dee2b8c..0000000 --- a/libraries/SdFat/examples/LowLatencyLogger/LowLatencyLogger.ino +++ /dev/null @@ -1,555 +0,0 @@ -/** - * 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 -#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 = -1; -//------------------------------------------------------------------------------ -// 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) errorFlash(F(msg)) -//------------------------------------------------------------------------------ -void errorFlash(const __FlashStringHelper* msg) { - sd.errorPrint(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(&csvName[BASE_NAME_SIZE + 3], "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); - while (!Serial) {} - - 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/libraries/SdFat/examples/LowLatencyLogger/UserDataType.h b/libraries/SdFat/examples/LowLatencyLogger/UserDataType.h deleted file mode 100644 index 8e161e2..0000000 --- a/libraries/SdFat/examples/LowLatencyLogger/UserDataType.h +++ /dev/null @@ -1,8 +0,0 @@ -#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/libraries/SdFat/examples/OpenNext/OpenNext.ino b/libraries/SdFat/examples/OpenNext/OpenNext.ino deleted file mode 100644 index 814a496..0000000 --- a/libraries/SdFat/examples/OpenNext/OpenNext.ino +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Print size, modify date/time, and name for all files in root. - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -SdFile file; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - delay(1000); - 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.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.printFileSize(&Serial); - Serial.write(' '); - file.printModifyDateTime(&Serial); - Serial.write(' '); - file.printName(&Serial); - if (file.isDir()) { - // Indicate a directory. - Serial.write('/'); - } - Serial.println(); - file.close(); - } - Serial.println("Done!"); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/PrintBenchmark/PrintBenchmark.ino b/libraries/SdFat/examples/PrintBenchmark/PrintBenchmark.ino deleted file mode 100644 index bc55073..0000000 --- a/libraries/SdFat/examples/PrintBenchmark/PrintBenchmark.ino +++ /dev/null @@ -1,147 +0,0 @@ -/* - * This program is a simple Print benchmark. - */ -#include -#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(F(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 << F("Type any character to start\n"); - while (Serial.read() <= 0) { - } - delay(400); // catch Due reset problem - - cout << F("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 << F("Type is FAT") << int(sd.vol()->fatType()) << endl; - - cout << F("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 << F("Test of println(uint16_t)\n"); - break; - - case 1: - cout << F("Test of printField(uint16_t, char)\n"); - break; - - case 2: - cout << F("Test of println(uint32_t)\n"); - break; - - case 3: - cout << F("Test of printField(uint32_t, char)\n"); - break; - case 4: - cout << F("Test of println(float)\n"); - break; - - case 5: - cout << F("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.getWriteError()) { - 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 << F("Time ") << 0.001*t << F(" sec\n"); - cout << F("File size ") << 0.001*s << F(" KB\n"); - cout << F("Write ") << s/t << F(" KB/sec\n"); - cout << F("Maximum latency: ") << maxLatency; - cout << F(" usec, Minimum Latency: ") << minLatency; - cout << F(" usec, Avg Latency: "); - cout << totalLatency/N_PRINT << F(" usec\n\n"); - } - cout << F("Done!\n\n"); -} diff --git a/libraries/SdFat/examples/QuickStart/QuickStart.ino b/libraries/SdFat/examples/QuickStart/QuickStart.ino deleted file mode 100644 index 8076780..0000000 --- a/libraries/SdFat/examples/QuickStart/QuickStart.ino +++ /dev/null @@ -1,157 +0,0 @@ -// Quick hardware test. -// -#include -#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; -//------------------------------------------------------------------------------ -// File system object. -SdFat sd; - -// Serial streams -ArduinoOutStream cout(Serial); - -// input buffer for line -char cinBuf[40]; -ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); - -// SD card chip select -int chipSelect; - -void cardOrSpeed() { - cout << F("Try another SD card or reduce the SPI bus speed.\n"); - cout << F("Edit spiSpeed in this program to change it.\n"); -} - -void reformatMsg() { - cout << F("Try reformatting the card. For best results use\n"); - cout << F("the SdFormatter program in SdFat/examples or download\n"); - cout << F("and use SDFormatter from www.sdcard.org/downloads.\n"); -} - -void setup() { - Serial.begin(9600); - while (!Serial) {} // Wait for Leonardo. - - cout << F("\nSPI pins:\n"); - cout << F("MISO: ") << int(MISO) << endl; - cout << F("MOSI: ") << int(MOSI) << endl; - cout << F("SCK: ") << int(SCK) << endl; - cout << F("SS: ") << int(SS) << endl; - - if (DISABLE_CHIP_SELECT < 0) { - cout << F( - "\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 << F( - "\nSD chip select is the key hardware option.\n" - "Common values are:\n" - "Arduino Ethernet shield, pin 4\n" - "Sparkfun SD shield, pin 8\n" - "Adafruit SD shields and modules, pin 10\n"); -} - -bool firstTry = true; -void loop() { - // read any existing Serial data - while (Serial.read() >= 0) {} - - if (!firstTry) { - cout << F("\nRestarting\n"); - } - firstTry = false; - - cout << F("\nEnter the chip select pin number: "); - while (!Serial.available()) {} - delay(400); // catch Due restart problem - - cin.readline(); - if (cin >> chipSelect) { - cout << chipSelect << endl; - } else { - cout << F("\nInvalid pin number\n"); - return; - } - if (DISABLE_CHIP_SELECT < 0) { - cout << F( - "\nAssuming the SD is the only SPI device.\n" - "Edit DISABLE_CHIP_SELECT to disable another device.\n"); - } else { - cout << F("\nDisabling SPI device on pin "); - cout << int(DISABLE_CHIP_SELECT) << endl; - pinMode(DISABLE_CHIP_SELECT, OUTPUT); - digitalWrite(DISABLE_CHIP_SELECT, HIGH); - } - if (!sd.begin(chipSelect, spiSpeed)) { - if (sd.card()->errorCode()) { - cout << F( - "\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 << F("\nerrorCode: ") << hex << showbase; - cout << int(sd.card()->errorCode()); - cout << F(", errorData: ") << int(sd.card()->errorData()); - cout << dec << noshowbase << endl; - return; - } - cout << F("\nCard successfully initialized.\n"); - if (sd.vol()->fatType() == 0) { - cout << F("Can't find a valid FAT16/FAT32 partition.\n"); - reformatMsg(); - return; - } - if (!sd.vwd()->isOpen()) { - cout << F("Can't open root directory.\n"); - reformatMsg(); - return; - } - cout << F("Can't determine error type\n"); - return; - } - cout << F("\nCard successfully initialized.\n"); - cout << endl; - - uint32_t size = sd.card()->cardSize(); - if (size == 0) { - cout << F("Can't determine the card size.\n"); - cardOrSpeed(); - return; - } - uint32_t sizeMB = 0.000512 * size + 0.5; - cout << F("Card size: ") << sizeMB; - cout << F(" MB (MB = 1,000,000 bytes)\n"); - cout << endl; - cout << F("Volume is FAT") << int(sd.vol()->fatType()); - cout << F(", Cluster size (bytes): ") << 512L * sd.vol()->blocksPerCluster(); - cout << endl << endl; - - cout << F("Files found (date time size name):\n"); - sd.ls(LS_R | LS_DATE | LS_SIZE); - - if ((sizeMB > 1100 && sd.vol()->blocksPerCluster() < 64) - || (sizeMB < 2200 && sd.vol()->fatType() == 32)) { - cout << F("\nThis card should be reformatted for best performance.\n"); - cout << F("Use a cluster size of 32 KB for cards larger than 1 GB.\n"); - cout << F("Only cards larger than 2 GB should be formatted FAT32.\n"); - reformatMsg(); - return; - } - // read any existing Serial data - while (Serial.read() >= 0) {} - cout << F("\nSuccess! Type any character to restart.\n"); - while (Serial.read() < 0) {} -} \ No newline at end of file diff --git a/libraries/SdFat/examples/RawWrite/RawWrite.ino b/libraries/SdFat/examples/RawWrite/RawWrite.ino deleted file mode 100644 index 03207d0..0000000 --- a/libraries/SdFat/examples/RawWrite/RawWrite.ino +++ /dev/null @@ -1,173 +0,0 @@ -/* - * This program illustrates raw write functions in SdFat that - * can be used for high speed data logging. - * - * This program simulates logging from a source that produces - * data at a constant rate of one block every MICROS_PER_BLOCK. - * - * If a high quality SanDisk card is used with this program - * no overruns occur and the maximum block write time is - * under 2000 micros. - * - * Note: Apps should create a very large file then truncates it - * to the length that is used for a logging. It only takes - * a few seconds to erase a 500 MB file since the card only - * marks the blocks as erased; no data transfer is required. - */ -#include -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// number of blocks in the contiguous file -const uint32_t BLOCK_COUNT = 10000UL; - -// time to produce a block of data -const uint32_t MICROS_PER_BLOCK = 10000; - -// file system -SdFat sd; - -// 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) sd.errorHalt(F(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) {} - // pstr stores strings in flash to save RAM - cout << F("Type any character to start\n"); - while (Serial.read() <= 0) {} - delay(400); // catch Due reset problem - - cout << F("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(); - } - - // delete possible existing file - sd.remove("RawWrite.txt"); - - // create a contiguous file - if (!file.createContiguous(sd.vwd(), "RawWrite.txt", 512UL*BLOCK_COUNT)) { - error("createContiguous failed"); - } - // get the location of the file's blocks - if (!file.contiguousRange(&bgnBlock, &endBlock)) { - error("contiguousRange failed"); - } - //*********************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*)sd.vol()->cacheClear(); - - // fill cache with eight lines of 64 bytes each - memset(pCache, ' ', 512); - for (uint16_t i = 0; i < 512; i += 64) { - // put line number at end of line then CR/LF - pCache[i + 61] = '0' + (i/64); - pCache[i + 62] = '\r'; - pCache[i + 63] = '\n'; - } - - cout << F("Start raw write of ") << file.fileSize() << F(" bytes at\n"); - cout << 512000000UL/MICROS_PER_BLOCK << F(" bytes per second\n"); - cout << F("Please wait ") << (BLOCK_COUNT*MICROS_PER_BLOCK)/1000000UL; - cout << F(" seconds\n"); - - // tell card to setup for multiple block write with pre-erase - if (!sd.card()->writeStart(bgnBlock, BLOCK_COUNT)) { - error("writeStart failed"); - } - // init stats - uint16_t overruns = 0; - 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 += MICROS_PER_BLOCK; - - // put block number at start of first line in block - uint32_t n = b; - for (int8_t d = 5; d >= 0; d--) { - pCache[d] = n || d == 5 ? n % 10 + '0' : ' '; - n /= 10; - } - // write a 512 byte block - uint32_t tw = micros(); - 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 (micros() > tNext) { - if (overruns < OVER_DIM) { - over[overruns].block = b; - over[overruns].micros = tw; - } - overruns++; - // advance time to reflect overrun - tNext = micros(); - } else { - // wait for time to write next block - while(micros() < tNext); - } - } - // total write time - t = micros() - t; - - // end multiple block write mode - if (!sd.card()->writeStop()) { - error("writeStop failed"); - } - - cout << F("Done\n"); - cout << F("Elapsed time: ") << setprecision(3)<< 1.e-6*t; - cout << F(" seconds\n"); - cout << F("Max write time: ") << maxWriteTime << F(" micros\n"); - cout << F("Overruns: ") << overruns << endl; - if (overruns) { - uint8_t n = overruns > OVER_DIM ? OVER_DIM : overruns; - cout << F("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/libraries/SdFat/examples/ReadWrite/ReadWrite.ino b/libraries/SdFat/examples/ReadWrite/ReadWrite.ino deleted file mode 100644 index 49bad5e..0000000 --- a/libraries/SdFat/examples/ReadWrite/ReadWrite.ino +++ /dev/null @@ -1,88 +0,0 @@ -/* - SD card read/write - - This example shows how to read and write data to and from an SD card file - The circuit: - * SD card attached to SPI bus as follows: - ** MOSI - pin 11 - ** MISO - pin 12 - ** CLK - pin 13 - ** CS - pin 4 - - created Nov 2010 - by David A. Mellis - modified 9 Apr 2012 - by Tom Igoe - - This example code is in the public domain. - - */ -#define SD_CS_PIN SS -#include -//#include -#include -SdFat SD; - -File myFile; - -void setup() -{ - // Open serial communications and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - - Serial.print("Initializing SD card..."); - // On the Ethernet Shield, CS is pin 4. It's set as an output by default. - // Note that even if it's not used as the CS pin, the hardware SS pin - // (10 on most Arduino boards, 53 on the Mega) must be left as an output - // or the SD library functions will not work. - pinMode(10, OUTPUT); - - if (!SD.begin(SD_CS_PIN)) { - Serial.println("initialization failed!"); - return; - } - Serial.println("initialization done."); - - // open the file. note that only one file can be open at a time, - // so you have to close this one before opening another. - myFile = SD.open("test.txt", FILE_WRITE); - - // if the file opened okay, write to it: - if (myFile) { - Serial.print("Writing to test.txt..."); - myFile.println("testing 1, 2, 3."); - // close the file: - myFile.close(); - Serial.println("done."); - } else { - // if the file didn't open, print an error: - Serial.println("error opening test.txt"); - } - - // re-open the file for reading: - myFile = SD.open("test.txt"); - if (myFile) { - Serial.println("test.txt:"); - - // read from the file until there's nothing else in it: - while (myFile.available()) { - Serial.write(myFile.read()); - } - // close the file: - myFile.close(); - } else { - // if the file didn't open, print an error: - Serial.println("error opening test.txt"); - } -} - -void loop() -{ - // nothing happens after setup -} - - diff --git a/libraries/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino b/libraries/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino deleted file mode 100644 index d9bf3ec..0000000 --- a/libraries/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.ino +++ /dev/null @@ -1,73 +0,0 @@ -// Ported to SdFat from the native Arduino SD library example by Bill Greiman -// On the Ethernet Shield, CS is pin 4. SdFat handles setting SS -const int chipSelect = 4; -/* - SD card read/write - - This example shows how to read and write data to and from an SD card file - The circuit: - * SD card attached to SPI bus as follows: - ** MOSI - pin 11 - ** MISO - pin 12 - ** CLK - pin 13 - ** CS - pin 4 - - created Nov 2010 - by David A. Mellis - updated 2 Dec 2010 - by Tom Igoe - modified by Bill Greiman 11 Apr 2011 - This example code is in the public domain. - - */ -#include -#include -SdFat sd; -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.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)) { - sd.errorHalt("opening test.txt for write failed"); - } - // if the file opened okay, write to it: - Serial.print("Writing to test.txt..."); - myFile.println("testing 1, 2, 3."); - - // close the file: - myFile.close(); - Serial.println("done."); - - // re-open the file for reading: - if (!myFile.open("test.txt", O_READ)) { - sd.errorHalt("opening test.txt for read failed"); - } - Serial.println("test.txt:"); - - // read from the file until there's nothing else in it: - int data; - while ((data = myFile.read()) >= 0) { - Serial.write(data); - } - // close the file: - myFile.close(); -} - -void loop() { - // nothing happens after setup -} - - diff --git a/libraries/SdFat/examples/SdFormatter/SdFormatter.ino b/libraries/SdFat/examples/SdFormatter/SdFormatter.ino deleted file mode 100644 index aa493e4..0000000 --- a/libraries/SdFat/examples/SdFormatter/SdFormatter.ino +++ /dev/null @@ -1,511 +0,0 @@ -/* - * This program will format an SD or SDHC card. - * Warning all data will be deleted! - * - * For SD/SDHC cards larger than 64 MB this - * program attempts to match the format - * generated by SDFormatter available here: - * - * http://www.sdcard.org/consumers/formatter/ - * - * For smaller cards this program uses FAT16 - * and SDFormatter uses FAT12. - */ -// Print extra info for debug if DEBUG_PRINT is nonzero -#define DEBUG_PRINT 0 -#include -#include -#if DEBUG_PRINT -#include -#endif // DEBUG_PRINT -// -// Change the value of chipSelect if your hardware does -// 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; - -// 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; - -// Serial output stream -ArduinoOutStream cout(Serial); - -Sd2Card card; -uint32_t cardSizeBlocks; -uint16_t cardCapacityMB; - -// cache for SD block -cache_t cache; - -// MBR information -uint8_t partType; -uint32_t relSector; -uint32_t partSize; - -// Fake disk geometry -uint8_t numberOfHeads; -uint8_t sectorsPerTrack; - -// FAT parameters -uint16_t reservedSectors; -uint8_t sectorsPerCluster; -uint32_t fatStart; -uint32_t fatSize; -uint32_t dataStart; - -// constants for file system structure -uint16_t const BU16 = 128; -uint16_t const BU32 = 8192; - -// strings needed in file system structures -char noName[] = "NO NAME "; -char fat16str[] = "FAT16 "; -char fat32str[] = "FAT32 "; -//------------------------------------------------------------------------------ -#define sdError(msg) sdError_F(F(msg)) - -void sdError_F(const __FlashStringHelper* str) { - cout << F("error: "); - cout << str << endl; - if (card.errorCode()) { - cout << F("SD error: ") << hex << int(card.errorCode()); - cout << ',' << int(card.errorData()) << dec << endl; - } - while (1); -} -//------------------------------------------------------------------------------ -#if DEBUG_PRINT -void debugPrint() { - cout << F("FreeRam: ") << FreeRam() << endl; - cout << F("partStart: ") << relSector << endl; - cout << F("partSize: ") << partSize << endl; - cout << F("reserved: ") << reservedSectors << endl; - cout << F("fatStart: ") << fatStart << endl; - cout << F("fatSize: ") << fatSize << endl; - cout << F("dataStart: ") << dataStart << endl; - cout << F("clusterCount: "); - cout << ((relSector + partSize - dataStart)/sectorsPerCluster) << endl; - cout << endl; - cout << F("Heads: ") << int(numberOfHeads) << endl; - cout << F("Sectors: ") << int(sectorsPerTrack) << endl; - cout << F("Cylinders: "); - cout << cardSizeBlocks/(numberOfHeads*sectorsPerTrack) << endl; -} -#endif // DEBUG_PRINT -//------------------------------------------------------------------------------ -// write cached block to the card -uint8_t writeCache(uint32_t lbn) { - return card.writeBlock(lbn, cache.data); -} -//------------------------------------------------------------------------------ -// initialize appropriate sizes for SD capacity -void initSizes() { - if (cardCapacityMB <= 6) { - sdError("Card is too small."); - } else if (cardCapacityMB <= 16) { - sectorsPerCluster = 2; - } else if (cardCapacityMB <= 32) { - sectorsPerCluster = 4; - } else if (cardCapacityMB <= 64) { - sectorsPerCluster = 8; - } else if (cardCapacityMB <= 128) { - sectorsPerCluster = 16; - } else if (cardCapacityMB <= 1024) { - sectorsPerCluster = 32; - } else if (cardCapacityMB <= 32768) { - sectorsPerCluster = 64; - } else { - // SDXC cards - sectorsPerCluster = 128; - } - - cout << F("Blocks/Cluster: ") << int(sectorsPerCluster) << endl; - // set fake disk geometry - sectorsPerTrack = cardCapacityMB <= 256 ? 32 : 63; - - if (cardCapacityMB <= 16) { - numberOfHeads = 2; - } else if (cardCapacityMB <= 32) { - numberOfHeads = 4; - } else if (cardCapacityMB <= 128) { - numberOfHeads = 8; - } else if (cardCapacityMB <= 504) { - numberOfHeads = 16; - } else if (cardCapacityMB <= 1008) { - numberOfHeads = 32; - } else if (cardCapacityMB <= 2016) { - numberOfHeads = 64; - } else if (cardCapacityMB <= 4032) { - numberOfHeads = 128; - } else { - numberOfHeads = 255; - } -} -//------------------------------------------------------------------------------ -// zero cache and optionally set the sector signature -void clearCache(uint8_t addSig) { - memset(&cache, 0, sizeof(cache)); - if (addSig) { - cache.mbr.mbrSig0 = BOOTSIG0; - cache.mbr.mbrSig1 = BOOTSIG1; - } -} -//------------------------------------------------------------------------------ -// zero FAT and root dir area on SD -void clearFatDir(uint32_t bgn, uint32_t count) { - clearCache(false); - if (!card.writeStart(bgn, count)) { - sdError("Clear FAT/DIR writeStart failed"); - } - for (uint32_t i = 0; i < count; i++) { - if ((i & 0XFF) == 0) { - cout << '.'; - } - if (!card.writeData(cache.data)) { - sdError("Clear FAT/DIR writeData failed"); - } - } - if (!card.writeStop()) { - sdError("Clear FAT/DIR writeStop failed"); - } - cout << endl; -} -//------------------------------------------------------------------------------ -// return cylinder number for a logical block number -uint16_t lbnToCylinder(uint32_t lbn) { - return lbn / (numberOfHeads * sectorsPerTrack); -} -//------------------------------------------------------------------------------ -// return head number for a logical block number -uint8_t lbnToHead(uint32_t lbn) { - return (lbn % (numberOfHeads * sectorsPerTrack)) / sectorsPerTrack; -} -//------------------------------------------------------------------------------ -// return sector number for a logical block number -uint8_t lbnToSector(uint32_t lbn) { - return (lbn % sectorsPerTrack) + 1; -} -//------------------------------------------------------------------------------ -// format and write the Master Boot Record -void writeMbr() { - clearCache(true); - part_t* p = cache.mbr.part; - p->boot = 0; - uint16_t c = lbnToCylinder(relSector); - if (c > 1023) { - sdError("MBR CHS"); - } - p->beginCylinderHigh = c >> 8; - p->beginCylinderLow = c & 0XFF; - p->beginHead = lbnToHead(relSector); - p->beginSector = lbnToSector(relSector); - p->type = partType; - uint32_t endLbn = relSector + partSize - 1; - c = lbnToCylinder(endLbn); - if (c <= 1023) { - p->endCylinderHigh = c >> 8; - p->endCylinderLow = c & 0XFF; - p->endHead = lbnToHead(endLbn); - p->endSector = lbnToSector(endLbn); - } else { - // Too big flag, c = 1023, h = 254, s = 63 - p->endCylinderHigh = 3; - p->endCylinderLow = 255; - p->endHead = 254; - p->endSector = 63; - } - p->firstSector = relSector; - p->totalSectors = partSize; - if (!writeCache(0)) { - sdError("write MBR"); - } -} -//------------------------------------------------------------------------------ -// generate serial number from card size and micros since boot -uint32_t volSerialNumber() { - return (cardSizeBlocks << 8) + micros(); -} -//------------------------------------------------------------------------------ -// format the SD as FAT16 -void makeFat16() { - uint32_t nc; - for (dataStart = 2 * BU16;; dataStart += BU16) { - nc = (cardSizeBlocks - dataStart)/sectorsPerCluster; - fatSize = (nc + 2 + 255)/256; - uint32_t r = BU16 + 1 + 2 * fatSize + 32; - if (dataStart < r) { - continue; - } - relSector = dataStart - r + BU16; - break; - } - // check valid cluster count for FAT16 volume - if (nc < 4085 || nc >= 65525) { - sdError("Bad cluster count"); - } - reservedSectors = 1; - fatStart = relSector + reservedSectors; - partSize = nc * sectorsPerCluster + 2 * fatSize + reservedSectors + 32; - if (partSize < 32680) { - partType = 0X01; - } else if (partSize < 65536) { - partType = 0X04; - } else { - partType = 0X06; - } - // write MBR - writeMbr(); - clearCache(true); - fat_boot_t* pb = &cache.fbs; - pb->jump[0] = 0XEB; - pb->jump[1] = 0X00; - pb->jump[2] = 0X90; - for (uint8_t i = 0; i < sizeof(pb->oemId); i++) { - pb->oemId[i] = ' '; - } - pb->bytesPerSector = 512; - pb->sectorsPerCluster = sectorsPerCluster; - pb->reservedSectorCount = reservedSectors; - pb->fatCount = 2; - pb->rootDirEntryCount = 512; - pb->mediaType = 0XF8; - pb->sectorsPerFat16 = fatSize; - pb->sectorsPerTrack = sectorsPerTrack; - pb->headCount = numberOfHeads; - pb->hidddenSectors = relSector; - pb->totalSectors32 = partSize; - pb->driveNumber = 0X80; - pb->bootSignature = EXTENDED_BOOT_SIG; - pb->volumeSerialNumber = volSerialNumber(); - memcpy(pb->volumeLabel, noName, sizeof(pb->volumeLabel)); - memcpy(pb->fileSystemType, fat16str, sizeof(pb->fileSystemType)); - // write partition boot sector - if (!writeCache(relSector)) { - sdError("FAT16 write PBS failed"); - } - // clear FAT and root directory - clearFatDir(fatStart, dataStart - fatStart); - clearCache(false); - cache.fat16[0] = 0XFFF8; - cache.fat16[1] = 0XFFFF; - // write first block of FAT and backup for reserved clusters - if (!writeCache(fatStart) - || !writeCache(fatStart + fatSize)) { - sdError("FAT16 reserve failed"); - } -} -//------------------------------------------------------------------------------ -// format the SD as FAT32 -void makeFat32() { - uint32_t nc; - relSector = BU32; - for (dataStart = 2 * BU32;; dataStart += BU32) { - nc = (cardSizeBlocks - dataStart)/sectorsPerCluster; - fatSize = (nc + 2 + 127)/128; - uint32_t r = relSector + 9 + 2 * fatSize; - if (dataStart >= r) { - break; - } - } - // error if too few clusters in FAT32 volume - if (nc < 65525) { - sdError("Bad cluster count"); - } - reservedSectors = dataStart - relSector - 2 * fatSize; - fatStart = relSector + reservedSectors; - partSize = nc * sectorsPerCluster + dataStart - relSector; - // type depends on address of end sector - // max CHS has lbn = 16450560 = 1024*255*63 - if ((relSector + partSize) <= 16450560) { - // FAT32 - partType = 0X0B; - } else { - // FAT32 with INT 13 - partType = 0X0C; - } - writeMbr(); - clearCache(true); - - fat32_boot_t* pb = &cache.fbs32; - pb->jump[0] = 0XEB; - pb->jump[1] = 0X00; - pb->jump[2] = 0X90; - for (uint8_t i = 0; i < sizeof(pb->oemId); i++) { - pb->oemId[i] = ' '; - } - pb->bytesPerSector = 512; - pb->sectorsPerCluster = sectorsPerCluster; - pb->reservedSectorCount = reservedSectors; - pb->fatCount = 2; - pb->mediaType = 0XF8; - pb->sectorsPerTrack = sectorsPerTrack; - pb->headCount = numberOfHeads; - pb->hidddenSectors = relSector; - pb->totalSectors32 = partSize; - pb->sectorsPerFat32 = fatSize; - pb->fat32RootCluster = 2; - pb->fat32FSInfo = 1; - pb->fat32BackBootBlock = 6; - pb->driveNumber = 0X80; - pb->bootSignature = EXTENDED_BOOT_SIG; - pb->volumeSerialNumber = volSerialNumber(); - memcpy(pb->volumeLabel, noName, sizeof(pb->volumeLabel)); - memcpy(pb->fileSystemType, fat32str, sizeof(pb->fileSystemType)); - // write partition boot sector and backup - if (!writeCache(relSector) - || !writeCache(relSector + 6)) { - sdError("FAT32 write PBS failed"); - } - clearCache(true); - // write extra boot area and backup - if (!writeCache(relSector + 2) - || !writeCache(relSector + 8)) { - sdError("FAT32 PBS ext failed"); - } - fat32_fsinfo_t* pf = &cache.fsinfo; - pf->leadSignature = FSINFO_LEAD_SIG; - pf->structSignature = FSINFO_STRUCT_SIG; - pf->freeCount = 0XFFFFFFFF; - pf->nextFree = 0XFFFFFFFF; - // write FSINFO sector and backup - if (!writeCache(relSector + 1) - || !writeCache(relSector + 7)) { - sdError("FAT32 FSINFO failed"); - } - clearFatDir(fatStart, 2 * fatSize + sectorsPerCluster); - clearCache(false); - cache.fat32[0] = 0x0FFFFFF8; - cache.fat32[1] = 0x0FFFFFFF; - cache.fat32[2] = 0x0FFFFFFF; - // write first block of FAT and backup for reserved clusters - if (!writeCache(fatStart) - || !writeCache(fatStart + fatSize)) { - sdError("FAT32 reserve failed"); - } -} -//------------------------------------------------------------------------------ -// flash erase all data -uint32_t const ERASE_SIZE = 262144L; -void eraseCard() { - cout << endl << F("Erasing\n"); - uint32_t firstBlock = 0; - uint32_t lastBlock; - uint16_t n = 0; - - do { - lastBlock = firstBlock + ERASE_SIZE - 1; - if (lastBlock >= cardSizeBlocks) { - lastBlock = cardSizeBlocks - 1; - } - if (!card.erase(firstBlock, lastBlock)) { - sdError("erase failed"); - } - cout << '.'; - if ((n++)%32 == 31) { - cout << endl; - } - firstBlock += ERASE_SIZE; - } while (firstBlock < cardSizeBlocks); - cout << endl; - - if (!card.readBlock(0, cache.data)) { - sdError("readBlock"); - } - cout << hex << showbase << setfill('0') << internal; - cout << F("All data set to ") << setw(4) << int(cache.data[0]) << endl; - cout << dec << noshowbase << setfill(' ') << right; - cout << F("Erase done\n"); -} -//------------------------------------------------------------------------------ -void formatCard() { - cout << endl; - cout << F("Formatting\n"); - initSizes(); - if (card.type() != SD_CARD_TYPE_SDHC) { - cout << F("FAT16\n"); - makeFat16(); - } else { - cout << F("FAT32\n"); - makeFat32(); - } -#if DEBUG_PRINT - debugPrint(); -#endif // DEBUG_PRINT - cout << F("Format done\n"); -} -//------------------------------------------------------------------------------ -void setup() { - char c; - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - cout << F( - "\n" - "This program can erase and/or format SD/SDHC cards.\n" - "\n" - "Erase uses the card's fast flash erase command.\n" - "Flash erase sets all data to 0X00 for most cards\n" - "and 0XFF for a few vendor's cards.\n" - "\n" - "Cards larger than 2 GB will be formatted FAT32 and\n" - "smaller cards will be formatted FAT16.\n" - "\n" - "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') { - cout << F("Quiting, you did not enter 'Y'.\n"); - return; - } - // read any existing Serial data - while (Serial.read() >= 0) {} - - cout << F( - "\n" - "Options are:\n" - "E - erase the card and skip formatting.\n" - "F - erase and then format the card. (recommended)\n" - "Q - quick format the card without erase.\n" - "\n" - "Enter option: "); - - while (!Serial.available()) {} - c = Serial.read(); - cout << c << endl; - if (!strchr("EFQ", c)) { - cout << F("Quiting, invalid option entered.") << endl; - return; - } - - if (!card.begin(chipSelect, spiSpeed)) { - cout << F( - "\nSD initialization failure!\n" - "Is the SD card inserted correctly?\n" - "Is chip select correct at the top of this program?\n"); - sdError("card.begin failed"); - } - cardSizeBlocks = card.cardSize(); - if (cardSizeBlocks == 0) { - sdError("cardSize"); - } - cardCapacityMB = (cardSizeBlocks + 2047)/2048; - - cout << F("Card Size: ") << cardCapacityMB; - cout << F(" MB, (MB = 1,048,576 bytes)") << endl; - - if (c == 'E' || c == 'F') { - eraseCard(); - } - if (c == 'F' || c == 'Q') { - formatCard(); - } -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/SdInfo/SdInfo.ino b/libraries/SdFat/examples/SdInfo/SdInfo.ino deleted file mode 100644 index a5315e9..0000000 --- a/libraries/SdFat/examples/SdInfo/SdInfo.ino +++ /dev/null @@ -1,234 +0,0 @@ -/* - * This program attempts to initialize an SD card and analyze its structure. - */ -#include -#include -/* - * SD chip select pin. Common values are: - * - * Arduino Ethernet shield, pin 4. - * SparkFun SD shield, pin 8. - * Adafruit SD shields and modules, pin 10. - * Default SD chip select is the SPI SS pin. - */ -const uint8_t SD_CHIP_SELECT = SS; -/* - * 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; -SdFat sd; - -// serial output steam -ArduinoOutStream cout(Serial); - -// global for card size -uint32_t cardSize; - -// global for card erase size -uint32_t eraseSize; -//------------------------------------------------------------------------------ -// store error strings in flash -#define sdErrorMsg(msg) sdErrorMsg_F(F(msg)); -void sdErrorMsg_F(const __FlashStringHelper* str) { - cout << str << endl; - if (sd.card()->errorCode()) { - cout << F("SD errorCode: "); - cout << hex << int(sd.card()->errorCode()) << endl; - cout << F("SD errorData: "); - cout << int(sd.card()->errorData()) << dec << endl; - } -} -//------------------------------------------------------------------------------ -uint8_t cidDmp() { - cid_t cid; - if (!sd.card()->readCID(&cid)) { - sdErrorMsg("readCID failed"); - return false; - } - cout << F("\nManufacturer ID: "); - cout << hex << int(cid.mid) << dec << endl; - cout << F("OEM ID: ") << cid.oid[0] << cid.oid[1] << endl; - cout << F("Product: "); - for (uint8_t i = 0; i < 5; i++) { - cout << cid.pnm[i]; - } - cout << F("\nVersion: "); - cout << int(cid.prv_n) << '.' << int(cid.prv_m) << endl; - cout << F("Serial number: ") << hex << cid.psn << dec << endl; - cout << F("Manufacturing date: "); - cout << int(cid.mdt_month) << '/'; - cout << (2000 + cid.mdt_year_low + 10 * cid.mdt_year_high) << endl; - cout << endl; - return true; -} -//------------------------------------------------------------------------------ -uint8_t csdDmp() { - csd_t csd; - uint8_t eraseSingleBlock; - if (!sd.card()->readCSD(&csd)) { - sdErrorMsg("readCSD failed"); - return false; - } - if (csd.v1.csd_ver == 0) { - eraseSingleBlock = csd.v1.erase_blk_en; - eraseSize = (csd.v1.sector_size_high << 1) | csd.v1.sector_size_low; - } else if (csd.v2.csd_ver == 1) { - eraseSingleBlock = csd.v2.erase_blk_en; - eraseSize = (csd.v2.sector_size_high << 1) | csd.v2.sector_size_low; - } else { - cout << F("csd version error\n"); - return false; - } - eraseSize++; - cout << F("cardSize: ") << 0.000512*cardSize; - cout << F(" MB (MB = 1,000,000 bytes)\n"); - - cout << F("flashEraseSize: ") << int(eraseSize) << F(" blocks\n"); - cout << F("eraseSingleBlock: "); - if (eraseSingleBlock) { - cout << F("true\n"); - } else { - cout << F("false\n"); - } - return true; -} -//------------------------------------------------------------------------------ -// print partition table -uint8_t partDmp() { - cache_t *p = sd.vol()->cacheClear(); - if (!p) { - sdErrorMsg("cacheClear failed"); - return false; - } - if (!sd.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 << F("\nNo MBR. Assuming Super Floppy format.\n"); - return true; - } - } - cout << F("\nSD Partition Table\n"); - cout << F("part,boot,type,start,length\n"); - for (uint8_t ip = 1; ip < 5; ip++) { - part_t *pt = &p->mbr.part[ip - 1]; - cout << int(ip) << ',' << hex << int(pt->boot) << ',' << int(pt->type); - cout << dec << ',' << pt->firstSector <<',' << pt->totalSectors << endl; - } - return true; -} -//------------------------------------------------------------------------------ -void volDmp() { - cout << F("\nVolume is FAT") << int(sd.vol()->fatType()) << endl; - cout << F("blocksPerCluster: ") << int(sd.vol()->blocksPerCluster()) << endl; - cout << F("clusterCount: ") << sd.vol()->clusterCount() << endl; - cout << F("freeClusters: "); - uint32_t volFree = sd.vol()->freeClusterCount(); - cout << volFree << endl; - float fs = 0.000512*volFree*sd.vol()->blocksPerCluster(); - cout << F("freeSpace: ") << fs << F(" MB (MB = 1,000,000 bytes)\n"); - cout << F("fatStartBlock: ") << sd.vol()->fatStartBlock() << endl; - cout << F("fatCount: ") << int(sd.vol()->fatCount()) << endl; - cout << F("blocksPerFat: ") << sd.vol()->blocksPerFat() << endl; - cout << F("rootDirStart: ") << sd.vol()->rootDirStart() << endl; - cout << F("dataStartBlock: ") << sd.vol()->dataStartBlock() << endl; - if (sd.vol()->dataStartBlock() % eraseSize) { - cout << F("Data area is not aligned on flash erase boundaries!\n"); - cout << F("Download and use formatter from www.sdsd.card()->org/consumer!\n"); - } -} -//------------------------------------------------------------------------------ -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 << F("SdFat version: ") << SD_FAT_VERSION << endl; - if (DISABLE_CHIP_SELECT < 0) { - cout << F( - "\nAssuming the SD is the only SPI device.\n" - "Edit DISABLE_CHIP_SELECT to disable another device.\n"); - } else { - cout << F("\nDisabling SPI device on pin "); - cout << int(DISABLE_CHIP_SELECT) << endl; - pinMode(DISABLE_CHIP_SELECT, OUTPUT); - digitalWrite(DISABLE_CHIP_SELECT, HIGH); - } - cout << F("\nAssuming the SD chip select pin is: ") <= 0) {} - - // pstr stores strings in flash to save RAM - cout << F("\ntype any character to start\n"); - 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. - if (!sd.cardBegin(SD_CHIP_SELECT, SPI_HALF_SPEED)) { - sdErrorMsg("\ncardBegin failed"); - return; - } - t = millis() - t; - - cardSize = sd.card()->cardSize(); - if (cardSize == 0) { - sdErrorMsg("cardSize failed"); - return; - } - cout << F("\ninit time: ") << t << " ms" << endl; - cout << F("\nCard type: "); - switch (sd.card()->type()) { - case SD_CARD_TYPE_SD1: - cout << F("SD1\n"); - break; - - case SD_CARD_TYPE_SD2: - cout << F("SD2\n"); - break; - - case SD_CARD_TYPE_SDHC: - if (cardSize < 70000000) { - cout << F("SDHC\n"); - } else { - cout << F("SDXC\n"); - } - break; - - default: - cout << F("Unknown\n"); - } - if (!cidDmp()) { - return; - } - if (!csdDmp()) { - return; - } - uint32_t ocr; - if (!sd.card()->readOCR(&ocr)) { - sdErrorMsg("\nreadOCR failed"); - return; - } - cout << F("OCR: ") << hex << ocr << dec << endl; - if (!partDmp()) { - return; - } - if (!sd.fsBegin()) { - sdErrorMsg("\nFile System initialization failed.\n"); - return; - } - volDmp(); -} \ No newline at end of file diff --git a/libraries/SdFat/examples/SoftwareSpi/SoftwareSpi.ino b/libraries/SdFat/examples/SoftwareSpi/SoftwareSpi.ino deleted file mode 100644 index f49263a..0000000 --- a/libraries/SdFat/examples/SoftwareSpi/SoftwareSpi.ino +++ /dev/null @@ -1,48 +0,0 @@ -// An example of the SdFatSoftSpi template class. -// This example is for an Adafruit Data Logging Shield on a Mega. -// Software SPI is required on Mega since this shield connects to pins 10-13. -// This example will also run on an Uno and other boards using software SPI. -// -#include -#include -#if SD_SPI_CONFIGURATION >= 3 // Must be set in SdFat/SdFatConfig.h -// -// Pin numbers in templates must be constants. -const uint8_t SOFT_MISO_PIN = 12; -const uint8_t SOFT_MOSI_PIN = 11; -const uint8_t SOFT_SCK_PIN = 13; -// -// Chip select may be constant or RAM variable. -const uint8_t SD_CHIP_SELECT_PIN = 10; - -// SdFat software SPI template -SdFatSoftSpi sd; - -// Test file. -SdFile file; - -void setup() { - Serial.begin(9600); - while (!Serial) {} // Wait for Leonardo - - Serial.println("Type any character to start"); - while (Serial.read() <= 0) {} - - if (!sd.begin(SD_CHIP_SELECT_PIN)) { - sd.initErrorHalt(); - } - - if (!file.open("SoftSPI.txt", O_CREAT | O_RDWR)) { - sd.errorHalt(F("open failed")); - } - file.println(F("This line was printed using software SPI.")); - - file.close(); - - Serial.println(F("Done.")); -} -//------------------------------------------------------------------------------ -void loop() {} -#else // SD_SPI_CONFIGURATION >= 3 -#error SD_SPI_CONFIGURATION must be set to 3 in SdFat/SdFatConfig.h -#endif //SD_SPI_CONFIGURATION >= 3 \ No newline at end of file diff --git a/libraries/SdFat/examples/StdioBench/StdioBench.ino b/libraries/SdFat/examples/StdioBench/StdioBench.ino deleted file mode 100644 index 6f25c51..0000000 --- a/libraries/SdFat/examples/StdioBench/StdioBench.ino +++ /dev/null @@ -1,207 +0,0 @@ -// Benchmark comparing SdFile and StdioStream. -#include -#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); - while (!Serial) {} - - 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.1234*i; - } - - for (uint8_t dataType = 0; dataType < 5; dataType++) { - for (uint8_t fileType = 0; fileType < 2; fileType++) { - if (!fileType) { - if (!printFile.open("print.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/libraries/SdFat/examples/StreamParseInt/StreamParseInt.ino b/libraries/SdFat/examples/StreamParseInt/StreamParseInt.ino deleted file mode 100644 index 4fffa12..0000000 --- a/libraries/SdFat/examples/StreamParseInt/StreamParseInt.ino +++ /dev/null @@ -1,41 +0,0 @@ -// Simple demo of the Stream parsInt() member function. -#include -// The next two lines replace #include . -#include -SdFat SD; - -// SD card chip select pin - Modify the value of csPin for your SD module. -const uint8_t csPin = 10; - -File file; -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - // Wait for USB Serial. - while(!Serial) {} - Serial.println(F("Type any character to start")); - while (!Serial.available()) {} - - // 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. - file = SD.open("stream.txt", O_RDWR|O_CREAT|O_TRUNC); - if (!file) { - 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.seek(0); - int i = file.parseInt(); - Serial.print(F("parseInt: ")); - Serial.println(i); - file.close(); -} - -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/examples/ThreeCards/ThreeCards.ino b/libraries/SdFat/examples/ThreeCards/ThreeCards.ino deleted file mode 100644 index 8cbe7b0..0000000 --- a/libraries/SdFat/examples/ThreeCards/ThreeCards.ino +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Example use of three SD cards. - */ -#include -#include -#include -#if SD_SPI_CONFIGURATION >= 3 // Must be set in SdFat/SdFatConfig.h - -// SD1 is a microSD on hardware SPI pins 50-52 -// Using my fast custom SPI -SdFat sd1; -const uint8_t SD1_CS = 53; - -// SD2 is a Catalex shield on hardware SPI pins 50-52 -// Using the standard Arduino SPI library -SdFatLibSpi sd2; -const uint8_t SD2_CS = 4; - -// SD3 is a Adafruit data logging shield on pins 10-13 -// Using Software SPI -SdFatSoftSpi<12, 11, 13> sd3; -const uint8_t SD3_CS = 10; - -const uint8_t BUF_DIM = 100; -uint8_t buf[BUF_DIM]; - -const uint32_t FILE_SIZE = 1000000; -const uint16_t NWRITE = FILE_SIZE/BUF_DIM; -//------------------------------------------------------------------------------ -// print error msg, any SD error codes, and halt. -// store messages in flash -#define errorExit(msg) errorHalt(F(msg)) -#define initError(msg) initErrorHalt(F(msg)) -//------------------------------------------------------------------------------ -void list() { -// list current directory on all cards - Serial.println(F("------sd1-------")); - sd1.ls("/", LS_SIZE|LS_R); - Serial.println(F("------sd2-------")); - sd2.ls("/", LS_SIZE|LS_R); - Serial.println(F("------sd3-------")); - sd3.ls("/", LS_SIZE|LS_R); - Serial.println(F("---------------------")); -} -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - Serial.print(F("FreeRam: ")); - - Serial.println(FreeRam()); - - // fill buffer with known data - for (int i = 0; i < sizeof(buf); i++) { - buf[i] = i; - } - - Serial.println(F("type any character to start")); - while (Serial.read() <= 0) {} - - // disable sd2 while initializing sd1 - pinMode(SD2_CS, OUTPUT); - digitalWrite(SD2_CS, HIGH); - - // initialize the first card - if (!sd1.begin(SD1_CS)) { - sd1.initError("sd1:"); - } - - // initialize the second card - if (!sd2.begin(SD2_CS)) { - sd2.initError("sd2:"); - } - - // initialize the third card - if (!sd3.begin(SD3_CS)) { - sd3.initError("sd3:"); - } - - Serial.println(F("Cards OK - creating directories")); - - // create Dir1 on sd1 if it does not exist - if (!sd1.exists("/Dir1")) { - if (!sd1.mkdir("/Dir1")) { - sd1.errorExit("sd1.mkdir"); - } - } - // make /Dir1 the default directory for sd1 - if (!sd1.chdir("/Dir1")) { - sd1.errorExit("sd1.chdir"); - } - - // create Dir2 on sd2 if it does not exist - if (!sd2.exists("/Dir2")) { - if (!sd2.mkdir("/Dir2")) { - sd2.errorExit("sd2.mkdir"); - } - } - // make /Dir2 the default directory for sd2 - if (!sd2.chdir("/Dir2")) { - sd2.errorExit("sd2.chdir"); - } - - // create Dir3 on sd3 if it does not exist - if (!sd3.exists("/Dir3")) { - if (!sd3.mkdir("/Dir3")) { - sd2.errorExit("sd3.mkdir"); - } - } - // make /Dir3 the default directory for sd3 - if (!sd3.chdir("/Dir3")) { - sd3.errorExit("sd3.chdir"); - } - - Serial.println(F("Directories created - removing old files")); - - if (sd1.exists("TEST1.bin")) { - if (!sd1.remove("TEST1.bin")) { - sd1.errorExit("sd1.remove"); - } - } - if (sd2.exists("TEST2.bin")) { - if (!sd2.remove("TEST2.bin")) { - sd2.errorExit("sd2.remove"); - } - } - if (sd3.exists("TEST3.bin")) { - if (!sd3.remove("TEST3.bin")) { - sd2.errorExit("sd3.remove"); - } - } - Serial.println("Initial SD directories"); - list(); - - // create or open /Dir1/TEST1.bin and truncate it to zero length - SdFile file1; - if (!file1.open(&sd1, "TEST1.bin", O_RDWR | O_CREAT | O_TRUNC)) { - sd1.errorExit("file1"); - } - Serial.println(F("Writing SD1:/Dir1/TEST1.bin")); - - // write data to /Dir1/TEST1.bin on sd1 - for (int i = 0; i < NWRITE; i++) { - if (file1.write(buf, sizeof(buf)) != sizeof(buf)) { - sd1.errorExit("sd1.write"); - } - } - file1.sync(); - list(); - - // create or open /Dir2/TEST2.bin and truncate it to zero length - SdFile file2; - if (!file2.open(&sd2, "TEST2.bin", O_RDWR | O_CREAT | O_TRUNC)) { - sd2.errorExit("file2"); - } - Serial.println(F("Copying SD1:/Dir1/TEST1.bin to SD2::/Dir2/TEST2.bin")); - - // copy file1 to file2 - file1.rewind(); - - uint32_t t = millis(); - - while (1) { - int n = file1.read(buf, sizeof(buf)); - if (n < 0) { - sd1.errorExit("read1"); - } - if (n == 0) { - break; - } - if (file2.write(buf, n) != n) { - sd2.errorExit("write3"); - } - } - t = millis() - t; - file2.sync(); - Serial.print(F("File size: ")); - Serial.println(file2.fileSize()); - Serial.print(F("Copy time: ")); - Serial.print(t); - Serial.println(F(" millis")); - list(); - - // create or open /Dir3/TEST3.bin and truncate it to zero length - SdFile file3; - if (!file3.open(&sd3, "TEST3.bin", O_RDWR | O_CREAT | O_TRUNC)) { - sd3.errorExit("file3"); - } - file2.rewind(); - Serial.println(F("Copying SD2:/Dir2/TEST2.bin to SD3:/Dir3/TEST3.bin")); - while (1) { - int n = file2.read(buf, sizeof(buf)); - if (n == 0) { - break; - } - if (n != sizeof(buf)) { - sd2.errorExit("read2"); - } - if (file3.write(buf, n) != n) { - sd3.errorExit("write2"); - } - } - file3.sync(); - list(); - - // Verify content of file3 - file3.rewind(); - Serial.println(F("Verifying content of TEST3.bin")); - for (int i = 0; i < NWRITE; i++) { - if (file3.read(buf, sizeof(buf)) != sizeof(buf)) { - sd3.errorExit("sd3.read"); - } - for (int j = 0; j < sizeof(buf); j++) { - if (j != buf[j]) { - sd3.errorExit("Verify error"); - } - } - } - Serial.println(F("Done - Verify OK")); - file1.close(); - file2.close(); - file3.close(); -} -//------------------------------------------------------------------------------ -void loop() {} -#else // SD_SPI_CONFIGURATION >= 3 -#error SD_SPI_CONFIGURATION must be set to 3 in SdFat/SdFatConfig.h -#endif //SD_SPI_CONFIGURATION >= 3 \ No newline at end of file diff --git a/libraries/SdFat/examples/Timestamp/Timestamp.ino b/libraries/SdFat/examples/Timestamp/Timestamp.ino deleted file mode 100644 index 4a92ef3..0000000 --- a/libraries/SdFat/examples/Timestamp/Timestamp.ino +++ /dev/null @@ -1,173 +0,0 @@ -/* - * This program tests the dateTimeCallback() function - * and the timestamp() function. - */ -#include -#include - -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(F(s)) -//------------------------------------------------------------------------------ -/* - * date/time values for debug - * normally supplied by a real-time clock or GPS - */ -// date 1-Oct-14 -uint16_t year = 2014; -uint8_t month = 10; -uint8_t day = 1; - -// time 20:30:40 -uint8_t hour = 20; -uint8_t minute = 30; -uint8_t second = 40; -//------------------------------------------------------------------------------ -/* - * User provided date time callback function. - * See SdFile::dateTimeCallback() for usage. - */ -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); -} -//------------------------------------------------------------------------------ -/* - * Function to print all timestamps. - */ -void printTimestamps(SdFile& f) { - dir_t d; - if (!f.dirEntry(&d)) { - error("f.dirEntry failed"); - } - - cout << F("Creation: "); - f.printFatDate(d.creationDate); - cout << ' '; - f.printFatTime(d.creationTime); - cout << endl; - - cout << F("Modify: "); - f.printFatDate(d.lastWriteDate); - cout <<' '; - f.printFatTime(d.lastWriteTime); - cout << endl; - - cout << F("Access: "); - f.printFatDate(d.lastAccessDate); - cout << endl; -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - cout << F("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.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"); - } - cout << F("\nOpen with default times\n"); - printTimestamps(file); - - // close file - file.close(); - /* - * Test the date time callback function. - * - * dateTimeCallback() sets the function - * that is called when a file is created - * or when a file's directory entry is - * modified by sync(). - * - * The callback can be disabled by the call - * SdFile::dateTimeCallbackCancel() - */ - // 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"); - } - 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; - - // modify file by writing a byte - file.write('t'); - - // force dir update - file.sync(); - - cout << F("\nTimes after write\n"); - printTimestamps(file); - - // close file - file.close(); - /* - * Test timestamp() function - * - * Cancel callback so sync will not - * 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"); - } - // set creation date time - if (!file.timestamp(T_CREATE, 2014, 11, 10, 1, 2, 3)) { - error("set create time failed"); - } - // set write/modification date time - if (!file.timestamp(T_WRITE, 2014, 11, 11, 4, 5, 6)) { - error("set write time failed"); - } - // set access date - if (!file.timestamp(T_ACCESS, 2014, 11, 12, 7, 8, 9)) { - error("set access time failed"); - } - cout << F("\nTimes after timestamp() calls\n"); - printTimestamps(file); - - file.close(); - cout << F("\nDone\n"); -} - -void loop(void) {} \ No newline at end of file diff --git a/libraries/SdFat/examples/TwoCards/TwoCards.ino b/libraries/SdFat/examples/TwoCards/TwoCards.ino deleted file mode 100644 index d10166e..0000000 --- a/libraries/SdFat/examples/TwoCards/TwoCards.ino +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Example use of two SD cards. - */ -#include -#include -#include - -SdFat sd1; -const uint8_t SD1_CS = 10; // chip select for sd1 - -SdFat sd2; -const uint8_t SD2_CS = 4; // chip select for sd2 - -const uint8_t BUF_DIM = 100; -uint8_t buf[BUF_DIM]; - -const uint32_t FILE_SIZE = 1000000; -const uint16_t NWRITE = FILE_SIZE/BUF_DIM; -//------------------------------------------------------------------------------ -// print error msg, any SD error codes, and halt. -// store messages in flash -#define errorExit(msg) errorHalt(F(msg)) -#define initError(msg) initErrorHalt(F(msg)) -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - Serial.print(F("FreeRam: ")); - - Serial.println(FreeRam()); - - // fill buffer with known data - for (int i = 0; i < sizeof(buf); i++) { - buf[i] = i; - } - - Serial.println(F("type any character to start")); - 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.begin(SD1_CS)) { - sd1.initError("sd1:"); - } - // create Dir1 on sd1 if it does not exist - if (!sd1.exists("/Dir1")) { - if (!sd1.mkdir("/Dir1")) { - sd1.errorExit("sd1.mkdir"); - } - } - // initialize the second card - if (!sd2.begin(SD2_CS)) { - sd2.initError("sd2:"); - } -// create Dir2 on sd2 if it does not exist - if (!sd2.exists("/Dir2")) { - if (!sd2.mkdir("/Dir2")) { - sd2.errorExit("sd2.mkdir"); - } - } - // list root directory on both cards - Serial.println(F("------sd1 root-------")); - sd1.ls(); - Serial.println(F("------sd2 root-------")); - sd2.ls(); - - // make /Dir1 the default directory for sd1 - if (!sd1.chdir("/Dir1")) { - sd1.errorExit("sd1.chdir"); - } - - // make /Dir2 the default directory for sd2 - if (!sd2.chdir("/Dir2")) { - sd2.errorExit("sd2.chdir"); - } - - // list current directory on both cards - Serial.println(F("------sd1 Dir1-------")); - sd1.ls(); - Serial.println(F("------sd2 Dir2-------")); - sd2.ls(); - Serial.println(F("---------------------")); - - // remove rename.bin from /Dir2 directory of sd2 - if (sd2.exists("rename.bin")) { - if (!sd2.remove("rename.bin")) { - sd2.errorExit("remove rename.bin"); - } - } - // set the current working directory for open() to sd1 - sd1.chvol(); - - // create or open /Dir1/test.bin and truncate it to zero length - SdFile file1; - if (!file1.open("test.bin", O_RDWR | O_CREAT | O_TRUNC)) { - sd1.errorExit("file1"); - } - Serial.println(F("Writing test.bin to sd1")); - - // write data to /Dir1/test.bin on sd1 - for (int i = 0; i < NWRITE; i++) { - if (file1.write(buf, sizeof(buf)) != sizeof(buf)) { - sd1.errorExit("sd1.write"); - } - } - // set the current working directory for open() to sd2 - sd2.chvol(); - - // create or open /Dir2/copy.bin and truncate it to zero length - SdFile file2; - if (!file2.open("copy.bin", O_WRITE | O_CREAT | O_TRUNC)) { - sd2.errorExit("file2"); - } - Serial.println(F("Copying test.bin to copy.bin")); - - // copy file1 to file2 - file1.rewind(); - uint32_t t = millis(); - - while (1) { - int n = file1.read(buf, sizeof(buf)); - if (n < 0) { - sd1.errorExit("read1"); - } - if (n == 0) { - break; - } - if (file2.write(buf, n) != n) { - sd2.errorExit("write2"); - } - } - t = millis() - t; - Serial.print(F("File size: ")); - Serial.println(file2.fileSize()); - Serial.print(F("Copy time: ")); - Serial.print(t); - Serial.println(F(" millis")); - // close test.bin - file1.close(); - file2.close(); - // list current directory on both cards - Serial.println(F("------sd1 -------")); - sd1.ls("/", LS_R | LS_DATE | LS_SIZE); - Serial.println(F("------sd2 -------")); - sd2.ls("/", LS_R | LS_DATE | LS_SIZE); - Serial.println(F("---------------------")); - Serial.println(F("Renaming copy.bin")); - // rename the copy - if (!sd2.rename("copy.bin", "rename.bin")) { - sd2.errorExit("sd2.rename"); - } - // list current directory on both cards - Serial.println(F("------sd1 -------")); - sd1.ls("/", LS_R | LS_DATE | LS_SIZE); - Serial.println(F("------sd2 -------")); - sd2.ls("/", LS_R | LS_DATE | LS_SIZE); - Serial.println(F("---------------------")); - Serial.println(F("Done")); -} -//------------------------------------------------------------------------------ -void loop() {} diff --git a/libraries/SdFat/examples/bench/bench.ino b/libraries/SdFat/examples/bench/bench.ino deleted file mode 100644 index 24657f8..0000000 --- a/libraries/SdFat/examples/bench/bench.ino +++ /dev/null @@ -1,185 +0,0 @@ -/* - * This program is a simple binary write/read benchmark. - */ -#include -#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(F(s)) -//------------------------------------------------------------------------------ -void cidDmp() { - cid_t cid; - if (!sd.card()->readCID(&cid)) { - error("readCID failed"); - } - cout << F("\nManufacturer ID: "); - cout << hex << int(cid.mid) << dec << endl; - cout << F("OEM ID: ") << cid.oid[0] << cid.oid[1] << endl; - cout << F("Product: "); - for (uint8_t i = 0; i < 5; i++) { - cout << cid.pnm[i]; - } - cout << F("\nVersion: "); - cout << int(cid.prv_n) << '.' << int(cid.prv_m) << endl; - cout << F("Serial number: ") << hex << cid.psn << dec << endl; - cout << F("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 - delay(1000); - cout << F("\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) {} - - // F( stores strings in flash to save RAM - cout << F("Type any character to start\n"); - while (Serial.read() <= 0) {} - delay(400); // catch Due reset problem - - cout << F("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 << F("Type is FAT") << int(sd.vol()->fatType()) << endl; - cout << F("Card size: ") << sd.card()->cardSize()*512E-9; - cout << F(" 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 << F("File size ") << FILE_SIZE_MB << F(" MB\n"); - cout << F("Buffer size ") << BUF_SIZE << F(" bytes\n"); - cout << F("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 << F("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 << F("Done") << endl; - file.close(); -} \ No newline at end of file diff --git a/libraries/SdFat/examples/cin_cout/cin_cout.ino b/libraries/SdFat/examples/cin_cout/cin_cout.ino deleted file mode 100644 index 8fdac27..0000000 --- a/libraries/SdFat/examples/cin_cout/cin_cout.ino +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Demo of ArduinoInStream and ArduinoOutStream - */ -#include -#include - -// create serial output stream -ArduinoOutStream cout(Serial); - -// input line buffer -char cinBuf[40]; - -// create serial input stream -ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo -} -//------------------------------------------------------------------------------ -void loop() { - int32_t n; - - cout << "\nenter an integer\n"; - - cin.readline(); - - if (cin >> n) { - cout << "The number is: " << n; - } else { - // will fail if no digits or not in range [-2147483648, 2147483647] - cout << "Invalid input: " << cinBuf; - } - cout << endl; -} diff --git a/libraries/SdFat/examples/dataLogger/dataLogger.ino b/libraries/SdFat/examples/dataLogger/dataLogger.ino deleted file mode 100644 index ae21eef..0000000 --- a/libraries/SdFat/examples/dataLogger/dataLogger.ino +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Simple data logger. - */ -#include -#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) sd.errorHalt(F(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/libraries/SdFat/examples/directoryFunctions/directoryFunctions.ino b/libraries/SdFat/examples/directoryFunctions/directoryFunctions.ino deleted file mode 100644 index 25304ca..0000000 --- a/libraries/SdFat/examples/directoryFunctions/directoryFunctions.ino +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Example use of chdir(), ls(), mkdir(), and rmdir(). - */ -#include -#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) sd.errorHalt(F(msg)) -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - delay(1000); - - cout << F("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 << F("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 << F("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(); - if (!sd.vwd()->rmRfStar()) { - error("wipe failed"); - } - cout << F("***SD wiped clean.***\n\n"); - } - } - - // Create a new folder. - if (!sd.mkdir("Folder1")) { - error("Create Folder1 failed"); - } - cout << F("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 << F("Created Folder1/file1.txt\n"); - - // Change volume working directory to Folder1. - if (!sd.chdir("Folder1")) { - error("chdir failed for Folder1.\n"); - } - cout << F("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 << F("Created File2.txt in current directory\n"); - - cout << F("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 << F("\nfile1.txt and File2.txt removed.\n"); - - // Change current directory to root. - if (!sd.chdir()) { - error("chdir to root failed.\n"); - } - - cout << F("List of files on the SD.\n"); - sd.ls(LS_R); - - // Remove Folder1. - if (!sd.rmdir("Folder1")) { - error("rmdir for Folder1 failed\n"); - } - - cout << F("\nFolder1 removed, SD empty.\n"); - cout << F("Done!\n"); -} -//------------------------------------------------------------------------------ -// Nothing happens in loop. -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/examples/fgets/fgets.ino b/libraries/SdFat/examples/fgets/fgets.ino deleted file mode 100644 index 2f535cb..0000000 --- a/libraries/SdFat/examples/fgets/fgets.ino +++ /dev/null @@ -1,81 +0,0 @@ -// Demo of fgets function to read lines from a file. -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -SdFat sd; -// print stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -// store error strings in flash memory -#define error(s) sd.errorHalt(F(s)) -//------------------------------------------------------------------------------ -void demoFgets() { - char line[25]; - int n; - // open test file - SdFile rdfile("fgets.txt", O_READ); - - // check for open error - if (!rdfile.isOpen()) { - error("demoFgets"); - } - - cout << endl << F( - "Lines with '>' end with a '\\n' character\n" - "Lines with '#' do not end with a '\\n' character\n" - "\n"); - - // read lines from the file - while ((n = rdfile.fgets(line, sizeof(line))) > 0) { - if (line[n - 1] == '\n') { - cout << '>' << line; - } else { - cout << '#' << line << endl; - } - } -} -//------------------------------------------------------------------------------ -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.print(F( - "Line with CRLF\r\n" - "Line with only LF\n" - "Long line that will require an extra read\n" - "\n" // empty line - "Line at EOF without NL" - )); - wrfile.close(); -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - while (!Serial) {} // Wait for Leonardo - - cout << F("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 << F("\nDone\n"); -} -void loop(void) {} diff --git a/libraries/SdFat/examples/formatting/formatting.ino b/libraries/SdFat/examples/formatting/formatting.ino deleted file mode 100644 index b01f1b0..0000000 --- a/libraries/SdFat/examples/formatting/formatting.ino +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Print a table with various formatting options - * Format dates - */ -#include -#include - -// create Serial stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -// print a table to demonstrate format manipulators -void example(void) { - const int max = 10; - const int width = 4; - - for (int row = 1; row <= max; row++) { - for (int col = 1; col <= max; col++) { - cout << setw(width) << row * col << (col == max ? '\n' : ' '); - } - } - cout << endl; -} -//------------------------------------------------------------------------------ -// print a date as mm/dd/yyyy with zero fill in mm and dd -// shows how to set and restore the fill character -void showDate(int m, int d, int y) { - // convert two digit year - if (y < 100) { - y += 2000; - } - - // set new fill to '0' save old fill character - char old = cout.fill('0'); - - // print date - cout << setw(2) << m << '/' << setw(2) << d << '/' << y << endl; - - // restore old fill character - cout.fill(old); -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - - while (!Serial) {} // wait for Leonardo - delay(2000); - - cout << endl << "default formatting" << endl; - example(); - - cout << showpos << "showpos" << endl; - example(); - - cout << hex << left << showbase << "hex left showbase" << endl; - example(); - - cout << internal << setfill('0') << uppercase; - cout << "uppercase hex internal showbase fill('0')" < -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -// create a serial stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -void makeTestFile() { - ofstream sdout("getline.txt"); - // use flash for text to save RAM - sdout << F( - "short line\n" - "\n" - "17 character line\n" - "too long for buffer\n" - "line with no nl"); - - sdout.close(); -} -//------------------------------------------------------------------------------ -void testGetline() { - const int line_buffer_size = 18; - char buffer[line_buffer_size]; - ifstream sdin("getline.txt"); - int line_number = 0; - - while (sdin.getline(buffer, line_buffer_size, '\n') || sdin.gcount()) { - int count = sdin.gcount(); - if (sdin.fail()) { - cout << "Partial long line"; - sdin.clear(sdin.rdstate() & ~ios_base::failbit); - } else if (sdin.eof()) { - cout << "Partial final line"; // sdin.fail() is false - } else { - count--; // Don’t include newline in count - cout << "Line " << ++line_number; - } - cout << " (" << count << " chars): " << buffer << endl; - } -} -//------------------------------------------------------------------------------ -void setup(void) { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - // pstr stores strings in flash to save RAM - cout << F("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(); - } - - // make the test file - makeTestFile(); - - // run the example - testGetline(); - cout << "\nDone!\n"; -} -//------------------------------------------------------------------------------ -void loop(void) {} diff --git a/libraries/SdFat/examples/readCSV/readCSV.ino b/libraries/SdFat/examples/readCSV/readCSV.ino deleted file mode 100644 index 07985c0..0000000 --- a/libraries/SdFat/examples/readCSV/readCSV.ino +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This example reads a simple CSV, comma-separated values, file. - * Each line of the file has a label and three values, a long and two floats. - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system object -SdFat sd; - -// create Serial stream -ArduinoOutStream cout(Serial); - -char fileName[] = "testfile.csv"; -//------------------------------------------------------------------------------ -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) -//------------------------------------------------------------------------------ -// read and print CSV test file -void readFile() { - long lg; - float f1, f2; - char text[10]; - char c1, c2, c3; // space for commas. - - // open input file - ifstream sdin(fileName); - - // check for open error - if (!sdin.is_open()) { - error("open"); - } - - // read until input fails - 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 != ',' || c3 != ',') { - error("comma"); - } - - // print in six character wide columns - 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"); - } -} -//------------------------------------------------------------------------------ -// write test file -void writeFile() { - - // create or open and truncate output file - ofstream sdout(fileName); - - // write file from string stored in flash - sdout << F( - "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"); - } - - sdout.close(); -} -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - cout << F("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(); - } - - // create test file - writeFile(); - - cout << endl; - - // read and print test - readFile(); - - cout << "\nDone!" << endl; -} -void loop() {} \ No newline at end of file diff --git a/libraries/SdFat/examples/rename/rename.ino b/libraries/SdFat/examples/rename/rename.ino deleted file mode 100644 index f29a72c..0000000 --- a/libraries/SdFat/examples/rename/rename.ino +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This program demonstrates use of SdFile::rename() - * and SdFat::rename(). - */ -#include -#include - -// SD chip select pin -const uint8_t chipSelect = SS; - -// file system -SdFat sd; - -// Serial print stream -ArduinoOutStream cout(Serial); -//------------------------------------------------------------------------------ -// store error strings in flash to save RAM -#define error(s) sd.errorHalt(F(s)) -//------------------------------------------------------------------------------ -void setup() { - Serial.begin(9600); - while (!Serial) {} // wait for Leonardo - - cout << F("Insert an empty SD. Type any character to start.") << endl; - 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(); - } - - // Remove file/dirs from previous run. - if (sd.exists("dir2/DIR3/NAME3.txt")) { - cout << F("Removing /dir2/DIR3/NAME3.txt") << endl; - if (!sd.remove("dir2/DIR3/NAME3.txt") || - !sd.rmdir("dir2/DIR3/") || - !sd.rmdir("dir2/")) { - error("remove/rmdir failed"); - } - } - // create a file and write one line to the file - SdFile file("Name1.txt", O_WRITE | O_CREAT); - if (!file.isOpen()) { - error("Name1.txt"); - } - file.println("A test line for Name1.txt"); - - // rename the file name2.txt and add a line. - // sd.vwd() is the volume working directory, root. - if (!file.rename(sd.vwd(), "name2.txt")) { - error("name2.txt"); - } - file.println("A test line for name2.txt"); - - // list files - cout << F("------") << endl; - sd.ls(LS_R); - - // make a new directory - "Dir1" - if (!sd.mkdir("Dir1")) { - error("Dir1"); - } - - // move file into Dir1, rename it NAME3.txt and add a line - if (!file.rename(sd.vwd(), "Dir1/NAME3.txt")) { - error("NAME3.txt"); - } - file.println("A line for Dir1/NAME3.txt"); - - // list files - cout << F("------") << endl; - sd.ls(LS_R); - - // make directory "dir2" - if (!sd.mkdir("dir2")) { - error("dir2"); - } - - // close file before rename(oldPath, newPath) - file.close(); - - // move Dir1 into dir2 and rename it DIR3 - if (!sd.rename("Dir1", "dir2/DIR3")) { - error("dir2/DIR3"); - } - - // open file for append in new location and add a line - if (!file.open("dir2/DIR3/NAME3.txt", O_WRITE | O_APPEND)) { - error("dir2/DIR3/NAME3.txt"); - } - file.println("A line for dir2/DIR3/NAME3.txt"); - file.close(); - - // list files - cout << F("------") << endl; - sd.ls(LS_R); - - cout << F("Done") << endl; -} -void loop() {} diff --git a/libraries/SdFat/html/_arduino_files_8h.html b/libraries/SdFat/html/_arduino_files_8h.html deleted file mode 100644 index 643b17d..0000000 --- a/libraries/SdFat/html/_arduino_files_8h.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/utility/ArduinoFiles.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
ArduinoFiles.h File Reference
-
-
- -

PrintFile class. -More...

-
#include "FatLibConfig.h"
-#include "FatFile.h"
-#include <limits.h>
-
-Include dependency graph for ArduinoFiles.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - -

-Classes

class  File
 Arduino SD.h style File API. More...
 
class  PrintFile
 FatFile with Print. More...
 
- - - - - -

-Macros

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

Detailed Description

-

PrintFile 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/libraries/SdFat/html/_arduino_files_8h__dep__incl.png b/libraries/SdFat/html/_arduino_files_8h__dep__incl.png deleted file mode 100644 index 9af0db2b09758aaed9024b1d580c98583f00d463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2150 zcmchYXHXN^7Jx&Rj*$cqlqN-r4KyGiD@X|?KoEl>B@i_fDOnUqo)QukL7GdG08;Xd zG=-3W2to2NVnGck0-;Ev=XK&Xo%DHk7Z_k;Yf&HG$p-*rHQ+G&Q4+tfVcBi$<8mZ;;Sne;|dm+E(dYqSYXFfA(Pml_D5;OivB0=_Lo}js7Hoz1O+-I=i} zV<`_G+QhG|%yGsv#~TAWNepPz^07%j^Tqu`^V)IgZ@w!Plq=#co;*cmUW|~}UnH`@ zGmXj`wJ5yD)bNu^A&Psc+xk?Ef>lQ$M=gM2brv)?&@!w#Nm~^NH79t32!72Hrb_|z z7$Iz6O$}htfgUe}7DUqIOy9j_dt%BcYI~{415wBT#+IO|*kd#(x^$+snxO4Jglv%O z-@y|7?o#{ICK=MVkJr%rWG`8J;69Ve%!R6W=pG{X6m}Uff6uaa6PG-Jx@JzR!KpCX zKY4eShQoh`7Q|O~tWr;-K1_h|ZkOwnA}aiYe%mlPjuD*Q&kZq^MvG(G%)1kM2+Om& zBin-~IQd3#8|y^9>#8y~Cl$wkN&@z76|zH;SBaTjZR1QUEUy_9iCLgCOvsc?V*$Fv z$7K#DsIVLAFZf(Sj*0agxj0;~RApr8rlvn z;qD_?eq*B5{UX#2URY5(-6?J{d_zvlG4s^4W26^u;kIhH-+Tb9H{|OORpTiJX?gB6Qoz`xd;7K;~02^tMXi zP|4(rt{NeBm8+)XrMl$eFRUk*bJ8X(de`q_>qP*`&i2X44%74t6^)UY*!d?@*za5; z9WQCJ|EO2yBn?XsXOP*w)hCD&$(1mZKoMRvJF?P@6jcaF^nv4HZ%7HV!}q@^^1sm) zsZxk>@#@@;s)b?^Y13Fnj|PQ5y<;npWY~xjl){=0Y5E&GS-P)sEx{j@-@aX$e08~P zDK)*i&^y${C2cC`5$P+V5={giya3GSER+lei#6+xAPn=HX$C}r2KWNd-!vMMho>~6 z`sm2@1xU(DYE<-?-|=H*Y-FeSO=wf~cOGvhf9g$Qd_ZT5ZIWt}Zr23Q>6TSS`ex2i zcoA30b`jDi|I2PIM53;qdQMmiZM8QZ2#Lau5Fa$-me27?3vwx!b<|~5(xrh? zJzK+a4Okqj!ITnan}~b=R4_!h?nA5_l%q2~z5K_AqPR8gKHmm% z5aT4sTY)7SFkfp28fO?f_B-$Xk4Kki0tbr!q?5bG(xsx1eMS7j@Zho-EJGyoQB3E! znrr2(pGl0(CE#yAn{mqin@;?B?U=vmghc*tbn<<-?Z4CMjGr#Z(UsVUpMJ1PwRMO# zNkgci#Ly7GoMz?B6LpIp88L|EV@-^XcS?8n$1SpQP9+nh^(#*|or}EYZERaR6=jdr z4KcpyaMt+t!6NslR*ht`=twFiSA}bO!!EQ4ddtGU^R(4^?^!Vyp66yR#6bu|%J3@S*F7 z&)nvZi}Q}I@Cma%XAAEr;q$!ij$&uke2MY>7#y)vt$ybQhAABOVu!UKC0QkzmDU8i z(nr^F%i!H4Om@7eZydFV8+M!1AM}ZqhAZvOTLWwG9MPh;s=of;vXy0X$WAE@M_L#T5@T$dyBRwzNvTE7w#2L6M>SG~|7LM-C+l-40v%XV<)f<&4=7jph zRP(RRD#G7qUh%z6dL{y&r%gAP>5jHM;>6ZOzbGq}WOw}38;8pcF3FrWbEJKd3*7Ok zN4vjAKma-%`*TwM03X9%i6oS1%7#-DA-z}ANhUK2J1rFSME9{qKjt)`hr9uhDf48B SL2d`P4&hFoFowg~tA7BN5(&8g diff --git a/libraries/SdFat/html/_arduino_files_8h__incl.png b/libraries/SdFat/html/_arduino_files_8h__incl.png deleted file mode 100644 index 6175a2841d1459c341778e572b63f53ae6c7c11d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27174 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 IJv9saFA9 - - - - - -SdFat: Arduino/libraries/SdFat/utility/ArduinoStream.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
ArduinoStream.h File Reference
-
-
- -

ArduinoInStream and ArduinoOutStream classes. -More...

-
#include "FatLibConfig.h"
-#include <Arduino.h>
-#include "bufstream.h"
-
-Include dependency graph for ArduinoStream.h:
-
-
- - -
-
- - - - - - - -

-Classes

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

Detailed Description

-
- - - - diff --git a/libraries/SdFat/html/_arduino_stream_8h__incl.png b/libraries/SdFat/html/_arduino_stream_8h__incl.png deleted file mode 100644 index d51a6f1387055decc27f709ff84ab16734d81d94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41826 zcmd43bySp5_cnYFEhR%s2o5L+C=vn+2+AOcfW!=464EUoJ)*!cbPAFVJ#+{HN=P?I zNh2+dGzh%+`23!4tuNR6=cmi1%-rYP`|PvNj%#1X5H(c=DsmQb005|-DZ(`XfPe!0 zGeSlJexhoNjRyZBF@3H82QKlyGrr}<0strQ4E`ALCS_yV)5icgEwj^qG^6~3s&*iz zM*P!Z6HG~+uS4TdMSUER2P^nH+@&Qf2OUu0csI#qOG^%8fOn}9Tg-~<5<{zDO22ML zO(j*{d`4j(+cULyejZK#BTBg{=|P3hOo_IUy^CeviTRIZzm*i%eq!|h%P&mGPik3s z9Dnh8J!8->yU7Q6f4>yh!6=(I?N&M%87bh1uGbfTPkz1(X180(5dPD}Ut%&|ZXtUm z)r{YcloQsK&F=maa<<*ju*nRU?=53TfiEIw4JC%bU|r}|0w@$}(PH`*{7~4mOcpMR zBBYk!%W@6R#txte@2b7>~f-#c<-tor6Y5ma4*+K^aR2|A6NM~@{=W2EY_@+TJO0h+m0X2`y5~}+u zQTeIS)VY>6mKp6-VsYue%Lv)~myZUtFHKDa?5W}`O1DG2oLBnhk{CmYdIwtdDgBXrKpOqF;?vd6MjmuL!3M1~gHM zJrrV0v0;7yDi`icDYjvFmxLvUqxe^SX8-H?ez%um3EL$p&TqM((5GUNMr414CWJ=s zGs}H8^KQu*@XHAd;{peoMde3zJdGAgxbe3>X!7ao#nTuW&Aw=#tM3ky^1nqhubovG zHqzr_YR1H%gTTIm%qi4SUB&aDh3>`N-@SfPrB$|WYqJ06O&adEV(h2-9PcVtVeZZG z-tM!Enq;f{QM+k}6(P8>Sas&D;|Tzsic_B za`d7=f_1FVuN-AKoJ;hhB>k&};vnC2<5iCqHXE*-=w*)1vbWbK#hcY+f|bwX_#^%) z_$cJl_7%6h*jdF1w$8EkAInZ@V;)7{oyZgHrsQ2S7BXu*8GKQAwaI7v+(ti`@K{SC zr&Og|yowhPrmpPK(xU|xnX1!dTw7P;lc0JGC-UANApKa!(HRH7F#{FR4$^}w)ig)r z*F)(ByRPy!x*yxJ%q|q{dZcJ#9ynmK8M)+rJHeW5QfWCt2M#CX#nh?(d5_e4GxiMB zGM{8h5GSlW>+;|d9*6;rHTtFiZJrL^0KtB$L)&+LJD+@(64 zSge?(s_)Xr`j3ehF{+-Z zV+i-=R#M7e$BakPh-BE0B3!goi{Jy8v|zFgpWrzXq5Recea}Z+@O`Nt2_r( z$otwmPuMF#*+*A02%;{5H;e=N?CqZQ*%sYP&DZWT=U7$@tB&XAB?>njm303ZoPB?V zqo%H)z-*UMf8(P0S?uALd*Ir9GiDYu9a&g%Z=iYCb5x~0{v7X4pB<{++#og)2lNS6 zX`*u>d!i^yjr?I_?UIWnZ}*`evOY3?tN_vDX6?OkM^QZwEc!2bBV93nySTV`H*f6hp`cv4r4Vc zf-$(+X)Cq)`hceZOSr#ClHHeH_hOee&?^i7IVYxrxAjuUjXx*a6SIr*#3fRiaAgP* z92W_l+HucIb>A@SN*Emt)rRcJu!fIbD8n6hzy6$pn|59O6468r8dGJG^$??juI{yQ zeeNkzr$ge`+GaG+L2k}|T-Qlkhig&M_BSGd&VDyHL{36rCwE`yQ?nN#bGQ1}f8L~h zaFAF%Q(HdmUhdL-p8{^tx5wxUzyHm+-;0oq(nKF1iTVJM%Ct#S&0YF^-oDEsWhnUWwr7DqlI?x%!CxI$eAo4!2^Lzgd<)k02vQA~5v@jRl z*SAk$Zy!1~-ltUg%+|J9#>Pf<7J1(#8TV-AY?m$|_#zRNYYy z!6!>0tUJM8viw zGWn{YC?}=X$J4iZ(>y!OmJy9f*&eemSz`kdeSz_-(vz$Wq;n6DQa7z)&(A7pXUT^Y0OttX9_tl-N=@JN7N90lBUG%z zJtFSlK=uw56=@oG%_npsf-s+S0Mx|9@y5O3GvEts>(gVW&H_-GFjYAkhA(StA{X7x zuylr|CR}X^A5MPY7Az7s-`+MCJvtgBZnwf+{;8(srMyb-@4c{)zmMf-{HIp`6KhK+UkNyJom=h;18Ep$qGwBspD@) zDYKZl$NizcBGFb~2f^XrP2YBugQ8Wwo?siU;DwU1zO#o6d4CSLt3IL-z`3hEqxsg# ziC;@#i@>RHyWKAfv+gTXWk@4BI@yQh14HkUZa;NM-wjyb3~)#;m&y;jfs(=UW2X4x7Hm;PB6t2B#d|LLpsB!s9znL~EU78hzF7|1r0>{~NWu z9K<+TgMotPtFBA4dmeIjkffJL!AZ0q3G)iaJ&I9O_D<3kpc#)>zU$Yz$GA!L{%YW- zM~3>|%PSv~1-(IkU<&S*RU&rqrvUT;?LafI@d+0T-?@b%m0$dO?={ClEg|-MtfIl6 zS8fO6XA-KX7x!ML{W-7r=c(-^wS``m$%>+{7VE9nWI-FNQ1$$@^`auC zl8@lR&iVNGwt=37G;I$!Y;a!zlo)^DuA)~`Ybwxeg?zz;KiN?f9ma^V9_JnO!rV2Z zABu<+Exb>yZieGZnC0?6;3bSvm%!I*4An>_4Sjt%2Epk%5*ZyH4WJ>v)1R; zkkSH_ZXTeYJI(NJkX_hlE({A`a`oJC-$N&9vq9>2m!`C?i0W1L!ds3FWAG)ZG#$JfU%U{*Zx`MU6V{E);OBU)%gla~7CXv?Xo8`eC1-)EU-}07)H$#cS59*Dp zp;4{%#w#R`hb*c@7-+$f2p|8!*JeGRU|w)-?e-h6L}0ETbJXTh#-0$gsaE#`8%;q zF%aG9C+vPQ`5+`uikmiEX76k5GnB#avt5sO8NV1OlkC9qWV9#Id4hW^+y~OAJzDZX z5R-TZ_{xj@fd103awj#UBL|NC?VZL{K=e9)yM2uGar1PQ$T+NuP|frAw9$!`>w+}?2#9cKXKL&or^?d+N%J~k7MT_{ZN=E!O$~r4fNZ_9-OO4J; z85wR_W_kB=x_sO@rDn-vWY9;P<-n09nhQAbfer4&ZNg8$0Plj$dG)eLXloGFL;CtU z$^&`usPV*?*?qd&>p*a}A~hQQh$g(vh^}cvITG4r`*`5E%*TRHfC5%8vr8>|q<)|D zChdoB=921V0t1P|!zl+sNY_FfC>SYFgqq?r zO(1@}!&YL#$w#g4_-!W>tVn~J`YBj~ez_ND-SLx7uOV02K8*-Q2vLz8Dc@o$sY<=g zp(8MW9vMxmNfqjI7N9{Zg|4(3k(AOs@^Mg;z5J*sx@mVqt0})I`~`)aFJt5B>ss#y zmqe{4Q6j46{r=Q!RI6n#(Y`<->Hb~liJ!&NBB^$9;dUjcmo}vY-24;h^u|;MMh%`Y zp@g*hn9MqX&zl1l5K`LeP+gK?4(j1t`<1Sn;DR!I{F{hOzDKvst-~b1Slc0unnED& zpZGD7!Luz+_Y;{y6h$)nmK9pEH1z6TshE9NE&smgx!Vt%5^+{@(^Acrr}BINm-7mr zt?|Y@>~c;y!JX;?Fqj9ym-=#-Kh5~{C2zNZ3L1o0BqH<$znEkrU#(|uRFO5fy#oT5w|itYR}5g3LJx)qR& z+$ENslW?inlxlsco9A^n#?Etq#<{ld|6bWBd(|7bJ)s(ZhfSB)aQ<_&oI2%A?m4FFny#l>ZEz!C#|t+2Cs1SD zBdGOBNPh7nZ`<}Ok%ar)`*y|U8t{aN)Ww3iMbARWdl~?rDR*>qqST2Afcb38@tNHs z%ZPaAN;1U8rf;H?c~1ZZ`jg!=u*jwe4UAFSeq(fI2{~azaRIMG=RDfxYR$`cp8+-x zIMr)30V*J^f<3FHmykvQk}@e(vc)UwKo`9L=BJ7OK2$Fuw~h z0<{zwMYujke!lOv|H%v3J3?Y%5ui@~xaeYU_@vXB^YHg~^MbAy9TeK40?m2_JXixTusZsqgWL>cj zMdNM229P3OEujqw_kcXtNLYXlb~yJw@uMI97+CKkbLfVg%EK8yzm=RY-Y23#d=!u% zw0nO166bXbMF=T`HpLew8~r(){6JdO3>{1itJF~oyExj*DM-g`9-Zmbuc(k$=>R}~ z=s9`g7~tUmbM8#8+6yDfy&+Hl`Vo;fAAMwfKCWWWRlZqB-~RqV-%|H_o&5?I7ArhO z=OCuqBl?7nC&+Dmtgepm*Y_Uweg4X;zikBT34G;d?Ees4%*wqPC9RPV;68 zAWC@xJdg14O4HW)Vo<%#u&q#g`^^=?x>c-*pnj?;0B}4? zI=b}EF>CgnQacZ?oW9sJx2Z0PmU6!*uPy+{in7$n6P*Qr+N!icY8Grt$^8@NVS`M8hezOcc8;nAu$shcP` z!ab|MUGc@nk8LwL_QiG4Cn4}=P1qk1qya*cF4UBO$vp zpe|cX-n>7U@`@8HaBTzg?pFjYrF$TJ_K=kSmaug7B?Cp~9p*1%gn-F2r7VX>oR?O% z>v^O*zLOy&-#LcKdOtEG|CkO>&vnz4tae6fCkhJ zV3Lf(-Igpd(4DoGR5Jz_9I!3;vG}7A(VVC(6{iYJRg=b`yvLAjD5gb5|aAN@r%? z{-0uT{5==Nc~6Sx+VIwv^NPFM?`tp}(vI<=9F+_EPsM6CVb~wh%Bl`K=ZBf>qzw=! zfP4`{w^cDrL)T& z&$0@(DQ`VuQU=-t5%JpuiiCd}+P-L4R~dbs0oTHJEhVTU5}O|Mvt@7XF7YCKWQQ)W zG^#!<_r`Kv{kFdx(vQr99|&dVaeMZ>n_>H>>Qgv;si>fPSX-;sn9kXsV2*y$6H|Z6 zLe(GYe|;bnu;amgU^TnT`@Sn2t&~7;Oo|F8vURM;?4Uf}Cxo&A(%~T~lb|&h z;*10X4But!3W`<4wNN}XsOOlZ7zjmLhy&Vn#ecul)O>1nzYF8@Yye7&Hfad+aTBkU zkRv_U)<>lq2*`pBl*Rr2wioccxY$Uu9W}U=eK=hv#Bohwl?qrHr;fgp#^lWwb%!>j zvkr35rWH}17?f8W;kaIV9EiJ4)xiO&(1$sXKd*9ys*m&jj2)}AHm)Ibx>c-y)bsb3 zl;1*|FPCP{mlFGL2jVl70c`;d`le-?@gng3lEKvpx|nAMmi!9OA_aQzRylHWh0qH_ zHbcUForua~vQHk4Aj1v@N}|79(l==bWb9sT_BZ+~3jH?hwv@@1+AG~(P)8dj=;5wq zKRe^sq{n(qY5zy3SNoCK?AlfvKk7n8)_-2&&ol6V!#Qa3B`Bi&i61Yda(T{VJ^O77 z6jIBj#AaFz2Ma}WgqTcyaZaVMw{Ws|OX0tNzpO^zt_)0A>x(e@nzz|L+aQO0L4~DP zrG}&P)a)vHuhk3n-G`kvd(55>p&9!>fBr_}P_wjkBV$D+wRZjU`slYEhhi7nQor+x z_3EFd*8v~L`Ic`bx(yfOUyUb>g}Er|8?0(qS`%2_HRN^awMVnlhO})L>JBBA;$Jb4 zrNQ8adt>>X$hFxj%~m4 zfVn)(WksV&#wyY%95Hj2j|blTvYOoe`iAYE%!_Pu{d%Ep>Hg4k0;^b|-;tp8UihDE z)a5BKg8AXp;GXFVg45@+4yzl5^R+}U?2XqR>mER2U*C?lnRPDC=1)BChn8+gMLB)A zup;*@W2#kF*w)p(X^-e)-MkX?)0K+>=TZc6R5Ieh!)U8hH_H_f!>U*)l%ZU=Vy!)U z$gmnWFJ7Q+?7potv9|gKCT;!WIyGurHRa3Eh}iOv?ryqQp?8*x=%O!^ge_)zL1oV- zl%$0^m^ba2rtf@>u!Qdz%3eq&rIbIXF*q#TG=RffGwSLV-pKN>W`1~;DLsPWhZK6G zAf#9~)nA3Q#IZuYvIKn`8w|u=(@hk~t^eUBb1nikDB-(wW;-_kOG04h{b%+fG#c~# zn~1f>N;t~Z(bjgMcihVP{M1qt+<%35^l&(9_1+Sz*w>D_{pDf0+Ezwyuo{=q%-L|? zt9A45>Rx@K9wsmhmQMA1s_mgLFA~mNo>;1Ms(_qoyA{yQ-Ab!IR0JkN5<|W^aV34f! zKZC}P87b13Bp=`ZTY*#6iuZk&@teRz*GiHJ?2Sn>HEQA$j2f%2pj(kA5(lvZ-f(Fj z@~Iel6p1Y3@Mv4^Qf+krA0r+ZSn=Gw2^15)4q1OFxw6I~234=g%Ma-#UJPwp%@a3a zxqd_dNWwEMeQ#8s(*Ri-@ndMtRMlk1<=T>f+y9KRtf1iBLN-#P^;ZadNEa;j0^gLp zhGDU$lzjv{{iCBfLYoEm;yAx7BB4`)ruE6)etGR5?=#gGU~J)8)H*bs7RJQt0>^$E z>k$i5xqO?jzA5u^q1?-i5Oi1I%AHd*S%i9gXmoJvueJ_(;IO3lk!_^GkvuSGM3OOa z#B)8q+o+I{0<1E2L0}GtNk%MT%w4+bA3Ob?6cd3$;}h=XVBo?v7dbxr3Cdzpx3T?o z#V!=9Qi|MnJ?R?1;k>-=o|S2V=8;m5WL}d4A~Z%~L1=jo_28U<& zB<>)9)HZ}ce7|38=NvWiZ@Lgmw`Ic;Uv%Q>Jyd*KVyx?k!b~XfY>DKP`##Vpajxj% z{>mz&!+sx2P8gpXeq}HnvQ;FAr>&fjyy$)+%Ytxr0g=F`erIK-h( z49XdW68DD+s>M%2ri83DP6zNPyL9?F9W*}lH46`6qPcQb=hMrGii>JslyJ*h>{L*^ z*w&BG#Kq%iqGS4%TgQN;bVbqW zsL2a7x+^Vj%@go*Jo9@9`lmShCKVhlX*H^^#(5!UhRWpK!h79xOvg+736=7{jml(i zXT!&*)`fF2JW?^j#9C zH*N>lE-fUV=O>Ha_91F~XvSAwd+wSL8tB!&H)_NaAecX23ZhSus|bFZN%7X6If zfdw9eXEJYh^g*?~4F>EC4SknW>_o+KOg~jrERX{t@+pD`4kVA^@CQGprTwmRwqrW% z(^eXOdG2cR@oVM+dbfZ0CT;pO-@rC##nX9(vUP#&of8XS9iDPtJ~)#H9_2_5{(xAB z4-eU0UrE-NXtb46gqaWUvfr|tD&qs;DIN0fv~yOM&6k(B!nkZ;N->Lny^d1Dxcdpd zN%51P(Z+^x6t~6z+m=6bRd{jaf?tiUax3%dzP5ky= z4m9L4Iiw@;`|9F8A*ing@<@(x^iCL7C(i?snhogPQl;!?w*^rpmg~?EOh>TaZfM36 zA}I1ikNM*gh{9O0o&-H-(1s*}&Av?=$>-Lwxez-;P1jL(Gkfb6aBoYbpCJ$F1~t7r zFrbR1)EJDBT-UD8qpes5#P=9&==JoIFSrBz(H-LUmbWc5b5%W|vf9jRU(2fQV@+R9 zR0itfKBgCR34)R8cbU5?9Nx@>v~Ew9l=G)*rk#cv||gj_u`@0$;V0~f0hoW zfr}dfsqGV^XiOlE@2DMy{r!6J%xp6ejegq0dfaUa{AL{N|6D2h=)vag_+<4bZ4>X5Zqx z!-_Nz^F4i_zhhIkK_^sF&~?Min#&B#kK85;Of7-XwjWoZ>Tf0J8{Mkp!rJP#9}$kF zhJ~{lOOwlf+E8&KMA5ZPD0+A-6-6t0Xj)jTSpj1a(u@ZdVPEeCOgwO1rRa_jXgqxC1udM+pa>((UHGA1P)Tnxxz2zSvbN zB)hWF0ZtQ>W5~$baAi{Dt~_+AJunToNLuiEk^nKv3Y z#wiNG9vY_o>7)b{I_RXF`tZaL*nEjDndsB75wlY)Apnr$UX}KgdIEM+t6P*AUCf@Z zD#PhOm#468aJmWP!pe(^>~|l^N+MMbLy3{o42>W0b@cyCnBS#>+L{N|Gufx%Wqv>E zT{JN;N%+RCk_wFRWS`kN709>Fz&^|cnaRyLHe1jnp^t;fa>5Qzu03U3%!KI(O$3FY zmEN0w3J;JJV&Y{OoJ1bjR=ta3LB7U>U980`b5T@;4PLU^H^V_|wV-q$F8#KheqcSR ztE8MOB)rz!Axuy4aNIe|_unhg7nuYTD`pw(hcY?m7d`u*qbnyHQr}LnL_|x8t;BTZ zFv;)K;*uOCpNIVJ8te#ACMxy&H;}V+nU(H9=JD0n%BSb!m%Ewv9vKS{8&{go{m64n z?vYdzN=&#%Xux2psAW@g2pwR7=aD^>D{^Dr(nCjAiNxGz9M_4ACUlWRZT^E+-D5O9 zeXNKk{?aBvtZ7XPW%yFRy`ivI=PEixbMrRXoQ5_g<8sut-m34zO}w`B9zK+t!F~io z+?}DQMmn!CF#zyZ<*(0LgTsJD=TE1s5Hc9PF)@DD9z z6&$_j9Z^7z2o&Wd##9_qteW|ykBQ`hb-o2~2iN!VWHs_p;dgfcj0v?&jq1RZo%lvA z9hYYAbx$Ae@`IJS+L`+7qRqqE$f}~>LoX!mQ;vO`p7C3e9`8vc^zYJ?!C^=tYy@+E zr4F9?;;BzAF(gh3Rjdc+B1Z@}N18!r+-YD{)g%YobMNR5Eed|VoD#xPf#=ZBw1rhU zoXdQrHAS_Zt^U_O_cWJgklKb-Pu@QDD>NGM)FA3^E;V(44T|PGfdKF*+CfDz+640G zeJ&uyc_HQej>7HdY`P$$5A@Q5EAaosx@4SJ`msw=$ zJ7CH}@xExruY{YqSk&VnDmDwcuz(l<6$xyEtf_1-Ls z@09rB0nM@eu6Ph4_U4WaHSTnm!F?o=C?7}{+A>4=nSz}nOHk)8mz3b5lxa+}Jn=u) zAw@LNaKyn6&r9@8l;1NV8LEIz8RE5}6P1@5Y`V-k$dO^D+S-R=EL>*Hr33>d=0pQmj^}wv|wV4Ql3HB9GV)gN45Ev*gvfq?P z-6e9;w6q-gy}8L$_&HtyUi0b(A<|QeNCA{u6)&|#@6mddqpkj#Kn4$PZ488K7VH_x z8*`$GgIm9IB6itOktY|}-{1kG0Cxvb+_E?ChWjI&!3yzk5FSU+h&#|ij&wU3-8B0N zQ9{4A{`;W&tDa+r;XTu%&{cVummf@M2?d{z5w~BNfD>6mi*=cm@t`4a>Im(rNX<6b z;oySC$6JZI=P9m<<8*TQyuq+5__J>~olgT$U=&twb&bgMp6FA*`%ma55VqX;`V$HJ z!rI93<9AmoNEQg-r$?n(lkLpVTnhmyK;u+-E6FobbD_%cn&XXQU^5>? zUPneOU+jPVse!Dai%K@sew3;x`gh#DI9fPJTaGdqcR|(IzS5HqG6%AUok3=#5?D#N zYpG0=b-af9JRoDaFp(UxdJqw-g}m^)9w4;r7_k6<_;A#hpm7#lqXmAAFmVu=(fP)A zK{OYBZtRfYhdq{s-5L+^P-|5BjQRC%H~w?C$~a_kUXmqkfDThOTd}F zknL0DW(j=-HMUg|mv+_~Ch5lQre} zmg&SzZQ+`_0+f%D7q_s%parafUR`}~=e+hCvaUp1K6_zxg)XEm7~h38<6e?ze1Byd zSy?@)s`)c)u;Br9&WrTxd!vQc%0K%wadpOTB^d)legj07`+Gjx0M9mMs05)4JF|TfadMvkAR^NmAd_?G5oN<2SEE5!pl}<{ z%VtOcXBRcw;YUg<5y@N$ppxOweNM)%pwY(5$M?P=Gg#h;bU(97GfwzI4y3HmhPNG2 z$QhD13X!DSgEeZ8dyWr9GeW6lspEU;?{$E>JQW*<=XD0$!vkshlM|tUG+|>=YAQ0f zs@k}8)V)(QfzeTly9j6)ijkIJ8G%yDjX$-@;Qi@-W2G>At1S6=(x8&LSKi zmLY=c1>w&zr4E8+i9fY`Q=e@o9}&#mpY&9MGD*;?tAd@c8PKN$2kV}PO2oK&lFC(1~Hhmy?<08P-{u{(=o;OXc}!UrGRpA7UA1E`O6 z@4}qr{UWf@OD!u1Z3+Y-((~BPw)h0B-cs!sBZgZ;W{8{fwO+RM!VIxhRjunlq52Z6 z-2kLv!5?TC-@sM_c|`QESj(&+ydL0Lkh( zApDi&RLOPEg3XlUJ-V0%>=E&UX#g*eRLQvybR#V7vw8&1Ze%)~RZ4J%JHQ(vH9UT8 ztB2TInyvkW3h>AvP0H& z2aD5(oFZo4F?_vwTQ-5<&!^{?@SSu{tJCUmMC%iHENsVag%?kGF?gAUT8lJ5}nv9w7P0CvQ~t}Rle_=7hJlBF``7nzaQ zUavfcB7nr9nVH>lsi*wpAuSeyA*%(l{Rzsl{YaXZyw#IENVeAufaQA8WOaFJ7CqiH z3-j`IbtvXoIQMR%08RqtciS)0{rVVdUT7JFH8~7gfiZ?Ca(`8avjb}KO7FEF zQwA?&X+coy*a`Opjg}gA7>h{1zIPhmA>(+Vnj&G|>VsdupwN}8|0QWI36S9V+#t~> z4Jd6OgQ5Q72@L~3T;xF#fCeB@9z_Uh&Po|0zKyQW9K*~s>8$JbW&i1D*w}UNrFk>_^yk-KngIo z0Hk%l~19{g944BMEQM~Oz)t}J}ihgmD;Q@bOD8AT!`ng}>vYm3p_B>s3SZLGZ z>*YeQ8CWPVa{1ml5$U2c6Q$w>7c>{DgkYmje(~Jy)PO`{^m6x|v`3y9p)}*QwB*}+ zYT)ykp8uY2cm9DBV03v4`tVlkJmaL=CF=bn8x@QJ+txfAiPG=X0Op9f*4FuaQ6yQ&}iO&`7}HZ zWV`;mzj6jLea8qUA()oCo@Nl-M6$f|dgZEieVlw%VS zgJZT29Q=tQEAxg8c075DxeiMG9fwpY0!D#Xq?5Xsr0ua({(xYJ)FkLtr>3U% zJtmXT<)2J~_~653Q_g_GPL>pi3Z|3{3`@C?8|i$#J+IYJj$C zj~<6djvuO?j^U2=`cL0KEq;*^(+-{#f}JJ?C@uxVtnB9Iqu>5ahOlD=>8wK|Y6vir zBS`R48-InF($sTYrYx+6!ki44>hR>V$v$|TAgK9OU+GY`rs%-lknQ$0kgy1qicxag z9-o>j{qD|-^_l-j3|o^khNPI;wwx$~yy~n?W%$1< zBuAe?z5uy}uRQ!4U3i;6WOWmFS_jf4&PebqZdG}6)-iA){uZ9{Erq&ex2LDs#X$lJ zE+s};%w^(j9uv6B6JcZt1@p00u8W#(2T79dZojByt7)3vf&|?mP^%2I;Pwo@3cFq6 z4aWx`@M?-GeAd};Mda~7%agZx_^VXIk$dDBnwI#I!#!r|a3L2AuF^FF@@=TE;r+kL|F{C6q=a}$gVA&G zKWbs7k6ZR`8BnhhAXft5rhl%YPAfMN@K(@KLw(UgI(K0=og>jj)x`zwhBZ`;mH=D2 zve=ZBB%ONMFHlS>bI;obP-u9YhpXX<2r3EW=7+$!C_vge=$_#mSiN0xl!`W-{^o4S zSq}OF+E@VFDh4}v-FSuZgBsbt(dr}Lf=}SmnCg^}#ai)gaO~0^cx!=WvIdR02JXtB z31$m}{yk)7q_5vD47kcKu7jPDJKzlQ1mFy!oKVAJK6zJpxQdFM5%atU@X%2E$j-sx zZymV#*#Sc|;3H;>46^Q(sb&)RJdQGrrb)&?+uh#5!Ss`CoIE}~Y5M9f-vScM85XNR zI>GMl%RFs}R|=UQEzunrNJ1dUu!sja*Kkp^(}Ow24QZH^nA1 zH`wXz5rhgeCTqyH0Ww$X^9q0W2ho11hl~K5)})Vz0s+zVYv?Wp&~&}hS6cnoI8uS6pOJ?L)t} zJn_8Z@)1EO6$j|2R($$wgPa21IQFZO*(&RN;iKb z+a2s>@4*$gJ3fEwMJpPNe3cpi-tlQfylXHoD8XMOLiW>*Z+JwrnB8THR)wA`(TGmR z7hRyOUgHa{WNXkrI-*=Fa5<+ObZ?nsi=qR)6o|%tHFJ?9Ginr*@}>2v8pA~y@lH*S zjmNhbO)0uz{7d3A(r*8kr)>lAYOXxZwYky)jCEV$EM#xmZeIbO3En+HKg!CsaIQd$ zhGbl>1~^PfIDnlou+JNWGkQmVBz z!j{WNs3HT%db}|HNw#VaP#c2HB(uVE+QC)uUJHz6xYAnluA}32o~HaAR2+J5tgKQT ze~&LrXeya`+q$!G9(lZU9@ksP!}ivf!C zwGh}uBH;C;iu9;VOsOR_n;g{+UtI1|`kR(X1`iAd9g0PqvY6qvXW19BWz5`mrhTr* zi$GWS9DsxMr6ZiVXzs3mV;6%m@PZo1Uf==zqC$gaJy+cAYL+hEtfVFzv)Hq;vwN7% zxAbRJxDr2-6ShM!50E%=tR(X z{Jrq(g&YG9HQnF#LLec{X0+J%&j_1`8wD!Yb&3>9MTb|_ZtzTGN|M-SVhLuo$ad_} zNxs3M96T@(yx#VI&*J{C`UCa!zmxp^|7{pU6(NoKua6*5`DfZgpU2_!Yn@~YnM5MK znDym28r9dXT9ILgE>S3e8?Cmv$?hLXAH4WqE`Vw_ZbHl#Ez!_)X}R6koQdm`LHWmKW~DbZg>GYFJo$9h=(830wchJN{svwf+;VJUL7j4(8ClH!*YgCd5){G!O904J8<)h=pG9UOKI zKkVj>o(a=eExE8`)^^>K+G;5H#qIxm5g{^vALuRfACzv4nZeu#zfc&?kHy4HACi`a zk3DV~&iv-v6&x7IuvAneSWTF>`w**oK`>`q@=h(zCmURSr-MI4ZPAT}T~9x~J?h5f z%Z0Y9g1ZkB?t*Nuk#$b`o5uOpWZ+ZsfGUCP_)fc9L-xV??4eY|UH=5mP+C6uP6fOq z^6K>2+W#N_un~WcU1Zw&wGtOp^(DCBs5;VoE0@r%HX|j76eHAJ~9>TBnZw%@YLK^O8c$T@pI_O zcZ5%w#}=0+*EI}wALHAD=Jwvc4thUcN;T(lDt^p-2>dDG?Y9j)KeU98HrL&4L^aia z1W=%PKW=>UX45rky9Lt%aZYfNF?)F?oLm&&igd}IciMmwN(uY@J;^p|2kqI9)0CqT zq`K}`v6|9F>s4g%CaG&?tjoDW31SniVW?-(WL2Y;y>qqe->6m90 zg4FbR7;Zj8A`e~u5wIN4(QOWV2*gM6odkAWpuYR{i75re);9jt#ucn?nI)1fR#;B$MhtzrByfXeqX9cv)^ zI@N&Ctlt^QXvw7|309l_W;*nx2rOxzAn$rC@oi5AC|``dj{2YJ_g4-AZO4iyBa^D4=DSGlofdU~VRiKF_$`rkLwqS9C6IA6O1 zQMJ(em>9W3c46~6SHq)8{~|rNBdX3S5xbubBhA6v&NFKxR}HpmXM;4MlLMb5udC~P zImu797aO#(^)FvG8)57e^X}U zf6?@o0ZqQ||MxXoKwxx=jFx67NXZ9AcL^vdjik~NQ;7izg494dL_k_%q#__4Q-&bj zj_&5Z{QmC$vpw2&o!5CD@jhP1ah@Z`xqzZD(5ah240>Nl3cTeE4|A1ztHFC;pXRpSvs! z(qG7ylv7grShaCz(JerBsIA2VcXg{0qVKu5L$uC;o z*>BY#BNcMe*3O^LJ6duPIlSstfiDxh!z$fc;_`Uz6vtmVy+Y6=x9aVOl_Tv?iT8zmpju}@ulJ=}fRIU~dK$e}3Tm4wP}g%p@TJb7Y_ z{iAP$eb!2J!AbF-Tw!r5XHEH>aZ%B8Yq2}zHoD)XS=G7{Gw+R}#$^$z= zSHr;(8}s!pQW%$Cr9nCTV`@DxRlpd1N(Q5c?+XotWYe@cw|>qu5YwqWY#6v;g9QuI z-pKh9d?@m%g01z9g`S2_<~1E>FWQb7z6JTNP|?r19^A1l^Yw-Md2s+lhfR9xo3bRovh1FYPRaaJjrk62*z&1VmQ{@C5RbA1^p;cc zqbaI32$IgVApgnAJ)=H2c;tr(45;P^f%X8a0H6FAHQ6qI_c~DmZ)T-hVWB`e+KcJ4 z*QiwZVv9+`l&P>p$!wPtZit|&L;T_+boY1aubsoblzot|`1R|{w4R|0>z0Q*rKe87 z8_-7w(gP8ln@`_+#T6YahjyHM2Er-a7$QKU;`q0}Jqu2SM=S`Ds{;-+10&Rv1=;Wa=F18R_l!rxx1=)0vv(#$OB#qqXli)W1}{!d8~$UAJ$dG& z$llR2ARqd(WGtHY^cAOEy}uAw$STdQ;DG$Cju!*I)y4CP-QBhnfcbCJ9U4G9xNcTJ zpraE2%h{MkqU~YJ?e%HsDASZ@U|V^)zp`CkBS&s~dhxYezZ(Yg)UIq;F_Vd8r@)H7 zBCgC&!8?t{_j!Kg7kXaxw|2$8@xnW+fGNbd4xu%1Czh$N-+4j(W%`` zihg-kg2kIFw~D{0-m3BiRqkWTf(1aA;=>r0Ugy}DzPwl<8SMOiS4KL9T-yw%-DLvE zb+IO-T7nim;!Yb*8CM@8-)YAfkc`aNb4>oKS2;euM`>ed`1lk4N{F)H@HsLEk_)vf zrE!?>U;Fb%gZ}S|cpMJ3<1e$Z_17>TfIXrLgx8Fq7o~&=sz{NNxMga}f~}Dm&-Q1_ zA^kPVhn-PPDFY#l@C5r6rkkDD6?Q~!cZ3L4Bv(F&e@Ta8oF@(=>t zc&n2bd={#X`qG0CJM3jbV|DQ=~SMpqK)r!*dML$?IcU9 z#VqFT882UtaWv-_QYWa&GReS>{yRV?Kf%BB%@-hqHfQ*YK>``!55@O;tL^q1tq5aPU)50X_ZBJ#u$BnBGy7hRE{LxbocrL1>VrU~KjPpe2fwe1 zYUK5{(O%NRlg*o*>3+!`vnQsofGteis}g&r$ZG|pr&+T=vZax!sSP_-Lp&`3;iT5I zSq%VO!;<8v3+Yrfhv)~z?}!oQn*k`v{h)Z`U>ki+W%*AsZ0}Yj?B!s=?=7+=+)R4u zem5;kK#irWDlZ5-nBa>Q3kyl>LJxm>?a7vI2Q_o&OY7?96&2rq%H(t`(GjYTyX=wE zTdRzjvC%aYIJE^U?Zq^=1@E`^62KLS1jOIz(HFJ*D(pOmu@D84!Yt`x>Sjl>HoqtxxB~@1u$GpNmnT&l!P1O?a&(~Kr*nuRkh{;$-`Igq$Ef$W{(+9N^<#W= z{ron+dU#A`Ap)&&gm>fVT0XXK`flViD@;E4SVgni9bibL1K%M+61y=)CVh@jA_nN` z8`pIiBXYyxwHDTjFWjH+-z*~;L+2kjZcJdF=@#H2iX6FVMaj+5(z6GK0S&(nCpiEQ zM#Cj3Ghc)CZ4^Hs)rI6^wBG){;HL0y6e>Flm-aW;(|3p@+&$F2~QK%;Y4 z_u3hlb!2{-GkNqw$qQ?)5L4;1UOZwvX9ZBi#;S?-RU~pcR&gs6!}CGOPWm_$pM8kw zfC4b+Y&)c5_33r5lB`j38)%~Fbqf-J4Sht1B@}?kt38(Cc8s?-PtN??1pw2&cl?!o0Qm7)5=#fdVv#;0J4`dBcR% z(cQirUf`v?J)gIR;(}qkICTeWj1i z@gFiC@fwA@t(V!{ZURlC+j)LZhge zjNaN(h&H`W?UpUzfHo!^ovfOfMB5P%3E;@s8Itvw|jJP(mU@6fv zopOs+?&U*>$GCLxPw^y!lAtQAZUgWS$i7x{EZs{}C*t{A^13TuI zB)H|ubVKck%$T}6JvXe!PMH_v|0`avbS_>+t^Lv{^cL%PJDI@eCaLs8hA^A&TP>QN zwK2Ti`wBd=O0&5Ide$t_t6o(!q^9j(d8?z|L^s?yVX*kdZB`Kg@Jq~VLJ7l914W4E58 z{Bd=Dn6c~nheYt%(`x1@V2W`phel_m>>uY#;|uckb%RddaKy!RdePa@!Z{tLzLEr5 z)(6c!d!mkLcvw#MMQc5i(l(N&tte`KR?#Z-@UANOQVgPx1O;n-?7yx65i}=Hay@t( zo${FvQX^C;UwfqRde5xFn2;k<_ebkh5=>1`wL!0?>*LdCsP%zxMAgxeHzl49 zlh)ScfQ=Bo%H0k z(9pJ;lqe`!MCVC5Y8c|JEA^-`%Y&3@$y0L$@ss|0vF(W+l97tz&aszU25!yI(L{~zi(TG&sEhrN|C`NrSo$MsPsT25{E z+5H=;Hb*$01yv|Q|2Y7*?vXU$1J#bn6xH~$iWQ2pG!3|xPV-0je*Cn);*~z#3*3%4 z0!Q?%ra6^vZxsum*7Q1=_r8FkKoS>`2ZS=Dm0%>n;p^&R1E8d3rmHH@$|_f1(ehdM zoDFG1(-f`Q8*f*46-_1$-5pHScu}+{W%+ANa{F3G+`L(s8%@PNYqHN1K<=Hrl zPajhk?*GC8o%Z<QpF1U|Z)jq2@@rB8R1#Z=#dor3 zlpZ8So;<15k3@p8^R4yZO{xqvF9`DuTawx%byzUaVH4W6=KnA1&?i-12GgWWZeDBB z6BXS8g^Ubk&Oi?1;N3k-(7kc=V|LpIe2I{nA|m*e7YynF#`H!Dx}XW-DT&pn&`?zY z7uv^5qRfv%>zI;z2M*ixgN5|#|GNS?7-muCYXd}L-^H8_;Xd5QyI> z(XZ2~lhjzlT$3Sfh<0wm>v z*Lw)AUG?VNENV?2Fw1nBGpSsJ{G^XeN|&$~9fKr`bMr>doTUh#gzWJG+&Z<6PwvQ? z?Y*`ekk2O5|K3IyLdQ5 zB??BZ1NcB$yhrResmnw3BtfY|mItKV%bl{=;jCd6djoMI1l1?;_Pax1@C=(S!L$x; ztN)y4a>#_N(x|;WJx_k%8zn!3wt5Bg`4}QY^DnTe0|T3u@4||FNiTXT+`Fg{CpX|; z{6tw^7GIfK;>Cg}U=@!8T85*K?}}h(Iy9}-e{xKI3 z`WVqc56|rLRGdVy(Z4YD6~XLv{XYEpeW-!;t%;ibO>opvJ3(qAI$=Z(QFjv_9!qc4 zXc)eoi+>46o%rh(jCFU;m$bAJnQKn4#{ zoHi)WjUE5G95sZM8uzo%0)fFhDRDDBN9AKv~C8kOL zoqLsw>)L*P9;0W63p}ul8@A5K8OK!V`$OHNFNvX*i);eegYbbj9%mR1xXrrEO*2PW zv3nl=iXWH(t7RVx^INaBqL4HPS09aI4yR{;-|L_G%Sz6)uEPA$_4WHyB7HAJkN)5G0WnhMH z;k;E~BDoxli#9hW*gIaG(06HJDTToui7t4&aC!@Q#>$lt(J8sA{^jgrF_P>t!KdFh zAUuh}-*@^E2EE^I+cLid%Sd&{G2XP$%WSg8z)9w!yS#KbUF4($a1}9ux&dj_!Cmq* zcb5-7el*^CW6lI7`^)E58gOW+|N4-*cAErv3fc1UjX^yauI%|_t;KT5fc!jO;n6yP zcR4HT7ma0gnt4RlB!#x3UtX^5DTa@?AqrH(Nk$f*#<4(w;hRxz)mf$w8Ogi+-lzue(*`T&gJ5;f+NL(;c5ZX_}i ziPL9Qq{eu2)}B)Xj)*4@`pFfSERYsF{>lQ!dy&1OO50AN`2#MV+1I>KQTy)YDCopA zJ}_z2HTDS(e4l5sq@aw*PX_h#oqix^ED^vUXBL$m`_})885%MW5?;Kxmw|VaBX~D3 zS!41Az4YT181v;<8L(%RDkX1#vB+X-bya^`=c^ZI! z^h^`9?gO3$b|*}xCIf$(qMHYuNKoEct|XpHv=l4GOJOUw0**WcL`6gI6pT7RoMxaM zvF4IFteUMIBKYpRzzk1*fe{00q4l47c9HH+Bz>XUmJ9|<*OcKL!Je1%YLpmTp zwDwY`J4pmp#SL{7RRfOw7d zt8u*f7*a&&hukg$u zqJB+?( z2D5dpRtiXwbe|{g>0;sQ!T2J?#LKmwxWaU(>W0rLKh)_dtLdYME~}W3uC`J7Ekyv!C>)1@F#faLWg!+$xWKisa;h6iy$-XwIXbE)urz8xv zE&T4UVGT2ARKZ=I)9tDP`T-wC$P<(Y$*d};Ast?$u0GZwL@yyNDu~*c?<@5j87@;_ zqv8{pie7+k+YI3ghfWsp0Cj&rS7;xjjWC1SX({R(qF3J85Uf4-P;=LMr4_RiAd7=; z{67`|`ynyWtsT+AT+IU+*f4+CJEn7x8R`ORB#-OM+gi7$_&k+*zg5|dnnB7**LLW; z3JMMXWh>l?`9%N~EFbG3XO8nL^1eW{%AwXQ{)MZV8t|xy5l?WMK-)9cfr}=Z6YkpP z0*~mUs!dy!7Pn7Hx%sdQJ*`RR>u)CwxLt=>M`BKrojm*)gLO}m+KufqROK~Gw~ko% z5RIl-KY6QWL`rp=Pe2>vTRht)`P^%hhRJPXe!26F+8{eHy%#3pq?${m?O=}HoB zx1tJMmAU#l=&K7*%wIus4HHq@9}ttF>qTjOcXiL{kP9Z=nKyF6CTo7Dm|b}cL%Cz` zZB|FyZ8yv|u6%9~eN1h;J&|L>_mc|V9^L^Vwfs;l-VZI~L&FocV;Q(8Ioq~N2k%XJ zfLI>IU&xYWN~h=y>AN5M{R0Q;u&@y+eD~vrDl;M*$w}M1%21^OAQ_M%nB$tBen|EN zsj0Kf>{^(T5}$`7|U?%N&E!@=2D*>=WI(YWCJzG3!if(iTEjFXj5Kl`GNi37eb zijaTsYm-UgZd2{n0n?i9-g)*e}3XhA_LI$)P$gZmbq%Xs|Aq4tto7_Se|J2Z zRgKt3W}JnH#$B}%C$2b^6I7LA&IH`QnD(ZCH$QYNR5S$3zP8C~2$UJR{99IewH7c; z&-Gn&0GT|R%uhimYKU0~;)58E$XscFRXyTTL}=n^zJcNVEJcSH z>SXV$9PXn4;YZi4Ea2_EH(cs3IN~H5HDavN?TQw8{?Pw|ud2s*Yy8syKDp|%kad=T z1?(B3s*L-xg7w#}0Rz4)$o9t%U#IPdfWSaT#>!oSK$hJ1t?{ZXmZ&NU=*JKr?sxeP zd5!7WL`q#<^W4Ux*-7$X97jFU4`koETk3F)kQ}JCf7&kU^D2z)7BX?%fsp zak&5?zyE)%{>p%$7UMrTfgsRAS2a)@hYtg#8MFkhUOOyhP4RKgu=Gu&<5ZD;;eCWE z3w?-U@U0HAPUf04T(!V!6-P%~vW_VlE|IAeWB>9y&m_JT&12JFoV?eOBRsv1nc>TlUvICLIAMV*l6sdg zT~gDo2YR-Kwesm|T?qm?$p;C(bvZQ-|7o4_C=n~#oK%^7`E>9Z^eN_`Gab-zmRw|> z@?68|kzhZ35kZPTj(4RZCz!OpUOqdznXUG7Fb7f6BdMCcdq>GtOf9+RELeo^{C8qn zy2K5o=a|y1Vqpu^@Y{Bti1gIbdnq$-Z-wse936cbrnTb~JOz4gC}3yrr7wp8ZMEe! z4Op7|q$x6ma9jA#Xurzz-CM{UB?Ub#5*j-&Y=v8Gegwa4{v1%0${F$-epsMxBj1vn zd+F+w0sK(O%w$Vq4_*ibE;>80zcHCfYqIV$)8ewnJF^wXng?3OrF!-sPDxwrS2oJ{C;!|Fq^&4ezVHcnTM`(Cj%#tV(d zmrYh&Z^dFR8lJMXT5%lzbXHvRXjRrv&<{v(3`o$#8Ae_y&a`%Y`0+f4ZrJO;|IVX< z+q}9zOmgm*JgDp%YS=FOoNX-@!$*GqFi70r-ReH_4s1!SW&}j1*pw3J=Ic!A%R(yi zpPZHC!*$M~$Yl~3^A zdD!LQ=ckZzSiVQg+5`2QORX6{_CJ(PIWXkt>k!?R_7v8e@_iQjkqZEh30us9f^7Sx z>J&=QE9Ij`j4ebX8nA5nk=JhbJn~~FW(8)cTGm4xGw94nZmkV3Vo%A19*^Hy>f3)x z_^cfFpM%7qwJyXdn`jREAOjyaBj#+>Lskcg< z`jX}GX~@C82`{N13huT$edAg?W=c6&Aw>L`L6AZl)0=ycuABrlpe;#mi z$YTm^^*7oLIXVg+uE%M&qgMi^#O-;YW0*??5irP;x}fVIMVP#gKO&9$`*#w?l^;$L zD5OjG-Z)bLKy3VCE5f^-Z(Ysc+MBOho2U3{8pX^QuMgGp;~Ik}FGr@*LTxsA_fGr+ zrW~?AS_X#k!k0Ur-pLAnAxanemgg*Zy<+?7LJqGX$Pbxtnew>Sa(>{d$p|Lu+XUWw z|1yKr3dOz0tu9aLC}PB+bKIF3D`820Z=q-)xl|a#WGTC-1XOFOUHOY&YQVxpYP+oJF7rslos$2Fmq zj~hJYfhUYY?>)GgZg5eBET@=hwZwO-JSI4SO=l&iHEe)|L*yPe7$FJzl+hd{SCI1k zBNF(|25ufIqsCPMQ!SRPpJS4<@BsUGu-ME(qAuu`z#Vl_>Yu z^PR_PFV3~V&Mx-Md!bZHM-Ax0Y#ZEi7NFteAs)IC+Ba}l>IdEcI=a8UtujSD=LLd5 zm%hiu4gwY~o}!`S;^U#35v+h8dJWFRtcKr)utP?^4i4^P+mwprjGla=X*9t-?U5O3 z`E}WPz0~`D_P;1=_17lU30|$0`T5JM0|(lI>*nCJd_~BK#L7a?!ZH5%U9{^Ed(VdG z?R-M?`sDbyX1n&GOPcFA$AHc-1y{YcdUf?s6qSMje{8mqNnKZ6e!hr5q>8p9bYLqq z9_|$+d+xNt5t%ENnd#-C?fl@k!`@QwUzx2p^Oryv-2ayGnd6#Dn>E3e97_BnSeJ5q zy*`Mg>nxEY?I;>JNm(SiUNL0{Ytf&QiD|wy@FPFA#Hy@Mt&K8KAD@2fxxrN|-f-)7 zkpM|mGOEIUg&!0hVW;CCU5Z_YoKnpQ4)T)go?_G>B4r1Toi3MJT0syXT=s0O3Zy-# zkhhV!uH$b>yFgf8izI5WY%DHbrb}FyL)lY7{;U^yjH7EJ8>d|ah3n}G4_bQNX2pa&1WmK5asU= zK;A%Fa@4syD&e1i5@mSItb~P7PCERnq0M8q2nP<5JfyAv`pNqwKz#X-7C-i7|2Ekk zxU?G@DDe}>6Qj0n+$JB18;~)>uC0UIiMCsCsi62^UK)I#9Twd0H=SknIpa9UZE`CM z-zRtXZ3R(O7SUXV&cSbsmWZ=vu!P3sH8Ceg)M4V3ZDv5@DL&X?3~YTVPaNizBZhna ziFA^R{R}}TQa^L_PE0x?tnyhiI33nGM30&ZU~ZkGAg(T{ zWLCtSLJhAW0D$VXLg!BSP1GV#;=rXs+1aiD)q7GbSkW&B{3M?fgkkEdyqDtskp^0R zIdptKnZou5F=fF0_h@V9c=pxlg-1SYi6LDe2$OnK^Y8x@j1B^T0<20uM(S}bV9{Na zAV9~zz&kK$^)F2iZQuiC$n!gf24gSLN8I09(Hro^a}c@N@`XLpSn~Y+Q>sz|d-*~Y zN9atmYlR3Ycf2dV?k8`x9&CFHy6rWUmlMdLeTy3;+oCOWASW8YW7@Ay#k`1TF^(46 z*ruA_;snifyUI=`5UHuS(Fo5ck4Sdd>N#X_{W8H1#dMx;&g`ykNC8EtN-vaJC-p%x zC0I|fK?HWytGpcOE?bfV1J7X{n;TrzZf=#f==c$;*L1?=J~yW_{7|ONhO_cL9@x zgVw)POI39~0JT%(A$OJ!WYAV@4xGd+MjQ<}v}e;}N2M^o{7#JoPo;qHJy;ZF zUVi>gD}otTw0+>NM-L#;TSVTMU_p^|VZTA^)jww7p8F05tv*e>?TQiLMZ5dfDE1@V zs;LgNx8hv+&moFz9q$v#sH|&?x$r{*=GCyDZW&iy10kZw51Nb%az>1R`Of7eosNAf z9B||Q=4{{nhW$(MUG_?Q)4iLULPQTTcdg;mcBGvKd7U| zmcLNd;^N>Be3#}^m{Ea?hbo^l!P_0DZuW3TtLgbp+o(q9Lq51p<(;?2^Rr!4Y0w@K z(eUOo6(wtjC?QmN;h3ylv)gXnCnTlfM<)CIMJx*DbP9^ zIqV>UU1?~|)HXHEbE3Cq_Z_}UUG_*WN(e6Nf%rn`lAk;wwDMzBGRyUhXd%5i?Ysao;DEdziYHtW0aVe3SgdzI1!!j20QV^>U9h9)3Z)=+fx=^^ zD3`=5CjNUa19|5R)CnO|1`d$Lqu+{)n{o=p9e8_~)u!QqN6qHQuJu9A&0YeK3W=f# zA+4?Vt2ar-SDuKz5=1;<>d$B%!v`91wY46;v+Mk`sd(;gJprC)oK+&vl^9gv!#cRP zB?m1EAVC!H9AGY9H#1grsOwNXRN@T=3&HfS#(B2=<2Uhvw2sVIOhEjEe<$>ln=y#1 z0Xn=%&OjmIfhh6?x`29V4`xtw{ePTPomaX~qS@4>f?(gzl*Kv)TV|DT(jRExZ%h0~ zkk|8ub*xI-$9k-)=Yych!tuaX-68%*BmZhtpTS60y%k-(}ba$fzMV7?HZ zt`VizJUKp@DMU0k&mmiTHASKhQG2UgwV?1+X4Pn?ka|A!g97sYHncu5wA zcCA??ve}o-wiHN8E}vjRf?#xK`g(8hWsFmoM?6YyzAzm?0EdpE9O~o(q3vJYiHHhEI z{XC2Mp!A(oa#5vH9aZDz09l)G9R}I{6@=e;{uPk_m1|r{MD13B zohC(er*4Lu@Z7K^rHQL;0%L){k#^-}#3y$EU8C6AXY;;eI-m%m03Q+(5@N~mV4|x2 zB00%~I3NYnu0=ojP>DhGB5-Wtbaof{S+1U{SyaT$lPYZ9FGOn?^oe(os`VUaZ_|7n ztU#m;W8Lr$#g~?n;-2ZjNz1?hZ%8z1qaLxGqN0j5jNH~81%Y*4Se4`5&G-3Yp8ssQ zER&}4MQ)b)t9R32jKC1iF|8S)30#?*n?KX7PkDdz$o(?vh!>uO;iIJB*Nwk)5N_B%Pj_mV2S5#@oaCeSHpGio)kNpu-?o za%$bP-zu0}i%C;!hJH|L@b`c(FY=m< zYsiS7`e;D>B7x4X(J_+hKsJ>MB$uUX&xxVeUu#$^4rQ|)bU~S=(SH-80?~0?u?JES z3%r8h@U7n`GF7)1{NB9IsyKJ1o2Q-fymK6Ea#!d*IDt<0S_FtEzGvdxzi_v6XP9Uw zTp1Pf`jpTbcWFku%WJfED<*q&^os^9G9IR>-xbTV{QMP-eMW7)eQE$fiyZWNyyo7J zDd&$?_?r$p;DPq{DUhM+vF;%RFt^gxzxU93Ox$~{m`PGv+GkVaO2^4jISY=4`~uvH zsq_l$T-+h~Jn`+BKbRs&RoeGXf_>=#;nlWXLENGUw|kRuclu=+`c(LT09|0s zJy0F$+#!X0xb?Q)s~YSy!Yfclg7`NKng;HwjZ_c3K#MJ?dP(fJ1E*CU(jR7b_v3|< z&0pPKR83k7a*|g?3@`ULvBbo39)~g^H)Bq;`tP**i0j$>3swg0inUSqOaeoBuP+%F zS`^+>T6ZOSfS!&7I=hTXFLjl|G{ZDA7(jR_;<0A>1TH1 zD;&M62+sm<8Gbaz)uxu4h#vC$FsCrnWf&k1Z&mspZT_$`&bn(pGTs$&;T_uf|0njJ zh-41I1d0?6>SQinmG+Ptd2o5Gj%~CfY}8?qj{_5XyZ`Q=gFR1rQ&fX}zSqA?jS~ye zKsW3m&w91|oup)`e?mvCxkkk2Cs>!a`>oa=lJVf71>mJEXLG_Jn5KhTlLWSd{Se;u zC{udjY=Rvr;03&sFJB#Xatkc#uKI-pz0$$X^6+{NroOVVFirj>m%-Si*Y|3loP5$5 zI8iA+Pe9bMMRu^}-+b+!xs>ovSOt!kz>SNjqw2r{o8(oDRLx9OE1%8&VZeCYc^K)A zFsudCOvL^v9!)r(Wzx2{C~GjO(QiFbriBFyA`O)rgMvwP7TT`P#=n5~keSKd?mKK}RW(K>x)vK8%m2l*c29(8gS1uk7S)4e0)wQU<0+~2BD5Yf7DR_j|Fhdg|Viz^M7MO znuAbhwPGK>y-LY%=*W+hFr9p-dH_W`iZ#Hq zVT!=+B9u1+(%&f&-KUlpp0(FiiSRBD6@MT7apRo> zUD8C-%I^mbq!x(|)6QyVVMDvsB7+0xfll)KYoRk}sEb>Vn)Gdt(%@o=-A;Tsa;7bl zM}*Lu7I|dknM6;n3PV~8!T41R6s}W(KjVb}Pe_%=%D}qEp)aqdIP?7(=2i=aT1eBI z)*HX>26(P6Ae6&ymKdh+6~^1-$68gJZ~uIj_TZUWw^!+cg8e~@OWpRCLCJnU@=x)d zp6(|K!>QM1QmIErKL#9VKPJ5KIw3+1A}_u(w?@A1GFHwT^7^!(1-)_G@4^5awH!|5 z4M*mv7KD1;XXTMk5-wC*IIF1g2%$itI?|4gzyb8xCPP3C`2A_f56Dow%6sI7$(LG zJk_%y8F91-ZLbK85cJe%8u}m2C;i85me_mJ z`Z?x9wRc~Atq6ks_;XE%Uz|OXg}^5x za;YSfd_O0F@HUm2oU$sYI(mP&glGI}i~9_F#+LilGKK({s1FVN_E-A+anRbQy*3*3f6pXWLriq@BBw`u+Q&98&v2d0Hz z5lZ-9OCs4>$W<*r2>Y^4QT@5`!ySOw6ExWJwO*lJ64?J1wv}|RF}aAD$n{>@4DwvcS`SO znqK^e4xZtc%2B4(fRZLUTymXlb*U%}Y6z6QT)u8k#q~#bCc;hMS6YluuEwIp{L0)d zAZvShT%`B42~~Vq#^gaS<=VR zJ<&kFXZbE@A5%mCX7gmP_mGsjT8siTCG1Q|rBuSj*E)T45&Ys}nl$8e4 zsgb}P(LA3@@%GhiwOWtEa1TlsGJhC}f!6?NqHJFeN53Z}3BH#$rdDmV{OV*7hOs2l zM-;Ti^<+99ZTuoVyLpOR3>HX6aW%3L4qZ5YdyGi(#Rad)z**G&JDhKd(sfhT>TwC%J#7Hx7 z3U)3oQ}>kk=*3TqQh&Wr5!^JGfA#eT0bnDcHf*Ts;v1qO$cT`){J1~ z97&!Va8G(zW|$%&lsdXu&$vtB_pB-LfM)8i{jy25FAvPpxWKuyn@y^S2h_JKV%>B8 zhQgc-KlPh+Nhnq53zs6VK6;!h8kQmQT3h$IUv}(JaEHT9mM3hz56j)LQJrbGSg8X1 zqLmYGD&}naDP2)@WWt_h4D;85yYPc~xfeK`BGTkT%rK#OgbyYTa-7b zG8o(XB0yexuYJ?46vN*mS6^z0k3v9pl!m{RjE@f$yiK&>@~cgd$gwm{M0FMG3ooBd z8JoB8*Z)B;?$AkQTBj!-28P7NsbaTonT-%JC6XY9Gu1gsiDET2k0u*4l+lq5SwbtXbg zJ^BNGlbDzc1{CXPUUcFsE7|Ud{eNv;c|4R~)PKen*^)IOjV)uWWna^%WGf8D9v9Cq4WS6{`-@AT3@BBCSIrq8eo_p^(=broA^YtX; z^}TgjWk(;#;F)22IkfY|F?Ii#ps@fj4FyKShbipUVC$GoruKt2lf?AqR!wH0ZyWb81DnQB69zT z`b8S-uG(%tVsrk2;OF?_cfB6G>GIc9YG1SWPiqH#diD={?O69YUlLm<;>8^a%RFSWN52 z7P)TVG2J>HT1DAV=W%!=40$2gB|s2A)hBa`v*8snU4dW{p?QJrhpun}iMl)EVV-;z z!Bi`^Zp`{R8)OTV!8R~{ZpI0}?~?zB8PXZ>K&ZwOlSWvq8&ezU#bT=JgU!pt67^2g z+uXyXt2#o;&}u}0MBIDsraX1nfQhWp4NMZ2EK+Q@F`Er#xgL5u7y7HQQX6#l^;^#f zorL&p=xIdMM@9lLu-*ZE{y5#UkBhV+x3Q!P5T7mw1nv!wFB6y5FQd*;#l68YatR0t z((iEL9a$RDYk6HF=gOLb4lFDrU-6vO`UO>9Ls8VcU%VDkNHN{kGTm&qLhv(V$_TtgZ|7Z}G&uMcsnj|K_d{tmGbr&`4FN1*$GcCp4nnmF|w_P=|_-_4_ zL2X=sZYElYyKOts&;*Q^1m@XSRbOM06W&GIW`=}zXiQViHUej{kw9ar)#JSKyWGtE zDMH_*e-L6JHxqz~qOY+m$uSn$EV5JE5|V(jEYQoDg!U$gsrsLc8ldchkptCgzg_ZX znR>p@_Y-#5pn|}t4mEpA8F`TKO=naR>$J5+D;%dGluC+Ch*_C+m23>& zUy#ev%djd}?AbF*#@j2KyPce40X0s<1aM`Qslow~O8Y=}HX6DwXHx!$xt`A8@P^TyGMi9-R%3za8v?<#B5at0TJ ze*1mw?;T?wM!X&`FRv`-kO>2uyw~S^&MUG@KFCg{rfxPU`-bb@;j&M|sLg zklRQfq009W1x0rE;c21X{>`pwV_ztiO}}Krhr+Z z=hgfe>KdX=`8jR`3%zVcPf*s&{m_D~@&M!&2lBhzv+019NaJFM%e^1J*-)NTk8pY= z;g!1UuoU@Kj^tRIxx9II%{gPcLR8qd4B_};!Qxz4t!ewmep+%pwq2DYZyVw8)u{E* zxu|?r$$IuvP;v0w$hK#CuIE998>s_V>UH<9*!T?mVqxG|L@p_r++?JWoAtBG7*0x; z9Pj)Qc^c$pR)?thAp9;tC9QGWwW-Fpj!(lH}xYs6cbq>9-Tq=7$mv?oPrs`&!{pERB zMckbi@2#Rz%gm+YaI+)Lb3D0-s)=_2_!++;-a)_SeFrnq(dyd#QOY9L%s#g&$%NnQ ziP_u%9|qx=)`76;$4@4Pmi1yD_aTf%&j|paiE%Be<-&z?#aHqIS?r zkNXw)GaqHQpW)hUb~%>fUG9_RgKLcB_0VhRs-&d}I&e9j9^dstgZpO5A!&&{)}o0_ zGpYWz?v{M=ewe0JSJ7f|x!DA!sS~%_Q2c7*LDx19)KL+jPCsrN0iXw;z2|y+iosVL zwweqNuqyuzB5m)_lLvl7-j6@0+Z6kGfVIeH%Gnkw?J0_HLAot_<#(zp3~fIPAI(C@ z0~#+e9zGV9_yT`53~ktZCZqlYt=T=#Bml=dy#l*if&J}Xn7hsZJdU-11a3=x_a9*rQQW_;Ju9Rh$Ez=;^%0Aj1T;kFi>Y0G=9->8=Ghj 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 diff --git a/libraries/SdFat/html/_digital_pin_8h.html b/libraries/SdFat/html/_digital_pin_8h.html deleted file mode 100644 index b55ba85..0000000 --- a/libraries/SdFat/html/_digital_pin_8h.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/utility/DigitalPin.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
DigitalPin.h File Reference
-
-
- -

Fast Digital Pin functions. -More...

-
#include <Arduino.h>
-#include <avr/io.h>
-#include <util/atomic.h>
-
-Include dependency graph for DigitalPin.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - -

-Classes

class  DigitalPin< PinNumber >
 Fast digital port I/O. More...
 
class  pin_map_t
 struct for mapping digital pins More...
 
- - - - - - - - - - - - - - - - - -

-Functions

static void badPinCheck (uint8_t pin)
 
void badPinNumber (void)
 
static void fastBitWriteSafe (volatile uint8_t *address, uint8_t bit, bool level)
 
static bool fastDigitalRead (uint8_t pin)
 
static void fastDigitalToggle (uint8_t pin)
 
static void fastDigitalWrite (uint8_t pin, bool level)
 
static void fastPinConfig (uint8_t pin, bool mode, bool level)
 
static void fastPinMode (uint8_t pin, bool mode)
 
- - - -

-Variables

static const uint8_t digitalPinCount = sizeof(pinMap)/sizeof(pin_map_t)
 
-

Detailed Description

-

Fast Digital Pin functions.

-
- - - - diff --git a/libraries/SdFat/html/_digital_pin_8h__dep__incl.png b/libraries/SdFat/html/_digital_pin_8h__dep__incl.png deleted file mode 100644 index 84d4eaae414cd09f64220ee7fa7f22b9ddfd0bbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6529 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 - - - - - -SdFat: Arduino/libraries/SdFat/utility/FatFile.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
FatFile.h File Reference
-
-
- -

FatFile class. -More...

-
#include <string.h>
-#include <stddef.h>
-#include <limits.h>
-#include "FatLibConfig.h"
-#include "FatApiConstants.h"
-#include "FatStructs.h"
-#include "FatVolume.h"
-
-Include dependency graph for FatFile.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - -

-Classes

class  FatFile
 Basic file class. More...
 
struct  FatPos_t
 Internal type for file position - do not use in user apps. More...
 
struct  fname_t
 Internal type for Short File Name - do not use in user apps. More...
 
- - - - - - - - - - - - - -

-Macros

#define isDirSeparator(c)   ((c) == '/')
 
#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

const uint8_t FNAME_FLAG_LC_BASE = DIR_NT_LC_BASE
 
const uint8_t FNAME_FLAG_LC_EXT = DIR_NT_LC_EXT
 
const uint8_t FNAME_FLAG_LOST_CHARS = 0X01
 
const uint8_t FNAME_FLAG_MIXED_CASE = 0X02
 
const uint8_t FNAME_FLAG_NEED_LFN
 
-

Detailed Description

-

FatFile class.

-

Macro Definition Documentation

- -
-
- - - - - - - - -
#define isDirSeparator( c)   ((c) == '/')
-
-

Expression for path name separator.

- -
-
- -
-
- - - - -
#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

- -
-
- - - - -
const uint8_t FNAME_FLAG_LC_BASE = DIR_NT_LC_BASE
-
-

Filename base-name is all lower case

- -
-
- -
-
- - - - -
const uint8_t FNAME_FLAG_LC_EXT = DIR_NT_LC_EXT
-
-

Filename extension is all lower case.

- -
-
- -
-
- - - - -
const uint8_t FNAME_FLAG_LOST_CHARS = 0X01
-
-

Derived from a LFN with loss or conversion of characters.

- -
-
- -
-
- - - - -
const uint8_t FNAME_FLAG_MIXED_CASE = 0X02
-
-

Base-name or extension has mixed case.

- -
-
- -
-
- - - - -
const uint8_t FNAME_FLAG_NEED_LFN
-
-Initial value:
=
- -
const uint8_t FNAME_FLAG_MIXED_CASE
Definition: FatFile.h:96
-
const uint8_t FNAME_FLAG_LOST_CHARS
Definition: FatFile.h:94
-

LFN entries are required for file name.

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_fat_file_8h__dep__incl.png b/libraries/SdFat/html/_fat_file_8h__dep__incl.png deleted file mode 100644 index 6be3aeff9f098460a861d70d363c6efe38b5cef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26702 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 rnpm)wv2Ix7+^(Irz~> diff --git a/libraries/SdFat/html/_fat_file_8h__incl.png b/libraries/SdFat/html/_fat_file_8h__incl.png deleted file mode 100644 index 0bc94a356e429104e970ab94ede516d49b0f8877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21221 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

m&v+i#&m~bh{oJX=_iqcFl?N*B_{a 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 - - - - - -SdFat: Arduino/libraries/SdFat/utility/FatFileSystem.h File Reference - - - - - - - - - - -
- -
-
FatFileSystem.h File Reference
-
-
- -

FatFileSystem class. -More...

-
#include "FatVolume.h"
-#include "FatFile.h"
-#include "ArduinoFiles.h"
-
-Include dependency graph for FatFileSystem.h:
-
-
- - -
-
- - - - -

-Classes

class  FatFileSystem
 Integration class for the FatLib library. More...
 
-

Detailed Description

-

FatFileSystem class.

-
- - - - diff --git a/libraries/SdFat/html/_fat_file_system_8h__incl.png b/libraries/SdFat/html/_fat_file_system_8h__incl.png deleted file mode 100644 index a5d5965d53a3f1cc7cdf2deec512caf2cccdba8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34017 zcmZ^~bySpH)INL<-Hmh$2q-lm9pWI;B_iE}C?V2~kB9>zh)4__0s<0(5<@CT$VdoC z4j?F<()~N*?|Z*LzV&{~wH|#~H}^UBKKtx_?R{N4#>ha6nu47If*@+`+Xxc~A|Qq! z*d7@P_z801WeoU>#8FoZ0bSt#>P1PlZpPb zhUs<6yXjL(Ln%V#AHPcRL2CU;#o7yf3Nvm)QvrP{i`?pDd{J~7 z|Ns9nMz_#L{<*0dd*qP5pvEV9S3LmY>v*;PsbBTP{&;s8yvne1y<#~VbhDV8aj#* z&kqw4cX-0ivKIe(Nex>+J3Y9ReB%~)yQ z16y1DA9ImxR%T7duRbJeX>|$-QO>D!&{ATdZg(rIyBgLk#OHrG6|CmqA38cQDj3Dp zTDP-!v{YBwA9500zrHvzWB>f%`7wL#Mb_rwo_b|rT~~moPj2S37VFERPk{wc2W)HP z*LXbkh3!Vi147+%_y2nT;C!b(cC>wdyuQ8}T2*O=veq`{?I8OxQ+0S-5&b*l&sY2D zvxCCQ!RTMFbcr0_0c$x%EkCRee!Jum7*<7cLet#J7@9{}^{Yvh&pAJjP5>c3+Ms(w z>Xt;bl9pqxzi&d@n~BzvD`Cp!39 z{ijkMKHLGryyX_fMAs)|=A}w%1wR^O9F@Kc(8FslkJ_a(zCMoBkMv{Ltj@;xPj2zweY(n)_?N4}E;}?_NT`|30D1j|{e| zHSf7KvC5pR1#S%DbKJ+I`P(7Q`G33r5dO~v!k>}K|9-#7_`XdU!nST-u&Q95zyyjH zS#Q0H!RG%KkZveK(ym7s9)+k3lN*0<*3PH{^Zgqo|xzldocVC*C$lk;@g`N z(WEf8_)KGQrqxB))NyB_E9aWCD#WU^&v=r+719b~LnE&r9xQ3{)MEvcncATuC zh3>0Hidk7+YJIC@SYa)pSa!L6Uymuo!eJ$<}gtxkp50*^9Me@I3HgzHhg*v?iIM2(nptWZ>O^>|Z*? zroFHoC+yhLNnoEh{|xcm-w=!Y0&1aPBeU{}0#GPRZm+f69%e)NXfEi*`FhZ&E`rXl zSl>dAx-)T3&-X)Fx^a5=SL~t3TF7~w6|7}9(i1Idh|s#eyk%sAYO9g-;46-G6`85WF5}Zy>lIZmjuOFsjNxuN7dWZ%mXfQ zSz57p{%z{0OFOy~X*gN^HT1Lh!dj(L>O1Ry8-MNcU4eYo2NwU{rg3;AORLyd@l$5^ zAuD|);jm9U<4eLJeOv?LPh!40nepS56-P#@n>dPDSidf=T**-65$@|l8#zBt_;<(7 zXSFs5yT5y0Hm>#wioU=fqg$`ASts`4a1YPbebkR}1M;CI5Mo{$m zzsDRc5|^Q{r>H(3oF<3wqKM}5?rU>puSq_{Z78(BLo4-pJ6tVSDfLRkzb$vZ)n>6o z_zFbkU_9sea6vkg)#9W2oz#R{3=R>6rFSjv?$%&TWBv;LGhZ5V^gC4hsg9Jx&sBuw z+O;0n$;q<>!ax)m?WF(ig3NFBE6~>!nLked+;vb!F)wu7_MqfF$$+j&C4z`4|6U=K=Z@SO9;1$|3iEact|^W@E!gUwe~`x^h& z!KYl$4!t^&XL~xt3oA6H8$Zi+U99E2Db(R;sebQF*Oe7y#JvD@?hul7) zRP_C$%x)22uOFB3$%eAG^aaEA4TOBy-ija>X6Ft@PiT*G@Mi*S7mf_>t}O`APxt+N z517pDpHKMa4XlO59Eu_>moPmnev51()&b*p`*jh}F%^A0Ezy4xN(R5lz~jsKof|vD zOR3uH8FPjDIqK8{(i6LP7%mo1o+Q9drQs?r79Ywu*ylztKICV3doU%tyli2e4NI#j zCft6%p)6nq%%a$@8~y~{&o_tWkgHXhmrrc=U1SIb$vx@{`(!-V?I*r%k=`{1wn}$Z<5&j7FAoqSp)v_#zk3);Vi8t;UtS=31Gq$6blsk z(nIUQ>)RWP_zmm)!+%@R)Y4iFja-Fgl3zWL?V{ftYW7V;CqP@D-LG%G_ULMPr<8m} z9Pbvyu9F`GU>LGoU7LSFCf{q>cO_`(?HLTiGE2%O>>m*p_VF$_a!&j{C`v=FDbL*K zh}doN)&)BzeCTQ5zSD$=LaBYl<}59>QS`=!nSiGQ|2-{AM`lZGpKs!O9Uo^!s6Gd{P^KKD<@6- zOzA$>*I$rA6*msnU+W|HnjZ!3dt-KDpZxn}4sZs{ZKE-dvRB0?a+MOU#HXaJ=GgDk zLR$oh7fSqolJsWH0YoB&aUoo;8wd}+ueo?I*8M^|N&F+~kOT^7@LU-Mr!c2eocdml zN`Qur@Z(OyS0ba{wHd;3_ma2&mZ2P4vm~*97!vZRcH?UP;mYc~tWL?F;RBJ@bha+5 zySqx7ae|NWm(+3Ws#vfPy@61^4?ep8$kJl6b9J3OKri2fj;-C)i3n%!*w{F?^50@q zz~4HltMQEJ2duXVLTgrqxJU7i;{yoXiH4rmahWgC#J6rryg>%P304}DZ-?aYpCV?m zh5@X3T0T2ba%gYCNER3pxexQ)T))Rp^yZ7!bx(Jzd%x2h>G0=Dg?9PcCp=dWGmJ)K z{j7i&V>--0W}6M_A$(Ih@l`U;kg!u4x`slnFNmRo==?y;v7C!l?YU|M3Y_7Q z@8?yU9Ac4D6UrloSGF_a_O? z(xc@=Tz7nvtPCmmqU|xuCktFqt8DN`j9vh{)cs0=vBoqmjOX9h97Zz%*3AFxx1KsZ zc;NrkAug-RZ?y*PxFEtfL;C1he0(9^J+akar1(|I+VaZGC6))Ww5TSgAqFUWWKh9J zcw%w}5pt3-_HkL8=xO8gHxo_7ZHkRs4W%U9akDx)`VT;Bvw&{$PH=6{o^C7}}Zi7P|xcYFn5Q=zv zqI$5s*47U&86z7&W>m2*nl$`h{vbO4^9}A1!|agp{WS!Mr6UsWAP8UKNLQPHDR9R@ zFu92b=p@6_Eg}X{B07UT>ekDB0w3+E)~ByO4VyNaoN0JDJwTIiupiXIl>a>+pYsMK zz%?b`dWPWab$;!Ie|#*wTI{#Bgx&i7sDVXJ)r%YWmmbTw{UCONwGg(=S7cb`D<#n7 zS2@20zb-sPbxt-L6B%^%m^+F^?G+Pl&#&dh}p=GSOqJOZzJ&a-?_mCsQy|TpysgVf;_BicVX-K zglMAz2_C3#tC|*Pt8wQ}qPE_x7I_Y3X}xJ`F$ir};G@}V_&B81LOqPMV1_9rB?1$j z`1+Gn3TWuN3ip9Pb^oi_7& zoNEnjT_NEY%5T%dSs=z&D($NF&PR}RSHb2C2$l`A!3<3$a1S_B1E&tVz#RE9n zeYr7mzh*AEHymW^q5K=03OBRH(sX%lE=#0d*L`iRN~dA}<1OViB<2ZO0DwFWxS%My zV0?s8H#6J61XG<5%kjRoi#O=4 z+(&_Z*@*gRGV;;pa|!&}$+^LOO< zaNF*^@RwHilPS%LjNqbHr-u)|gdDd7f2&3gX9#hPPGydzRdOb)FMtnq#J-cJ@)M3s zwW-@D#SEbmKi4{uPWT^sL3V_^Zs{K*6thlms-D~~PP!neLXVFH z$;x(#X+KX+|J6SRc*~P@v4yckCP4CpC|AEl`eYAq%$*bdSBbZ3uuDdWJ%_Ej}kbG>H=^eMR4!#Z(gMJt*H7%K|6rt z?_8gZ4^yNgYoXe5!-g6tW+^KtX}`bfoP+Ju;m^K4HV^QLVp|uq``KP{YchsWVxsWX z(YI&dVD8joFk@HvL5QlUP&&5+w)<0B_Tm|r@V;bQEAb)Py|$Du%K-Q6mshGXYuSK` zPs9Kys1)f92m&ihOZ!Oo#|otG<+{7zk%efc$vwzE*2GunA7asAl5oQ@xZsAB zAK!UhTxl2Kfw@Oc)$TSk`R_~6byPu zkU`b@)|o(qB)Ebo3fX_rY@P;c4ZsakgIN6yUv++XKQVeN!1`_4Jq)M5La zE38QEarSq4ch66UeXyO2Fx8>U~BYD|s)z`E=)9Y3WKCY&cyg>*<{J5VJtkJi=gU z&HW+&9A%nY%Hjz3PjF^}xCYcfN9M`x&;HB1bH%8*enQ_A53TUDe)m5bcr(57=u-V2 zM~Mow_3_CE_{*5>YMJ+IfNNZfy3*Vt6`5Wko?fE#;z~p<*BJ@`Vrc6n6h1Nd zYjYJ7^W1N7<)y=x4&-xXcnKvNGCj*ZJ{^qg}AhxV75LNftZ{nc8#1CCzS0N@?#mn5;$C;N(; zqvD7*vhF#CAWtqkHJx(cF@Jb{g?P1H%fvM^a9Kc`R3HT2*5c;h<3cEPIUXL6@1eCR zO{Gk;m7(Ku004Mt=KeQc4MxdbX0qm4a>fU(-{V@3R8>~w6H9{J8-Ii7iy(fKIW`J~ z-Vn*0{PDP53BMsHi^L)HnGn>)Fu159v4_?}F1PwFeoHoKw|i1mV^%ho#l>}Q4!w6R z(h>`D)dXL4#pl-}CocF*2e!^tx?~1KOx@dpbd-#7B~-JB*Rd z_~PiuJz&05FoW>Pnky`BeTCw@8dNe#{rkH3oBKv#p-msU9^ha44nW9I8JUhUE@5_a zopMMrhDg7;1Q`PmcZ$sXEt(2uDFK34#QV2%pi;Q z?tY4>timB(TVskL^fvLN=gAGe;{k2p-{0PN^q=v<84&eSN!qF<07Hi{3dw9dm>kSV z{*r@E+z)K$6gxncj|v zreC$DF@27m!qkMWOB2ZkZ%8MzPi}O@oJXTJ>^s}d%(y}dhf4lne3)OG zG{q{kiqQqn2gQh`ZAY4Po`KRyg%W2ch2IOB{Q2TqPh1)L!@EMkBT%L0-_e(Al-u35 zbLjMhc-Dh@cBaEmitgfiC|;s6P*qk}WW4mAG&&Bw^+9bJ77lxXlA(j(!2A*3E$2f(-<@Ui828CgZ=xj(D|z$^yZ5 z|31o`gJgzy)@8K3y#CXm;}WN9A5&M13e^B1BJj&W(2TF59}Dy|OTR`4DSGJK&ILku zDz=_s_Mt}J(uc2WN_P05LiMrM6GJuI49he&$QVLtqJ^dnKbkp_XNEej}j5B%kRn0U5skWVF`u^s{#j6h0(*$Py2C^8IkaLxZ=F1L*A; zBUTKc2<_r72~dnJ{mU*MN+|?~7D(SKnxq&{>1hBWij=HMq^JtWp*Ivv9=4zTAO7r^ zj5+LuzF?g^#r-eZ@y&igJ&_iMT*bm_R|4-srG$a5TBjTu&_p2&Wryb^83@z%J2QxZ z^Eaz#47?Uut1-P%e{pW=#SwkX-ey;~-W{YUP4zDjTmd!fYc`)WZ*PT-hZ27aD#R~s zWZ&-of7162AqJWW(e^9T;J$wPXnjEhzeG34&=td7A*Lmcw=$7_X5gSWqMmEE3)t@^ zKzdwr(H>p=E&cjf<(F*2A+~>a_f{+QR}Jpoiftiqa9#HOONu?^Ku)<@yiD>%vQgnp zb7N#AixQ;9qHT|Er7!gVTekLH6qQ3v5g8eK+7HvxkSx0+eOaToeR#PCGK=lrDn$Y| z3H0;eh`=aRpEs^!9kcUBsVnBX^!)LYc&DP)qM?}f*u)Zvy}j-9{e6A!_E`n&;d2L8 zxFx>T3^!G%dA~G>2>d2fQqiC=m=Ay9(XR^Sx}xG9TFXhUbQsiXD}_Rw7jE(y#H@17b5<=#Tq?M1hrItwAFy1{>F1+{s+zry`Zm?zo8rk z$_W(1>+d9tOVjuMC}C>u#Jbn6*izkNdPQ&;ud&Mm^3|vJ_i~bO|66i*{?xP8u#ry< z75kN|kD*tEyoi@^vS$ zkb_$ye^R z^Py1rxcjWFJ*Gsdzwh7KM``Q`5&AO1FF-nN{gGAtgOvnFZDi;3t{PICKC6(9a928} zM^3%iXs}9gL(VIyA}0scpit0|_4hqI0Ts%x(0z&8`DDa|Fvt1m@t#}@<$xTFb3y)B z17_zRg`gAZ;Os>*U~GDG5mfjw6O(78sDaUJdXmV-o$;J`Y}W0l8NxdwJJ*uXixd89 zw|ir4^rKRtIH50}vr|#-Q}xb1swXU)%j1L&JiNBji%R{vr&*{4_;cc#)E!;EKZXc?z3Nv+~r)2y^I_h-Q7c z48?Pf)iiGbc=+p{x8b0nFX*%og4$Ah*b!6z0u|ou&@Ow?W3HC+=M+Vzwf{bNEKhdnL$G& z9mGH7L-*>$lN~xOAcLCqZa2&h1d>hO%XvgU>`{}6yj6t=%XGTzwm;O$tFgGhDdn_t zxcw<%p&+a)COi|p+0iEV3?6gXb+lwkMN@M=$#ozIqGJl1E({~WnO#%7f#*Q-KI41; zaDkqD#r!{A>$@;Os=p<7uk_=G)$c5=guNuc99A~S78Kj^#} z>2<2FKv4TwuvFxymVP;novdikk;z}0yTxliMUY##nEK=jLqErXeB?_NySp6G5i?s> zFFCTZ4i(f*{j+PTp3?9?*gOgqqgVNJa!=*7<*Pj%TN$d#_2$i{;Msx~{eGz)vQ(k% zl7}EFy4gIz_t1)`Re$`C7C>`BzPu)F`AT~mx}wp274%+?82brABl=l3KYr9ZoPT8H zoB8u$nm1=vGp{|#J1&S2iwI=P%}6!@Tt#Du?c=yrq4@943|`cAUQ+Tc3CY-Z6IBjF zwwRjTLXZmoL$lCt%jOyBP3pwFo-Wr$=`hmtkDH3@2_P{Qg@X9bwx%?5Te08sG0&X^ zwdTgv3az}Fp)j`F*(#Z}{Bg7UCJ$C8+-p7jTwRfVT3sAoe*Q&u67X`^ zqfoW)%{2C7nz4bcddS{~wJMk)nIJm|WQyh9G%3**7u{K=q2E>mXEi3fTqZ852)CRLkW-aL5N}#v&!%2#q|2=j_qJ(Wt(W4Zo{q2N1afXZP8c}eQWn`4S7E_#n-8!Vi*9smuQf1k+-3&5r;qw6Xk~EOYD_C=~vn0-HXyYt|6XJZDsJ# z%N{U`sf1%m-O2?a`;Bz@V^mMmA=V3b7`53=$1iZ_`}g^2f~v2QI-CAoVdNys3`pO!B5#`y$8SJhASfw&@si&pfZ)(a z(WdcUK(=&ySSV9|d5dcQCtBkla};f5h4rKwc0b>1*GlaKK{UVCwv>-vFV*r$gYeH7SpqYDiJQ9bm&G6Y50uX>f z{S8{Y&pG8>H-H;xL0HSaxd6LXkC!T7(}o8Juh$KP;lWw<|D^l2%^%B%!BnP~yk|BP z-7fO2txi78zEYXJocV2_1c9$T3S1!db?y0jyf<1D^N2aJm!f&S7QpG>7G`E$vd{zl zq`qgFywL@%M?`TK%}iBi-V@9HpFfV+T{Q1WrOp4DX(mD!4T1z}XX9T$Jl{1c1Ur|b zuej!{25g$BmBM^RrM@U7@N+8j{$N%yc26#ccQgpPiOzT>hR!gW3qCh&abkUtzHzm| z@{{Ov36nU{7BlEzTD%Jfsf*vR$Ur4RInoMttO*!z(|~Mx`}#5lokCh;>$0@LT%``9 zT|LFqYi+ubfj9bQ@GA=2*nGZBPk^;3Kgmm=Q=(mG(UH2vilC?WHf;b|m_AYAIoZj* zyOYb$?%RP-|F^9=-wyUjk-kqCwDL!@T%$yOHU_d?dk5)&h$BhuV)=V-ipYa4vP>f{ z$muUGoOgzrLh6TJHYYj#FCpll!SgR5ZkFzvvv7=z5KqdCBX7McU$0B5^9TvE$!;7E zdhB4wNWU}EwO_e2-ZBtLCWe**q%>9C$E$8Xvs|xGJ*}``s3f%Ufmx&bYk{LXrs*Yl zk_>QD%@N=%C_F#|g^O%}iC>mDR|HZe<0ayy+H#KMoLRJ?CY;S4T3#9)N`G#|M70n# zIZBOsob^Wj%_5C&CKHulX=!P5Ntqbgj9fA7N^gEHs451%9Y+c3hpXAWzAY}j1&2)a z)I+P4e3ps-csE@(<~lAY+7;tAX}X#gB-d`#NSO95j+SAYsqj7peGx>~av+2rg34W@ zwK^&#hmsJPLjNtEbQ2Mj7S`?)uHG%znJz!@Bj3)hn`tQ-sV%q$ZBowGVRop@{Pyad z0jaOYzatF|hJF$Q(fa0Zd7mQ5vO>ty2iM^Q9*PFk{Q8NLznuPBC$^E%?}B{56Iy|_ zrjyxsUXMH{-m*jnGtR0>I#JtKP!k1u=Ix^nr(=l3Z*cFmT9sh& z8Vpriz~8|lyeR?4(Ly~dUl=zJN3Yf{X-gH9R(K9;y~!tmcy1hMM}S3O=kKx^BRJ@r z4WdTVwlBANu|_vwYHH5D@2z@;nj3oZ?V7}aXDgNW74t=M+~ik-F~C@>fIV0>iEtJ+s&%HWJVvJqy0>H$Hh_Ox)($*-AxN z$+*pktxp^ed^#Q~o75maQ*-|8N(er13UOvvhv-sH4`jK@TL-Kfa=Gpn7O~Y6wbebJ z%*F?R%bsb-NiN6|Rcrlv^XDocCnjq@g%3-{oy7#IA=fDF+2IcwEBDG|)Wu-odLmAV z4qM+=Rwm4UzK^L}RC+;|9DBc43|o+F^1v>)=>>tkMXJdl4=afTK=8Dn21)<*5ntCT zRIS&JLo}w}_g#j>V@6Fd^Ky;##o?SDR+0DK7Q23|gs8%{Jkp@-bI z^9k|{3u`KB4jT%`2}dYGvxG`YllxLsr38Uu>SEAoqQy0mIF=vF3!~poEQ{$1Uy|t~ zZjDcG97bGQb&R(q-ST4;zEwF<#kWlTNf5+j);BuoyyknwlZAtRY6X zbW9Z49&^Z;mE}Q7mq*cd7XqCI8Mt8D8H+UA<_LuZqzGk3-7uWZ0$;;F!iK{8$u@ zQ$fb5`AZ&5T_LUIY9`91R8p+o>~3$SaeXymp~L1I5r zYQ0R~-vRmw>xizC^XtyiYAvJQj$Nb#^DIAqh6^c#pK8-WDp`Qmh17r!%;%w|-d+iqb_>Zy5k`9Rz~hDH3?WwH zS!#aeUTnXp%c)?JTeu5RJi%{l?P55ckq@Lws;)$zBKl|M)#}-#htgxF$Qf9D&yI=D z;}Fj`=;dKwMehq<8e!1-ibE#=a>IxwW9ij=hXHb7lQ8WTf|i{`+{4r0eV<_272v(K zD#tdED=7cDac+OVRy*oaJyn~>d?p~nDEb_~>FrMOKhI7#_pTg0o3Vsb0cz6-hS2()Es=@ivk*mdE zD(cX#7pFy&ZF$7B&gwGtoK1`4aUT^;*$?#fuu76-?7cD$&bFQcl$~H{yvu z8@;!Sm~X6AIbdqL;MiGmS<04Ixb2;6;G`fqZ=NE%vWk$Ikvue;jGv|_b7twjR=CGE zM`8J7puFMeIAX$oHz4}POX#sU1@O|i+j#xf6lO#|mMsUiR0Hi_{vuSkB}1yN(@ri>g@^T)z~KI@Fch!QY3*hiNCSfG^$JBA3!iOHv0A8W-qf4qKb ztwmAmlezQ@8~7Sk`3N`sC2touKvy|k?>&UZD(8@Wf^aJ*E6-Pd7E0fAGo-TVCz|t7 zkvQVRS^Vv(&d(A2QmLP`|84JaG83_52N@`E-$<(x4roL1q>`6#jB(t8b6Pf|Vg4tX z&}95olBG!<7q#@Bt6aMsb%}l6$T%dok9Z_mn<+Hq%6f0=$7^e;soDd;3)Q>4IAV=F zt`O%`%=|QV^BM)z=I!VzwNs80;Es9zJl!G08+u0!y>uz!C@q_0X*t{1FTd$w`n$-L zX*DmNrq%yl&7Q95RMonESEGqIVDOtIr~ks%$vTHc#j}L0}Y`=lb`x zq-)pYn!KbMTr?AezA!@HcbhsAUSu_L?lr&W^&)1rxcl3d|5ygjm1rP*m%8}FFD7F3 z17~r5)te%FF?tKfMZcWMpDnzU`d(py?F@j?NDjT^;u=w7U%7%}Z8Ez5^Es8kR*Ffd zL&Nl|_rrjldK{VW)Oq;JI>j2lCmqo0r7|AXhFTB^VS=>CjgSmAosNWf?(*!7O||Zh z7?yPtvymg|NONF#3#MPeehRDTVHw&sIjOj0BEk>vmqPiiX|{T@Q;%_vCOJHf2f~7! zhc4*1HxLUqj_S{LfeOvUKb+|%`qg{5>oehBfTloas5XM^NA>Zzwq36h0-bLmd#n@Zm&ijDf{dfx9ui9 zZ{+;sDz^Fz^hB-R%#CAxMI?hO<`I|7%o7ZIip+^WBLWLu=Rd^$0QeqsqvsL6mw-SW z;gSLBDrx=shmaxZqbu+_#=!!e?IT&)-BsC#CJHk$-PH@3MDN(JD|%@9>9Y0Jjh))p z_PoCy?K$SvNl)%g8;%u8qvFgztD54a@*r-cmFOqu?3U~Rn{JM$e`Rz!Fkq)+K$^*8m)MK1bBOu2mmUy2)ByAl}L zXjw_PSAxuC-D|l{MB0QUPlo=6sWe$LKNkF~j^|wnkw=KICW%0xzMb z7w5~*8S|ffhD{V3S{^2Rr676p#|ZO%3L*@2XPt6Z1Q+x-ft%&goC!c){xdvPg|krnR&*EGX}%r{VupVSqZ#)7Ui@udTdnw9=eR6xkrd17G#| zB|qo|pSMEn3XbZhd==8b>wth(!#r*Inf*W$V_T|GZjvt$HWAJ$PsR(utThm7HS0?= zF-xTF4PIYve+obQ!Ax9O#E?RYkRYmb+EalolMA}OUN4iwJRLT;sog7o=J*18V ze$ER23Fioa#wA!Du=;BiY0D9gU7~Wln|C5=23iYal3UH$$wX!7qyIiQjr9Au3v*Ct z(l~TdL;V3bXA5RGV5UiL{zb_liECoVS-y%vrhF$mO~1<^1KMXuJE!yoX6z|om9x!a zTT=mvcGY=?`93pTc8SKA4F6$O>q`OvN5v$gY`&wi$@B!Mjsyv!8e6+W_tA*DyBnHzz%n zzR8T>fUAW!-Sgp>Mh^pov?yPr24kIZEm8xS*<0OaEoijWD30n+EXo`vPl!v}?A>>* zlxUgRzRzp4&T(rr2HM!zya(deXS@d3q?5R%e}?2fXQZ8!sZ5r^sj=y0$Gdg(4o^*x zdZy9&!CrzltUkJmEuB!c%NG>7Z0llbV395gsZ#Tj0C!u}AidEE6QJj-)#8$V&)C#y znqYR=aeo6ddO_Ug9nYxnAG(4dZV|{Y$mk;~S;e%z(bLOHIhg~eXTv%-J+28qd%0IFt zQr}zE{nmep)`7Z>?He}ULCiE*khZ>o*}~k=o|I*BQ}Q% zR4}Pgzk3SC6BI`Em2D}AVUoDrFd%wMx3AiF#JN#?u686=s92VF>viGaV zh)cD+0Y!ohu4BhIsU8<>NIu(oLL1jekSjD(tb`}+*$b+G@^Zgvf-vpqA-2hm*S-Z$ zeXoMd{IWrZOwMeDf(Qa)dNJs|Q)kQ>mvAa=M^%(Y;!Plyrkjd;n5EXXYrmhGM#j`J6q7hZm(&(_3B8{E0?eA&^bNa&PoCPLDx_4 zbK93+3Or^yVL51V-D1Wvpyt0ks^7dJpEwSsJkuEL(wXNbn0)b+t+jex$`y9nte(4? zk-}`nPBxn!ic@WB+7g9oo&@Ha$YnV$v_gm6$7pk2V2oVZe^Q2Hk4aCPuX?S{x5U)7 zKrd}z;|!x)!wVtr&~Mvd1H-;VZBzOdvsK_#{gd&U?v3j?2w#rKRO{oI%urdWqr1&9&YWOO8o#m_5vw zCGkkJ-wJex-Jd#47Dy0ORl2d0R$4M|;^$g~4B{r9K$@uPMNq&EcoYIiBN>_#LDnWs zrTD>@vPVNwocFKY#tKCdlnG{X;)BoauKHxM1rR#*3C`&%Dn0_hD)nRC$%|fxi?a zc)lxOFd>_)zrnM5)T*)f58<{dC}tl3Zm&)GSQcri-q9Nq*Bs)hW__Lb257sGNN)0f zq09y?1zgbMkub5Pi;BzgX=v9t?)8XnKU2!y54>qW0B6pBnug*Yu%KJ|jfv@krfzlU z3K_;n`2y+#Pd%<;N}k!+jF`q8Dn^QLhlRJ-Iwh*?-=|vXGnXIkh>Nv(0>ED&_blOY zu(dc3imQWq((|md^Q8wR%1EoDj-iBy`Q%c^(T~BwW0go%qOEfm8Snc5(a3YoR^QW> zWR;ceOh}WuRk8*opT6IaN={GI_qL0)bzyp=S;cA`*R6MWAjVLmF`X7)ma1smzz%W=pQx_2KlD2P|P|M zpa-%iU6L9fo08k0n~tA=Vnl}!1hUSqdNgi;j**@gG1eGPRYM+G!n9tlq?>mbKI;c9 ztx@eBvlm`r&BOOKakWmg(5XzD-dh^O;-q4r3{1ww`f6XmNZQ;ZC9Zxg431|U?*;QSW@f+a5XxETg}OS@cEDx_PUF?jsa`1~ z^|WwthtB_WLc`h))ta&khRfhP`(KaiC!ETLKTlHr#Il zu5#B>aAt!QLTzD~i2rj}dR*aV!bor6vY^`)w@te?oti7{+wWfJ6GHwjsy4eH`h8BBjffl{j{ZZdg}qxT4T1}`587lWb8dYZUQ2QV_+K0i z`}D3<{se75({J^hv&BHFAP=`oHz>{?&GM2&1v0~J2F`q(WF(!`+H=F+d=UU;91QsU z6O=SWv$ifJLLqt&lvr^mmQZs`i0Ipt6pm?72S0;mxM{S!HodGS9}mJM7RvGlGH+7f49h{C18qfD%$Cil zJ{U2YiN~`_RP7h?ktF=n31~I)SA}mHEyT*v6{w24?d>%8tNdL4uhd=R zz9c^T46 zmw3Z(7sg%QV~P@%2NPe&V^#S1hWrOoXs_ACLe!mgTodXO&=7`8Ma~+uiV|X%q^a%< zblNo0qG}6UU;o_vW4R;i9qK=b>{$^fqN8y)l+8Z6oGH9L z&UoB?QBYA@A1&ScVg24W$!c+W3HzcPsSKWq4iIUif*xP)&`XsXk}Z5>2u3DWogk92 zbaWXtp=GMB=pQ+TUj^|)!6|*5&t@?tuF4WYRP@cQy#@cH1<2~g?qPRh{|yvn;1)ZT zzqU(A-jpg}pS9imc{@sUrr10->%9@`zDndobadceUxK!=k<=V)GT!z}95Zx_@fTgc z?kzD7h75&dP(h=Lzw(# zTuwTeN#gE-uT!_zbGCKbKeCRw`pN1i@m9b8al<%y>pZ67=e3tZ7yZ*&&+CkBPY5rv z1DusEt7pDKz@3Dt>2d|1Y4lE4MU|^-Tj*S2`sP6yC3~Afx8cB_-q-2n+qdevPg0C5 z?@ySJ*&M>it)5gf1?xsu%SNgQ2=kFU@8k#dZ_@VIbB?FDYZoN;Ee4%lPPw(i{qPoC zYct*UP#S(odT8X@H5T_p*QtO3-m2ykqdfb`DFQhcnUhA}~UeiTT8{d3p9{0chRQr{aI8MYgsmKsORrlHNi<3nmViJ~wDy*wK3AH6m*G{ow9i^XS2 zr`1WM*!po5i@F`M)Ah}q`Bkywnw}(yk0)MbvS+Nb#)$gwG6llPs_FGVEj1x_cVwsE zh|#KEn&20j{SenV@kTvLAf;VUPeEexg(Pcdv6=|J(%CRQ*SXH>Fm`y zF9P?^?0D^q2{J^ga zSD=dsA){D0L`N}r$*$^cfrI+9_7Aw9?=1pI>5CrdyZ$+*9!f&QBO+rTc~3-+x;vaQXN#?sug=JQzlALpe(aHs4xrQ2c>4ZAWWpYUK`pXusrA zMiE;hY}ToIPQLCTx{XP;_2i|Dr* zA)&oS3un~*JeQZY28dSP{86-9tEFX9?(mx*<^+KNXVD&V>4xuSoRh=g!D&Y{cgz{u zAx#*kGf?6kaq0b;no2S#zC`aa@e*B0bf}D6`&nt3gSt)sD?4$YXQkgSsS>Jxc{Klt z*pkt${K5U-uva}xR8XL8!e!zcDeGg`kIDI4BGLVN#YuLS4bmgO0<4q2=ygF&nqC%A zI$MHtNaI2&jFN%IZr81U$dEAYRdKUIM;s1)q}e`@@`2btgLv~P=etH8t|J6wg5w_|NR1AOlhm#HAo zjFgbiI+X=WwG+<5WWc9tT^gc)_er+8(PWoZ-RUGEWG%ToEVr+=mbh{;#5ObvEe_k# z`(&8$9oxDxDOn?(u% zqbA9dgWfnDe(Rb)w}~o?9#Ei~jG;Dc#)+D+_Kjr9=MrpA>4}rj)c+~#yW^>j{{P?C zj%<~6%_3CBHM6;qEixk67g^bxTXq@QD?1}IJ7g5O$`vAerfe>eY`;UF&-eR%JbwM- z(fe`k`<(YVuk$+3*Yh_-z6=&3*smX134KBH4tSB7qnoy7E7n*fGnm>MRI7N7t!o znNtzeq*4fLZGBh$Z^^7Lk$jMWwE^c{1X^X73!1QH>Ge5ff(V` zES86`oU!dasW!_ubQ6ziSP`B|=4t}rP?YX-*00~WVhoir9!zOlCJWQAbL!J6AoTSN zx+n$&>V-23Zu^7*ssmE1cQ7hys~i zWZEDYTr16WTD)!k4FQJX^diE9e0F-0e7|F^b&Q{Aa?E+jj3kGLoLoA#zP_s~g(J+p z=@?b8CjznMT~V#-dz>ed4%@(rrQ9{~FuM@u-CaFwf{A(o8HuCR7pn0v?WSaAv98LC z;o8NGkqq_2CMLMH(~;BFwTCYB=#J-O%8J2_b&J-!T%-)x*%Jg@z%RYAbYi=yDRsol zXS(oKxtN!IOKxdtsUt0#IQ)7ZZTkagrEs1b3Q>?YCG7t`wtPtnZy`>ZCG8XTN|Ioi zyobAkL%JBwTxP2?6O-lstvWZxeoSDSES$x6iOOCG($Me^Ft~DSZNsUFO76So&l{QE zT$x?J0$3l^F2#zKKbmSxnRlR{8mMw9jfo-8H>j8tMy-#3y*D-W==#Y1lSQ~E{oir8 z*A2eU8b@20nf0dS!l2m@T2G0|zU`|;gWKLM=B2rB8X6+zcGWYFME1}i5<{b%rj^jJ7&5Mro`r8-W3Y$w;*Bk0K z)-0xnl0G|3mi;-i;^G!*Cn5&)IT$)lr_D~UYpS#BHK#K==8=@6+6lz`Yy1}vJ&5g=z zNGQKbC{tb5ErC3;=XkW#6j@Vho+QdnYEB=`4YSoQX?~2^9|7_2p^jL8ZgkJnF-3}^ zOB}3&uOzA4>s70U=E*Bk;_=x1mT2$VLeZ)TsdUr@4$=lqzc@ZUE;deZ-pOy4F=c9w9 zrv%~}OolsC(`3~RgrF5s>3PP#P}M1!^F|L#eC?72C&5?kMa$ep54N9=$#zA0yQc#& zG*lhZCjq7gh!H6c|3^Fr6LNiOI@V@NH0zThvJ<6K~;j z3*ebSr95suWfYsV?>1Y!H#0)8a6m&*Id*B*1$~vU72yAi1#jtRLqRa&2>(Cu^tDpI{DzQEAI^S_aEPZOpL-=ik}R8dKDYc z!1~w}KNAtkMbP>RVcF%~M)>xtfbZ7|t45K$e*3$X{)>iemHes<#L(zc6BF?(GUfPZ zLS*5V%`kV_oWRAVH!qH3in2c((B8MN3u^pPHr&=wVyl4>oX?GkSrt8C{-TYsf4fK~ zF!>>qgCE#SxV?Ve6PG-fBjwB1&bc%z((uDa7=!hWIkhgYD9`C_+$!*V! zEibRyLW(oz%uv>6UL~{^avY!J>d+1{BVthME32>XM73G+>YT1ru`zz_CKZGVgiN9S zB_DEY6Ql)Ifo)(3Lrj7%ar-gSJr}(2ja+7I+C`LL&B)-O_l((uijFoHlNe(I-g`c3 zR$YAB_jJA={|1VeY!N;D!#e&L6U8qy&yZdCqhe=^taJZkR5nb!U)XZ+IHuq$!H=Uo z@e@#%M0|)hBc3ktEMSlDEcQ{=sXC5rW#&Rrn}sahap?q+DzmEIO)*0s*pb{}EQvBz zm8l!;MURujAE^|cUk!dqfV`bk)sTjWowPuV4)H-2{?n$`C{|go35P+}DNvpYygb!W zImWDz6=L>!)p@!tnI%s*9``tBfGBusD13ZI8y-MZvdjO|qvNLY+nLqr*D7va1OjOh z$@}zOW|*4(?brQoT&826jvnz~)f-?trq#YbFc;miFC=0VO}6pe0vJTT?D0cQRdLsN ziUH@)SdImC13pz`9OTYyk=*0WeJM!Wt^^8ZM9ows-uoWV!53ma>j_zkIS8Qk;V+7n zTnO1ds<)k~b*JL;YdqKEmIvpfjhKR<{^_BiBMpKbJWiwxR*JTL=CS|f4uy<&C91~8 zdGK~c{$-`;j$Le_FG}OT92wYrkA~>6cTBudv_X_ zb9C?|j6x%VVEtFPv|9UjB`@DIi4eHbj_>G5_K4rgPlZ&qU3d|Wubmi?7uvd|KoIJv z>}ekM%cqGY{+Zlk2WBsRIacpSOYUdg=GXnn%Y>M7MP>|_?630BvjdG7cXx(p_7+Cv z=p)WMDJch`vDTT&i`a+RL$QGDJ*FRv1E zDk8h!Si|hk?tNR5^z2`PDe?AH*s``HX#@rOIyfN743rf===a3lE^>o%mJZcK7qO~f z%B}KW|D0Se~}t*kWim?vtRr_NK~#jur@M6UD?#2rYYM12G&&MIsdzg$2ty zM|lgEFC_8h7}=x`yn#&BklS$XdpECOJ0RghIP#|U5iA?DG@i$Q_q?H^&V)bVeCWqH0rD%YrXUfS)^*Nn;zbv1!{?P6<^hzNl+xOAZx42sc_7Co% z3M&DtJ#+bV<(*Kkhb-5}0w^%)vwODew*_Xf_V;+^#ZfY_oDPT{VlglDQ(&LWU}Ac- zt&TX5F4z>osAz5jd86-nE<@SBU6D~dk)G;{dNAMv1tP81=EO(ZjMi2QwB+NAj27zg z+~L&Rs{-t7JLFifOWlI6WFLMsLmTYL zx1HrJB_LHvpgNQmY>!&bfP$MHy2^8%(GAp8tCN}nrLP$Y&LeFZwQ9GQAw zIgbtcfO~fUGBjgp82q3kni}7s`uwd)x@^wsGk(N{M(v@PPt0n41J%~k?yqcKz`k>O zFwk&=FBv3_&&jO%VXdt}r%S;U;y@Ox4)_!IXA>N#~&mmSd*u2Y@! zff!Cw5afq}d?!3;P0!Yf0f+=~4pY*{sNLP4x*b!oLv(buD?@wNIgSWsO-Ixe%+lSw zM0%4kY0Hw(al@);P%HBVc?RH()q#L7Y9d@gnt$B$XM`(Vq9%8;q^8hD(`S>qLOARI zhK8r^Pm9ZzbtUN|s@(4Hnue%h z!U*t)G=9~@)nGx)+DW{lW~yUi>HCsA}8)Y zw~KU_pgw*(?3W326|T;HL|VCXQE)IcCPC_bKIc~Qj0^clx(JypNO&m{*aoG4-dNX3 z-H*Iu$;|x+#FIGzmgz=;uR7{gLO|G+>q#zW43_mL4seDiyJCbMVpA(bk`LkG*Qc9t zC!MfOIz+%2m=_tcG^N~vgkTcBR z8h4jyBBsmn@Q0Q@Z=nL!KvCpX9ui(u6LEW0-SEDif2S~~4dhRq)8{$0I&H?s_ z6%+G}p`%d{2*dw9(0bL$3{MAyKMzHIM( zOXAao2X^ZG7$8;@>g{Ggy5pk_Y72FboH^1QN9$YKhF1*HZR(($$~4i^BaRy`uc~72 zS8IjaeVt0`HmsoAb#T^FRqj9w^)AUKeVmU;c;63JVmYLv3ZD4GCUvX9y=gy0N0@0R zKK+@z!)VSeJb`NoTO0tPJg$dJw^j{!6SfN)ZKnVo5oUVfDJvk1I5?)sm@&0qyrG8`pmd8mfuUZ!i-vj(dl0RfN+Hx+%ij zVkfmR(M-`I^>Aa0^f<)%^h$g&ARUCgZv^VEhWYSHlKkrpSiePjRSVcYi3(B#QH@OP zbRGSe3d6XE1}iiGF~}KQ2_la*X=0?_EWozhpc-DJeJ3`p#6`t0__MThY78D;>a z4s@G3$1+V>))J_*K+N|MO!(~*Er<>uDp*P`gpV{W5nU&n*Y68O|)qoK? z$d-O+T5?FRSqZaAJs`~CTYle#Y(@aFVcB(~4WF9Ra$>cDD~~qmH>zkbvf2Yme$5uE zPLzUgI0XQnZkr_oJ5b)tsQGKC>A1VBKv~}MdX*uz4>uI~^7W>`t{KNe%Kr7_OD4iD zKlY6e;UjY6<23fJif}E_i|M11Lvaz6{o~#ZUd5K4^)-3x?NRMtwb*6y==j+`ZWJ

dSKjdyxIcB_%t5= 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 - - - - - -SdFat: Arduino/libraries/SdFat/utility/FatLibConfig.h File Reference - - - - - - - - - -

-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
FatLibConfig.h File Reference
-
-
- -

configuration definitions -More...

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

-Macros

#define ENABLE_ARDUINO_FEATURES   1
 
-

Detailed Description

-

configuration definitions

-

Macro Definition Documentation

- -
-
- - - - -
#define ENABLE_ARDUINO_FEATURES   1
-
-

Set USE_LONG_FILE_NAMES nonzero to use long file names (LFN). Long File Name are limited to a maximum length of 255 characters.

-

This implementation allows 7-bit characters in the range 0X20 to 0X7E. The following characters are not allowed:

-

< (less than)

-

(greater than)

-
-

: (colon) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark)

    -
  • (asterisk) Set ARDUINO_FILE_USES_STREAM nonzero to use Stream as the base class for the Arduino File class. If ARDUINO_FILE_USES_STREAM is zero, Print will be used as the base class for the Arduino File class.
  • -
-

You can save some flash if you do not use Stream input functions such as find(), findUntil(), readBytesUntil(), readString(), readStringUntil(), parseInt(), and parsefloat(). Set USE_SEPARATE_FAT_CACHE non-zero to use a second 512 byte cache for FAT table entries. Improves performance for large writes that are not a multiple of 512 bytes. Set USE_MULTI_BLOCK_IO non-zero to use multi-block SD read/write.

-

Don't use mult-block read/write on small AVR boards. Set DESTRUCTOR_CLOSES_FILE non-zero to close a file in its destructor.

-

Causes use of lots of heap in ARM. Call flush for endl if ENDL_CALLS_FLUSH is non-zero

-

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 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. Allow FAT12 volumes if FAT12_SUPPORT is non-zero. FAT12 has not been well tested. Enable Extra features for Arduino.

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_fat_lib_config_8h__dep__incl.png b/libraries/SdFat/html/_fat_lib_config_8h__dep__incl.png deleted file mode 100644 index 6c70d96c90f5df3f9d89bfed17acd6f10c3340b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50405 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 - - - - - -SdFat: Arduino/libraries/SdFat/utility/FatStructs.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
FatStructs.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  longDirectoryEntry
 FAT long directory entry. 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 longDirectoryEntry ldir_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_HIDDEN (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)
 
static uint8_t DIR_IS_SYSTEM (const dir_t *dir)
 
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

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
 
const uint8_t DIR_NT_LC_BASE = 0X08
 
const uint8_t DIR_NT_LC_EXT = 0X10
 
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
 
uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1
 
uint16_t const FAT_DEFAULT_TIME = (1 << 11)
 
uint32_t const FSINFO_LEAD_SIG = 0x41615252
 
uint32_t const FSINFO_STRUCT_SIG = 0x61417272
 
const uint8_t LDIR_NAME1_DIM = 5
 
const uint8_t LDIR_NAME2_DIM = 6
 
const uint8_t LDIR_NAME3_DIM = 2
 
const uint8_t LDIR_ORD_LAST_LONG_ENTRY = 0X40
 
-

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 longDirectoryEntry ldir_t
-
-

Type name for longDirectoryEntry

- -
-
- -
-
- - - - -
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)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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_HIDDEN (const dir_tdir)
-
-inlinestatic
-
-

Directory entry is hidden

Parameters
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns
true if the entry is hidden else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static uint8_t DIR_IS_LONG_NAME (const dir_tdir)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

Directory entry is for a subdirectory

Parameters
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns
true if the entry is for a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static uint8_t DIR_IS_SYSTEM (const dir_tdir)
-
-inlinestatic
-
-

Directory entry is system type

Parameters
- - -
[in]dirPointer to a directory entry.
-
-
-
Returns
true if the entry is system else false.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
static uint16_t FAT_DATE (uint16_t year,
uint8_t month,
uint8_t day 
)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

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 
)
-
-inlinestatic
-
-

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)
-
-inlinestatic
-
-

year part of FAT directory date field

Parameters
- - -
[in]fatDateDate in packed dir format.
-
-
-
Returns
Extracted year [1980,2107]
- -
-
-

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

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_FILE_TYPE_MASK = (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY)
-
-

Mask for file/subdirectory tests

- -
-
- -
-
- - - - -
uint8_t const DIR_ATT_HIDDEN = 0X02
-
-

File should e 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

- -
-
- -
-
- - - - -
const uint8_t DIR_NT_LC_BASE = 0X08
-
-

Filename base-name is all lower case

- -
-
- -
-
- - - - -
const uint8_t DIR_NT_LC_EXT = 0X10
-
-

Filename extension is all lower case.

- -
-
- -
-
- - - - -
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.

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

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

- -
-
- -
-
- - - - -
const uint8_t LDIR_NAME1_DIM = 5
-
-

Dimension of first name field in long directory entry

- -
-
- -
-
- - - - -
const uint8_t LDIR_NAME2_DIM = 6
-
-

Dimension of first name field in long directory entry

- -
-
- -
-
- - - - -
const uint8_t LDIR_NAME3_DIM = 2
-
-

Dimension of first name field in long directory entry

- -
-
- -
-
- - - - -
const uint8_t LDIR_ORD_LAST_LONG_ENTRY = 0X40
-
-

Ord mast that indicates the entry is the last long dir entry in a set of long dir entries. All valid sets of long dir entries must begin with an entry having this mask.

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_fat_structs_8h__dep__incl.png b/libraries/SdFat/html/_fat_structs_8h__dep__incl.png deleted file mode 100644 index 41df99b9e171402b64d54f10206e2762a7e566ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37708 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 z 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%0AG54FX?Zv4MKZfo9uLs!TA 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 diff --git a/libraries/SdFat/html/_fat_volume_8h.html b/libraries/SdFat/html/_fat_volume_8h.html deleted file mode 100644 index a0e783e..0000000 --- a/libraries/SdFat/html/_fat_volume_8h.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/utility/FatVolume.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
FatVolume.h File Reference
-
-
- -

FatVolume class. -More...

-
#include <stddef.h>
-#include "FatLibConfig.h"
-#include "FatStructs.h"
-#include <Arduino.h>
-
-Include dependency graph for FatVolume.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - -

-Classes

union  cache_t
 Cache for an raw data block. More...
 
class  FatCache
 Block cache. More...
 
class  FatVolume
 Access FAT16 and FAT32 volumes on raw file devices. More...
 
- - - -

-Typedefs

typedef Print print_t
 
-

Detailed Description

-

FatVolume class.

-

Typedef Documentation

- -
-
- - - - -
typedef Print print_t
-
-

Use Print on Arduino

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_fat_volume_8h__dep__incl.png b/libraries/SdFat/html/_fat_volume_8h__dep__incl.png deleted file mode 100644 index f984b3362c0ebe837808257d40afa32eff451849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33146 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 diff --git a/libraries/SdFat/html/_fat_volume_8h__incl.png b/libraries/SdFat/html/_fat_volume_8h__incl.png deleted file mode 100644 index f795de897d29b2e58a49a8b7b1efeb6502c3308b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10474 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 diff --git a/libraries/SdFat/html/_sd_fat_8h.html b/libraries/SdFat/html/_sd_fat_8h.html deleted file mode 100644 index 560c88e..0000000 --- a/libraries/SdFat/html/_sd_fat_8h.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/SdFat.h File Reference - - - - - - - - - - -
- -
-
SdFat.h File Reference
-
-
- -

SdFat class. -More...

-
#include "SdSpiCard.h"
-#include "utility/FatLib.h"
-
-Include dependency graph for SdFat.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - - - - - - - - - - - - - - - - -

-Classes

class  SdBaseFile
 Class for backward compatibility. More...
 
class  SdFat
 Main file system class for SdFat library. More...
 
class  SdFatBase
 Virtual base class for SdFat library. More...
 
class  SdFatLibSpi
 SdFat class using the standard Arduino SPI library. More...
 
class  SdFatSoftSpi< MisoPin, MosiPin, SckPin >
 SdFat class using software SPI. More...
 
class  SdFile
 Class for backward compatibility. More...
 
- - - -

-Macros

#define SD_FAT_VERSION   20150321
 
-

Detailed Description

-

SdFat class.

-

Macro Definition Documentation

- -
-
- - - - -
#define SD_FAT_VERSION   20150321
-
-

SdFat version YYYYMMDD

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_sd_fat_8h__dep__incl.png b/libraries/SdFat/html/_sd_fat_8h__dep__incl.png deleted file mode 100644 index 4b267ab596e3829f38849bd1e6d3a9308ccef652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1863 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 A6951J diff --git a/libraries/SdFat/html/_sd_fat_config_8h.html b/libraries/SdFat/html/_sd_fat_config_8h.html deleted file mode 100644 index 05f8a3d..0000000 --- a/libraries/SdFat/html/_sd_fat_config_8h.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - -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 ARDUINO_FILE_USES_STREAM   1
 
#define DESTRUCTOR_CLOSES_FILE   0
 
#define ENABLE_SPI_TRANSACTION   0
 
#define ENABLE_SPI_YIELD   0
 
#define ENDL_CALLS_FLUSH   0
 
#define FAT12_SUPPORT   0
 
#define SD_SPI_CONFIGURATION   0
 
#define USE_LONG_FILE_NAMES   1
 
#define USE_MULTI_BLOCK_IO   1
 
#define USE_SD_CRC   0
 
#define USE_SEPARATE_FAT_CACHE   0
 
- - - - - - - - - -

-Variables

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 ARDUINO_FILE_USES_STREAM   1
-
-

Set ARDUINO_FILE_USES_STREAM nonzero to use Stream as the base class for the Arduino File class. If ARDUINO_FILE_USES_STREAM is zero, Print will be used as the base class for the Arduino File class.

-

You can save some flash if you do not use Stream input functions such as find(), findUntil(), readBytesUntil(), readString(), readStringUntil(), parseInt(), and parseFloat().

- -
-
- -
-
- - - - -
#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 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 programs 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 SD_SPI_CONFIGURATION   0
-
-

The symbol SD_SPI_CONFIGURATION defines SPI access to the SD card.

-

IF SD_SPI_CONFIGUTATION is define to be zero, only the SdFat class is define and SdFat uses a fast custom SPI implementation.

-

If SD_SPI_CONFIGURATION is define to be one, only the SdFat class is define and SdFat uses the standard Arduino SPI.h library.

-

If SD_SPI_CONFIGURATION is define to be two, only the SdFat class is define and SdFat uses software SPI on the pins defined below.

-

If SD_SPI_CONFIGURATION is define to be three, the three classes, SdFat, SdFatLibSpi, and SdFatSoftSpi are defined. SdFat uses the fast custom SPI implementation. SdFatLibSpi uses the standard Arduino SPI library. SdFatSoftSpi is a template class that uses Software SPI. The template parameters define the software SPI pins. See the ThreeCard example for simultaneous use of all three classes.

- -
-
- -
-
- - - - -
#define USE_LONG_FILE_NAMES   1
-
-

Set USE_LONG_FILE_NAMES nonzero to use long file names (LFN). Long File Name are limited to a maximum length of 255 characters.

-

This implementation allows 7-bit characters in the range 0X20 to 0X7E except the following characters are not allowed:

-

< (less than)

-

(greater than)

-
-

: (colon) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark)

    -
  • (asterisk)
  • -
- -
-
- -
-
- - - - -
#define USE_MULTI_BLOCK_IO   1
-
-

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

-

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

- -
-
- -
-
- - - - -
#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. This improves performance for large writes that are not a multiple of 512 bytes.

- -
-
-

Variable Documentation

- -
-
- - - - -
uint8_t const SOFT_SPI_MISO_PIN = 12
-
-

Software SPI Master In Slave Out pin

- -
-
- -
-
- - - - -
uint8_t const SOFT_SPI_MOSI_PIN = 11
-
-

If SD_SPI_CONFIGURATION is defined to be two, these definitions will define the pins used for software SPI.

-

The default definition allows Uno shields to be used on other boards.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/libraries/SdFat/html/_sd_fat_config_8h__dep__incl.png b/libraries/SdFat/html/_sd_fat_config_8h__dep__incl.png deleted file mode 100644 index 04330f539f4fd6f2f0ed0081b49b6d0e64cb65ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59725 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 diff --git a/libraries/SdFat/html/_sd_fat_config_8h__incl.png b/libraries/SdFat/html/_sd_fat_config_8h__incl.png deleted file mode 100644 index 27b925dcb47868b62631d6c64dea5f8d89e91cb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1641 zcmeAS@N?(olHy`uVBq!ia0vp^OM$q7gAGV#d992GQfx`y?k)`fL2$v|<&%K|a-J@Z zAr*7p-u2JF<08TKA$`xniN6>-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 diff --git a/libraries/SdFat/html/_sd_fat_util_8h.html b/libraries/SdFat/html/_sd_fat_util_8h.html deleted file mode 100644 index 38a3d2d..0000000 --- a/libraries/SdFat/html/_sd_fat_util_8h.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -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/libraries/SdFat/html/_sd_fat_util_8h__incl.png b/libraries/SdFat/html/_sd_fat_util_8h__incl.png deleted file mode 100644 index 2600b3386f75f654c49c1b78e2f70c0e7ca9276e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24415 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¨M?wM7y zznt}MpFQcLB3FETa_-+n(jMURM!%Zx;|l0A;x3<_p(Q#n-wi5{1b1q@NWJToqntH= z-HCfmiEr6Yzj_r$azZy_C${|}dwKf@G`d!tC$+!>3m>7y9q;Tf@b+aYnO}uPAGxI8 zr6S{|XQqn>T<>hBbK0Ot+LIBrN79dld-+!tb5_kq<;`PU^N5$1b&D$5d%Rj;_jisB zIiT)ehqK{k^ahbdZ&H31?s1NI>AU}>eiR-uW$ct(gj@Sf)xv2ZF=eOQz%P=S!dT*t z3HHg;NsAYp2;z2hXc8A~srSO*KC>U6@py+Nx?N$!;*M5oM~~|YKCm5Ifbl=agx;^m zEi&!=_~?I`do_Q@OfAdp_wT?euBE-JJ!dj|r;6`zk$H0xQ+`AZEw)Lm#l2$HzR%ZD z`F}M2EmPc2X)Z#c^RJ`c?OVv1gU?$zH{c+C?oFHHjqbDG?hgC6R*`=_#B|ET>Sw34 zQ!65ImF4hdT!}l#Yp|&SMH|}z0*Ku8_k{uCUVEiC;I~m|Ez$gY;1YIVsyb013d{pL z%s7rC;0sC3w%D2Vr&N^`Z5(>h&$WUgHlE{dfYJZo>)nZ#!27geH>krjcw# - - - - - -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 <SPI.h>
-#include "utility/SoftSPI.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...
 
class  SdSpiBase
 Virtual SPI class for access to SD and SDHC flash memory cards. More...
 
class  SdSpiLib
 Arduino SPI library class for access to SD and SDHC flash memory cards. More...
 
class  SdSpiSoft< MisoPin, MosiPin, SckPin >
 Software SPI class for access to SD and SDHC flash memory cards. More...
 
- - - -

-Typedefs

typedef SdSpi SpiDefault_t
 
-

Detailed Description

-

SdSpi class for V2 SD/SDHC cards.

-

Typedef Documentation

- -
-
- - - - -
typedef SdSpi SpiDefault_t
-
-

Default is custom fast SPI.

- -
-
-
- - - - diff --git a/libraries/SdFat/html/_sd_spi_8h__dep__incl.png b/libraries/SdFat/html/_sd_spi_8h__dep__incl.png deleted file mode 100644 index 831075a407e378422ce5c678741dce222f0c2b2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4148 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 diff --git a/libraries/SdFat/html/_sd_spi_8h__incl.png b/libraries/SdFat/html/_sd_spi_8h__incl.png deleted file mode 100644 index 0197882e854cc5a2f0c465a4fec2ed557adfd590..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12613 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 XMB16Z91r|o1n^2u1zsj=^5OpgO^LLs diff --git a/libraries/SdFat/html/_sd_spi_card_8h.html b/libraries/SdFat/html/_sd_spi_card_8h.html deleted file mode 100644 index 61f5837..0000000 --- a/libraries/SdFat/html/_sd_spi_card_8h.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/SdSpiCard.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SdSpiCard.h File Reference
-
-
- -

SdSpiCard class for V2 SD/SDHC cards. -More...

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

-Classes

class  Sd2Card
 Raw access to SD and SDHC card using default SPI library. More...
 
class  SdSpiCard
 Raw access to SD and SDHC flash memory cards via SPI protocol. More...
 
-

Detailed Description

-

SdSpiCard class for V2 SD/SDHC cards.

-
- - - - diff --git a/libraries/SdFat/html/_sd_spi_card_8h__dep__incl.png b/libraries/SdFat/html/_sd_spi_card_8h__dep__incl.png deleted file mode 100644 index bb44d441d7f6fc071345ed1a196f4b8a7b3f3930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3032 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 %=-=I!74dnV{) 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 LW^jU@OWgkeG%mu7 diff --git a/libraries/SdFat/html/_soft_s_p_i_8h.html b/libraries/SdFat/html/_soft_s_p_i_8h.html deleted file mode 100644 index 2a759cb..0000000 --- a/libraries/SdFat/html/_soft_s_p_i_8h.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -SdFat: Arduino/libraries/SdFat/utility/SoftSPI.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SoftSPI.h File Reference
-
-
- -

Software SPI. -More...

-
#include "DigitalPin.h"
-
-Include dependency graph for SoftSPI.h:
-
-
- - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - -
-
- - - - -

-Classes

class  SoftSPI< MisoPin, MosiPin, SckPin, Mode >
 Fast software SPI. More...
 
- - - -

-Macros

#define nop   asm volatile ("nop\n\t")
 
- - - - - - - - - -

-Variables

const bool MISO_LEVEL = false
 
const bool MISO_MODE = false
 
const bool MOSI_MODE = true
 
const bool SCK_MODE = true
 
-

Detailed Description

-

Software SPI.

-
- - - - diff --git a/libraries/SdFat/html/_soft_s_p_i_8h__dep__incl.png b/libraries/SdFat/html/_soft_s_p_i_8h__dep__incl.png deleted file mode 100644 index 5e64dc4cccf5b1f1fd61069ad0b2db74ab43b6ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5353 zcmchbc{r5o|HmJxl(j{X^>kVoL}aa~D2lApn8HvAF_yv*GlNdy6rqeI8k#gS8H_MS zW(+D@*0PLc8dC|Gv5zs9;x}jc{m%DXzu$G8zkcU={`lPY{oL36T=(^SKCkEfzVA6X z*vLpKNdf>MbMEYE7g59mfY{S5n?|zz^Fk@4I#H_#`f8 ze0@r(<$T)Bc2CJhp5s#~r9{!?s?D zeCHbiK|r7oVLy9DLOO!rN23Ld*+UVI4`sG(|NV02Ta;pkHb0FTDY?xOI+tJc1U_vo z5iIpVy^M~Z!E}y|9SmmE1lOXfK^P!TNMxtC3)#$G?9u#LER8_SeBs$=$tYFj){pDLK@Vz87jn=pUq=?1$TT z5d*E9%_#alkGWUj;N)xU$T@d7?@dx$s}LO6AHi8LrG9@uwH#53VBMI_Q&5LiHZGv5 z+ey)5isS>TVAnac6&N$|DBuYMMJCnAtGhu?wsp~|@aQfyE64qj6OD$qNQnw`$&Z>H zTpb)(r0VA!RdS>fDF_9tE8Jn!@-)svtc@Z5tH0NaZ{parn<*RZCmG(&Es#+PTYPlw zys|2IclCzcpWF3eUJpa|G)~3$av)u4#sky|Expr_RhJlN%$31iz==KG7t@C3hTx^2 zOR9#48a&6;6er(>Jxapuzo}@ugIFn!)k19UtgV}F=*4p{zai?djzWCsveNblqYO^G z_og!3f^$qdj7SLNH3aHW+K-;tyFw|`zQR9HzM8pk(2msR^sBUwb4#*v|2tm}g8QVo zqNAa#gRu4SrF8f-o}zAazag=kV7d=9esok&M0m8zuM6X7s{Y-m?=5jszO@3me}@Sn zkVe;WV9f6sk8f`%1ZR=Tz2zvh!}8k|T6N#)?Xj66KK*iIIYV_w8MnB)c1En&@0);S%X%g>lA(!eCF$Hgmz?jRa$a_><(20X3w z9FiLKNon497~>qAJRVj_kZ+R9Don2!)N+KKzO1?L{6U+#VtF-fU9jXa{xYhh=)JADibjs?&(yKqZGH5BdVt-@$P5F90axV(wVoI&7oDG!f<8DeQCoF#- z=m!*q32xp{xCi`|E#tKllTa$2otx(@ndHW^)7CaoKVt3}EbSxX*G0|;W+A4&)7tSL z=I7tw#{&A)MdOh(UzAhxHXArgIvtlRy^SkA1rlsc&3Zs#j+a9TiHfaCuC6KTmyg$0 zxzvcoG5I08viuoKgH)caxG|Q@dv|TbR-j!dDa7oTwL16Z@V^*RCb*lE049KX{+Sk@ z!=$^ryVunMpH8z76WRF%;oGCr?FQ(-9u286y1A-vdmh<(r|3H9ZP;lLL+mYtWlH$H zfD-?xBMlo(#F&7aIiqE#oQWUK^rsiL8K|VYUzkRpdE)hiuz-_EG~8qB4)y2$+}cK>L7`?ic3P224=)h*lvha@ z2UBq`REDz4&m+nz3#piYViKJ?T5)97-*Nu48&}_F7stf#%wyfcrc14%Cnzdj5V1oi zW`@WU=E5MjYoX-?H#6E~?B-eY*lWKTKW`SR>H62}$4B$JnK0@2LL`5bo*24GM=1Lf z0e#9v<=frlu>IGs&Zr)4S(8bRe#X>_qk4E;>0+3K0wfikxvW;xfEfWha;BCt)1%pGcWQpJvWRl9)c>C} zaLBdc1Qo6nb{Jh3nnA~peGB0~DY$MWJ$ief(6fvuXB-YmV4~%s<$8BnN#RpPgM?|e z5w_!iZ_Xt@nd;RPEO&Gjo&?v*v11F4hMdKdtX0=?xESP(9y0mr z)Rd6;x$T-JE->tT)9hxY?(A}%2vSzp%4q-GwdzFNU4!NedK^Jeshv?}Nn}Dd8l3oh zvOeyAN@HITq4dv8_$_#hgF*~lrIbh-Kn>LMy5uMlh!CsEqg(&be>0Nm)g+-_a|erE z5272u_(@dl_jVP7P5s0kggG`?h32$9ek9vKtVEEsDqLHb9IX2^D!xx2^UwjivS=fA zyl#EAg-u@<3XFL@64E};=WZ>VmFN%0no8VYbgV3hC~%IqY%+HvVCd(kdFIFnEVTSV zy_2MnOn>lgZIfv``FXzQqW3Qp?w!9epAVu zOAmr8CF075EqWjy?6IeSV1dhRsx~s(`t*8-`ATYnw)MjMa2i=7T}JJuM*Vbd z!xhbQDhZGN-O$q~;~>5S2Wo;5ajED@M+?E{#PzikEY{3Ab&3|=?zLel@yiCVW+||= zHLl}e!09^?YV{|s=!MC>BFnyBzmOM-d`n65{#&ku-gWWwEDc^Jms74>;s!mY=F)V6 zUN!y>j>6K87iEz-6aQPu9QaX_`0>A$jOp`tPD3H{-kGBC< zYGj^YE^}t|eG|rqlvHA0iJz=Z;<&jhczU?j=3k{#R|(B!qlv*?Rmc)n!X07F(m>^* zeC%yUs%pmCIZ!VjuG5)$}??m{&5Z5UqwjlD43Ba#TbXl)T2A;%d($>P823& zf+O86x)9d=R#87i47pCOkU2|Mt$V}itC=gOSTX6Di~D}L2$K~-#NYilh!~YPz$^(3 z%l9AWF=@5ooU$G&D%R|#y|&bLgN{St_q|9*se~dCP=Z82A<4a(HZ;kqtwjvAwBgd))QWRu`_J4ws8FS%`Wu6Bfm`g zYu|suXT7Y!n4aNU-iBF+C>#h=w{cbo><;aJp|^Xt1ucC3YoFea z>B#l(A?h(pdh2}==%Zg%f!O|t1JV8lm)1K)CFfTm@S?)9EIwr$Y(=XA6xVU}SQL6F zB1ohxk_{gh=R<7KVgQ9nPf7|XnL3J4wc6uv=mO1ng9e-=lL{WjRR1w}4qj7i)U+y> z!Mqh{pgc= z{w1CpbotOSCB;@ZT|IygA0w~c2B*K{svEoF)vjp5vpamfHuRqBhf|tTTyiwJ;orX0 z`O05jkba6Yicr%9udaK1d98!ngr9AG04P z!9lTqU9>0iq74RLbw`-5#QnX@|Nf2s-+Ip-mX60E0mG2Bs?kwSPr-)|Ox}mrBHML! zC3Ptuc)2ldJvK59DU9if*hTw>1oCwB!eOdck9fg;1%NDjDYJi8HQ3O5mrS6mSQoEc zXK|dMmyo?3DTBs1qPwK%~P(G&}wDRX^*~3mpU4jU?S{fAP z&8AjgSmieHI~n?QU+%h>QasSGRs$WW8gusTQ@H)$K0P9n$A^g&QzzFbEYeU zm1T$dU%dONsEExLQ|Bx^;49Ib+K}t_4PY)0Dlnrl*Uf548{A@sD`7pzX%@5CCBD1w zkRZ5yByFYrPSXOt}b@=AD?tz+#d9|#$LmC3wUWuqv38?uecd!2OxANzoBp!m)1-xpq zv8c1eD|%I;!`Y<03G*jIeESwU-qS)7aN-HOZPg$7_B903D-u4U?eZZbIfr`TR+2vb zzJ1an)go$Tbas*^a`&c!!XyX-Fu90QXtR^$;9_<%vK_FRu07B}@?W*v*Xm>mLc7|x z>pUCYV=J^*ee;Kf{txH#rw<~ej|&&q=ZR%Na|&8Ea=IpI8C5hz3h&@#DrCoiE^eGv ziHo1?o4B{n#^T4^PK~_f51pN>xm6+Sn5^ind~G1r<8BLuSR?nz@4*G4MvD4+tDM*a zJid<)cml}Bn*ZQ`H1Sk1G~*9SgxJF;fjDNgzaA#bOf6NUT&nf+y83cl6i;{%96EiA z6j()Ip+08&!Sn(zSIN{}S)h3AGOCv8id~7rB|nuXgW^{kecZgIU$l*PvOR)}JVmyO zX_(74mHf2K*k)l1Qeh3b-J-?^2sT(<>OsX!!hvL@RY_Tq5!uKCKP+NOPrq2ZeV1nZ znGyj$BO^EUah`@rLU}@kU%w-;q@}Vx>i|m5%u>)bf)=fbroTceaBeLarrmRi`{H~{ zMkI7>3mtFO1U|2{$YL0nH#jk0mWO_q7@1>ae31btd9g*W&hr|(s4%F~%ZYH9<3VNU z5ZOlkhU33$e}1!D+2r7tTQ1Ag+bEIki2e+EWu<^81vpS(St-kAwhB0t>bs1j7yKso zomJ`u4HV+>SNAgwj@w|ml@EJVKKMJ~{x2cZ^C766Ry{OxjUfrQS3=rMNyLV=pk1Hd ztB^ILUO{$QStQW}wkuI`)vKM$jsCXkLpRQ*<0yy>g6^}LViFROv2#eKx>cXi$=pQq zghyNWDBo|zJpi>`P;k!;up2}x)KyY-YhD$jPBcaY3GGw8+vM1JAwst*8Ht&wxiYxB z#WC^x#r^7JyxM;p%HVZ`R&8^TUGL}lr>LkmL=E{yb6OYHSiLoLP_QyD?Y z)+tTkX;2Wm(J7l|;#G^(gw}`709S_;_BY;kXfd_<<>2CQnfF&x=+N}-@)&}BDk#b0 zw*B_8Y;tK!Rq~fbOYRKG@2qklD?CHt843NaRug17ajf2iLGG*{Lfmi`4EQ~sd2M&z z%tElhP6;t9?3XcXkuvz2KE7Z6FEhMw2(yEDv)X~T#5_Qmbb#|QP7bi#CWxos*}7j; zyNTvLEDa3kp+$UmVuQa26?6l^?Uq7M)zS?gXh(3f;3Rhq!2t{d+cbL01@`Ehon}#Z zgi`-D0pk4QV}~23X^}`0Rj?Nmlv+Tl1upsZE;xJ9L;QPQS<2M}Zr(m-akpGs)RBD> zdj2*q*&>|Nd*tuOCx7iq^Lp;<-sicoW+wVPCxlM`005r5 z1`rqk0F+{V_a5V5y=8186U6BAgseycAC+ZE;nnjXD#XOE156Qrq(1`f4LCGV+`JLwThbnKr+$&^k3WwMMl+ zRytu-eSSpaciFm6jUL7~vcAdn2K};1$(?`;D*q^%?VN?e-;|f8mc}QCT368F`F=es zQD@vPQBXSsoyeko-*A=m3-|q=^kd3ws%NaFPw+M%rFudr1C+?#MmZ+KtxuIotv|?h zXU-0k57FV6UazOwE(dl`ANow>PB>S9+vs@mQ*Ml`?B-E;!VNC$h?*fSw0*3!BfjQ= zjuX}H39)`85ZeoNR!oJOl~|LEOlfZ6zaR8WnriKA)zDrbl+~}LLQ~5dzFqb4MMB|= z;?Vqv<4m4M^1b@Q?a%3;o^x}bZpm#;(!h5tK8lfp^J+ZE&TX2QfQQ>wK`8Mo!9Mt zJgQK6J6d`sxX*@W>6w|9bsN^Br1Ug{s{zUJeFId56$C}(JKEfI`5^@U{%NSw+(*=u zczta>+t_XZy=jjKj^)%DQHXkjQ7Sh$MRTY;Z?_Bspm(7(>-E%U(qU57XWWDFY%9xgBid1?X9YUYf7-{KOHMT)Q8wQvWD8)| zQr)_SE+H^}6ERO)=$ZEI9FB8A$xbS6*p0q}zQ0S`aF29+DP>naPKtFxsixed1%!p0f25SE^b0KL+aSf)@kX?Gp%y@Lb}G$ z`H-sDiPAZzTFc{&MmXmE-C?IxSP;*CkhO+fOJmpqm~XnDKW^1Czrhmz{DI2|?z;yk z;g$*a)XqXv-!hOP76M7YW0eg4!I)_^%xiVNw1j*};LVdYkNjkgMpUVze{5vMW|XWc zrplB{7$7@8&c(<^lu0k<(^||58e!OeCcJ`6XZO1Yt{~-@-}}-yVKLp?8zR^R|@WQvScSkzlRtIXtU>m-sfbvHH@Q- zhrXYMny1E09?>!Prf?~QtRxjJT`2ITm&P$c^cE zBW9N2ok@EyPYFdQWx7wzX1ZWkEDAYr*O!SZcvxq6WdpMPpxoIwa!k&}%1weBLo+i` zEzc4PzxhFU79BHaUoR}Ayap1!{bX7SNyPXDBa683vFYnh> zBG0n-cJgnktG(s>JfDRt#N7XTsN}!u!(U=N_pHJLy}ad|FOtN8fZZBv1q&U!+~x=1jn?2j0n}FV^umiI0b4DBJFcfb@2$+w zQ*z5cX4}HkxL{aFJ5_CbcsTf-Yz=NPWVp-aKGt~KVoXp)K9N<01_rLs8azX;1umXmaF?^03@CZ?wsY5_jA23|=^TVcKH@(b4<@{dO64@H306|~#Ei?#qkIkH-* zMqArJ^@Ic|C$QI}^$S$SVWX_p$tefidN@5$!~%_vUv4#XyOu)<&YxCmfIAs|d6)*> zJZwQ3*METRQ!{fs5y1H>oz;@L%`ISPh}LOc>^+o!r`=CNleM{bDK11Z&FW90qYwF6 z(UPp=;ep6~BK0r~UJnzn44(Y{GN;xay+G)?8U)g@ygJ=(R@MH}TYW`)7U-&}wcgNtgC=;h{KlyRB?=CtWR zZm!n#V>6im;&kAe*u=zId(l$Cn1jr4nV}UzRZHT9SVTy1Q|M20Tbt_s2nzmet?zo~ zrN0huMO5R0EWl;Kg@Zhre~li?3}2w^liY1;r}=cWxu)(Db7OdTHWM=OrB-+Jnc+%W zlVK+$cw^bM{U-jjEZO=$Y*-+a+&ByM?eLvu93=$2j1%sCI=d zTmkUuVD)F00|L=>#h9Y^ll5;2>ym>{_DUlrxu*2Vn)^;KG$RQjg-!0tW1=kwrT=2msBf`;FGi{RIIM!;ri^QSHp z!d#PEip$r(Q%Jv%lW}Awda{^LSpKuM^Bfha_IE$Sk?yiD5hTh^kfju zWuxlHnJ1#RVMS$VE1-Y;d9grPyvqWO-^&8~_-b}XAq&?q@4|B<6JqMVlZ~;59A58m zRX5P0b--mj{L8kg))JE|7%=As--%liZ)|Q*pL8O~%kt`WOMG40w*e>U1DBH^S;N?& zqFZE@;b!6^+Be`sxff5sWlW9o?b~Gdy@j(-j(|xiG5zw;jWV?1u)KzUfSTfC0{)H? zI3u8-%;V>|h^P13%kbk3vmf3P_n>6od*0j_;U#)vvq?28{4GKmH9RX0IuWW{Cs`KuEQ{Zb-;XYQKDf=!4{GgkR9XuqtEjwm^qJC65uwA4crKk$E7&>OmnfAO2O@(<7?Vz zdHymfz;>C31?lKn=!K=_yRw@Ls zJe=dkn29!+dwB6isEg?z$f8C6R4?FU$O9;)n_e$*Ic!rZWU^earow?e8P2DRU3@3U zESMvR@gCW|3E%(B*tXNq$WnVuknfR86aEu;5mXA;!Q&OAn|3b%35{OV$Z7AuNcOq#}PS~UijC3{;W+8taxTb8UDyR;d}3m>2JqA z@(LoX$Vp1>2OC@J&93b~KhJS%S6S!0Wm+q`m)DNuM!-9__5K_fBw;E{Is?}%;EiI* zhHtyS^cT4o^k86_+iZUfl!ciejuC$n#55DD?DxC6im31LWe>efT~BH-epgBIjY__F z3k=L;Tu&C(V}+>Hu_Du>*96#GZNfD%~n7MX5%vb!#>Z@rZ;_x3#FTcoL#*f(u3d+qL?VuYg1lL<*DhoT3+Q6G|7NV00CkAh z?NeQmSo2>OSb42={g-9w;%0jhe=C2tV>sDnc92zV%(BBZ^U~SAgEch+7Y_Chci$`! zgn1f}`f?9_oIZbRpF^mMa~+xBnHohAoSX_dNUx`)&QO_L=ChCFa20w=f$O=fxVqoY z1R%yqq%G|n3iAeQ=Y*q91M_}?!ToWR9X@0uSC7Q8pyiyI0D$W0mhD50fe*mS zLsau%!-rpdr-i;Y+S}(&voA$QBX?K&5TS{4VtWekES^Ui*(S|9J9Das<%4cZ5HjPk zUSaw^1~)0=6M|5Sn4Bh5d{s}ZvW9m+veNp`80dSjDbKCz3b2mz$lp3goQc)j&M94P zaM!!V*_}43VaEY=^ww~*cJ%weX{2vfS9W96eb)?))PbZJHEW3Nq{Er#k}ukEK5`K& z>ohr=w?>{p1CLVfu-{tB2Kd-M)???>sTr=j=q|;oGQ*R^DN&t6v2Vybg%v9R;*0cc zC2PoPk@nutDeZGtt2~u`W$HaGxm%!)Vx#yt3qUq*_s2IgYF)}NZV|ElU3>T(6ZF2v zd%JF0lvqsDd-#+_YG4zA%(Q__c%8$|zJUrX{d^Gz^8A~_Z;N;^csx%zr{nc=p23yyd#>fntlxHa`-WO#G?lCVsf zr?R_DtlO@(dAvgNF;7J0OwSX!xXS(lJudqF_Vd?~_w`C~ZSljiQ-Kw{K%WW&`ZK7@ zpeD<$Db_4XaGXBw#>!u&? z!haOwa(zTcZO9P1Qukk?Dw9b*VG*4Rb7(U&Q;g`MVOS4xO5~!HVB42 zKt#n?!d&JA)+JLm9^(E;yQbEjh8?hZTS}hO?6H_53ps(!auTkiA%Tu zZ?U)V>3|bW_yKj3+stxB%c4-{NYd2Qqj+4{kroZM%~u`Ub{XNr@RyWg^4R3q;-2eh z<H!*lz_9MJg9baW8)R6TCpA>9`I;>#@aJ*52xDXx|W2mr)4pQ zgAM@6CdCZ920xD{)HGE!wE#ShsP%Dco1v}5=+r)#5XlYO<-HOWefWpAwzlAa&_pyJ zq>50=)ax%NZ4Fc-TzEEci%h)_KL=dn?wGdd31z>S?G>8hL8?{gvLiWHx7-GF;k-wV z&At(ouI&w;tP-7`CaW=*@ztQp5eSc*oZL9zBd@pMcDzCGg9HV{*mEug8}GevYWVRa z?E{Uim2ri^`Qvtit~irk@A?{dylL(jFt50{_$CDw$-&7f@RQztmMXu$?@UuyQ>$as zPuGU5;DTB+RNVbuY2-enyOP?>);%ai%#DPY<&J;d#-V5P%@-7}VzlI6J2(dXFt*Rw zY#?>2Ug=-=&mVVdCwN$`n8Er)nP+HFTJZ~-*F?HBbH^@WQ*gw+hv3me7ZG^2oDlU- z>t-hAU4CjQSDuWA{|zb~>72PU*6nXc6c#BfO>q~Sv2JcBxYmnPJ}%W}`92s>5*o9` z;15H}<8PA%-K!on!SBzI#GJZ~Lb`XgDaxbamJY<7gMrO(?8;D;59Jn?Y)rX3YL70ip77Eh2e z%WZ5WsCum;`OhnL=^}Vohr7{rn6AopY7boI6OPY$)Z>+k#p9|zU$Yg}7-zfY_7NAU zrM&N3J)8D0n!{XAoQG9{nXK=%s}xkExOGonKt*dKjB}(^QRYc0lwx^#ymXX;lB_N{A;16MEp@6Oe~n>7D@QT{7Rv*9!~0dzKZzV6|tS%#@H{YC|SnEW6g zCaZ6_a^Y+A!H - - - - - -SdFat: Arduino/libraries/SdFat/utility/StdioStream.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
StdioStream.h File Reference
-
-
- -

StdioStream class. -More...

-
#include <limits.h>
-#include "FatFile.h"
-#include <stdio.h>
-
-Include dependency graph for StdioStream.h:
-
-
- - -
-
- - - - -

-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/libraries/SdFat/html/_stdio_stream_8h__incl.png b/libraries/SdFat/html/_stdio_stream_8h__incl.png deleted file mode 100644 index 6513c29f50644934a14f77575d79f2f3e90057a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24907 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

j$c5nq!7$D3wVElRJMSk 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 - - - - - -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 raw data block
 CDigitalPinFast digital port I/O
 CdirectoryEntryFAT short directory entry
 Cfat32_bootBoot sector for a FAT32 volume
 Cfat32_fsinfoFSINFO sector for a FAT32 volume
 Cfat_bootBoot sector for a FAT12/FAT16 volume
 CFatCacheBlock cache
 CFatFileBasic file class
 CFatFileSystemIntegration class for the FatLib library
 CFatPos_tInternal type for file position - do not use in user apps
 CFatStreamBaseBase class for C++ style streams
 CFatVolumeAccess FAT16 and FAT32 volumes on raw file devices
 CFileArduino SD.h style File API
 Cfname_tInternal type for Short File Name - do not use in user apps
 CfstreamFile input/output stream
 CibufstreamParse a char string
 CifstreamFile input stream
 CiosError and state information for all streams
 Cios_baseBase class for all streams
 CiostreamInput/Output stream
 CistreamInput Stream
 ClongDirectoryEntryFAT long directory entry
 CmasterBootRecordMaster Boot Record
 CMinimumSerialMini serial class for the SdFat library
 CobufstreamFormat a char string
 CofstreamFile output stream
 CostreamOutput Stream
 CpartitionTableMBR partition table entry
 CpgmType for string in flash
 Cpin_map_tStruct for mapping digital pins
 CPrintFileFatFile with Print
 CSd2CardRaw access to SD and SDHC card using default SPI library
 CSdBaseFileClass for backward compatibility
 CSdFatMain file system class for SdFat library
 CSdFatBaseVirtual base class for SdFat library
 CSdFatLibSpiSdFat class using the standard Arduino SPI library
 CSdFatSoftSpiSdFat class using software SPI
 CSdFileClass for backward compatibility
 CSdSpiSPI class for access to SD and SDHC flash memory cards
 CSdSpiBaseVirtual SPI class for access to SD and SDHC flash memory cards
 CSdSpiCardRaw access to SD and SDHC flash memory cards via SPI protocol
 CSdSpiLibArduino SPI library class for access to SD and SDHC flash memory cards
 CSdSpiSoftSoftware SPI class for access to SD and SDHC flash memory cards
 CSdVolumeSdVolume Soon to be removed
 CsetfillType for setfill manipulator
 CsetprecisionType for setprecision manipulator
 CsetwType for setw manipulator
 CSoftSPIFast software SPI
 CStdioStreamStdioStream implements a minimal stdio stream
-
-
- - - - diff --git a/libraries/SdFat/html/bc_s.png b/libraries/SdFat/html/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/libraries/SdFat/html/bdwn.png b/libraries/SdFat/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - -SdFat: Arduino/libraries/SdFat/utility/bufstream.h File Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
bufstream.h File Reference
-
-
- -

ibufstream and obufstream classes -More...

-
#include <string.h>
-#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/libraries/SdFat/html/bufstream_8h__dep__incl.png b/libraries/SdFat/html/bufstream_8h__dep__incl.png deleted file mode 100644 index 40c2c00afaddaf9fd8d7a9508bb14c2aab4cb2be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmcgtdpOe%7oX)WW%5dL&n4-XTbmHZR*_|Elzxe6R9h^vi^5#vH%b@R47ud1i^fYf zvEM|L+#32R4M|FF<0oU7%d6k>_CD|P{_#HVU++23Ip;a&pYuHDoX_VZV?2&1D{3l& zKpBhPXc=RrJ4Zf=F(_1#b+{b zEt5JL2&AjBTSZw~5xFT2+^q%~o1VVZJtq)|KUk6K>dDw*<(8q`f;_T2+ev+9Z@n^? z%N2cUOc1YU6=n>cUU2Unt{XKK7qf7{v>5x_V%pZ@za(|Z>Yk99P<+6#=o#3q*yw2g zsHp8i3oXwKwS1GEN#-<`n10gof#J@OKF30vbJ0)DI&vkGSAn1AB%(5z&y5=TYDJ(&M>o6qPNJwo_# z9mgow@aX~ljhQ~$J`oqChtboNS7RK$2Jhc2KvX!A>8<&R?mo2)=VHErv?gL|=Pkh` zXRhW@->VoPYFN#KfIZ-aoG&aw z<-%OrAh_V9JJ&G`w3{cTw;(;=@T{sD-t=kCa%e!7OrUj~->yB)*`>9{@?V~MffFqx zaxMq|bv^Jx`2LM!N+lQhnNkbc_x_-i&O9l<1c7u@ma7BM%Zb>FrEI^-Oxx_7>UZ`? zN_mDSB9J6(L!S;>U0E8O;VuAZ0&AU?x#UNUmwt1PM@@EJr&Y6`iKaf>dLBO6ZPB2S zp#TtYK}>DB$5gnGkBNo<+P9O)dVVs+c*fC&v2fTo5-P2Sk%htD#5f}-UzN|NrjiT7 zzw&R#!gpXUUOr*U)D8(cW(|mX_t7;K?;4&98-5X97V_~1ZV%vOAr4}#+0vJrtZ(V8 zhIVC!AV3ZTg4ktW?n@CyRq0^uFO2+`+Cg|7LikBwYoU|wgC73JIS?Bj?{{;40AN} zFfafJR{8f+S=~rCJx}%e);M3!`7t9kek`#yiwcylzt-hN<*1N^W zP%izJ61<6{Ee*eNgJtq=i@4TwTl3y5YLSjedV{TgPW6C{;Czxs1pm#rlGw#Ao1UwE znHVCKvUG|omrCco;_VJD1!u(vz=G;WU`}~kLn=P065d~LF;0t;%E=gW_U!453USBt zhc&nKVZWVe5paBo1T7+^b8iWzEtg+k*722`QZR)`6MR5D;_WpY^Ezu&Zu$W=(4$9w-Z+WsgPf z@$c7ZHJR``R+Y35QydL|!yFD&60c$_nj(*u_GdQ3)ZG=ts-9Br5GEs~6uDKiZi$5S zopTE>?XF!=+Y=+2fL-!r(67K2js?pJ^hVWk4v@T8Z5kV&$KB&~saMUUy| zk;a@P`!|S=7pjb^{s(+ggVIDs5W3e}$lpa#=lhAdkaaiY_V#6PY^KRI-8-9p{^^Le Y7=PyDKijYA#r!C_9r8eyyZFcd1CaXhS^xk5 diff --git a/libraries/SdFat/html/bufstream_8h__incl.png b/libraries/SdFat/html/bufstream_8h__incl.png deleted file mode 100644 index c03577b198b6ee9770c7e3a07aae3c3712a296c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31632 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Ã@Dk!#ShyCVrX*KEI9&nbe65%LRC32u;T)m0 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

2{v1S zWCJod8g$5m?~tB)igYCr>Aq$RX7vHg>W023GmZdibi^{095#LjRQ{`5ya%bkw?m@m z9w6m_z>nwv&HkrHpr$D2h_KlTf}j-8Fqs(NnHDc?J#Cw$<-Y*L{DuO|LJ&U-Y2XV< zBl)O~lxGAeebDk!Cw?B+;dL;{hLS&D`jmP^AyC->Us+wo+cub_ZRf1_fl^O3Ehu*W zTU^=Na!LVF5xBb#RY8Ej!uT=QAYAW+PNdY@CgdtxrDccxrO%RNRx9BUf$uUgGbv{G zKh>K7E+s^+o4Sp6T0H;bxeN=0; z5~98jVs~+M>xX$p0$Y35yCOFCF{$0%hdm?;1EO-o55p)!Ba25JW&FxeGtbi#VSx%B zH7EfRPeY{RgCe~~hMC~NL{tsIvBzve_AJo%OtA6VhROCww;<`Ph8m{I@EaDgKq3t7 z$a>u6$`DPP;S1!nAoetbuC@!}dlsq*nthiK-Qem0DB1!e$KgIOb)HBfb_l$NB6gRD zax*B9eML?kAsU(reSLu`_U?gBJ$9SFCPdFAt(3;z*RRTmbR*5pAh^%~U%vLm6COZ0 zI1lBsAC1+AMuG&}DKUtzM%T{7#5bxrL#x6$7?81scb%)s7EkX@^6?YlDKcgNT}>?O zYtA{AFS{o#@(}lkdY%3BGg%(|C-D#~KsrsMn{5y79baRiz;7;)RgFhw*B^PPe49Iu zx#NaF-$@JGd+E~>ZR$XSu@moWXIJC!s{G4jX#g>W`!76-dW;Ml8|FI#ZqikR>s9a) zOUVZmN9e4r=y1yLzOtAJo3ARus<1+4D-bg&%Q2)U{B(#tmztW{>&@&(tC1J*;=#$P zFSG=RSe^=O19@mXnlo>B9&pZ=W-+)1cKhOad#I^Sfv=E1T@?#}8;;a}`nL7Eg@+3G zNdf4AHFfSL7uaU{u#Nrif1HX+=am#i!?QERCk=vT749Kt#rc9SN?ssCkJ^EsxMUdp zP@f!Mo!eknD|^b7W=?_7(lXD5?cwvFq?KM(64^!ACc?IAtuWp_vvi!1=C+Q=U$e^h z{3wNEL`;itQ>H0-#RvAA$|ud-AYwS+quT6eUgSExQu>k~N(|q$p0u<{osUmI58*bW zB7LZsL_$t_h=%)(PtZy;+U~Eh!qKTswl0ht@CqCIz zai}W3rNs+i$x?%I>Bop*oz-BpmOy`wQP$} zJ%hm2^^Rx#pL;Rmfa&p|NJBwe@0Ju7kJm868s}he^gLxx9^sz{`1=F`u+zaa$YA~P z?;-quKZdbi%|JNVXr3=ok2VG>} U%pxMd6Wh=O6)i-?J - - - - - -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
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 n, 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
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/libraries/SdFat/html/class_arduino_in_stream.html b/libraries/SdFat/html/class_arduino_in_stream.html deleted file mode 100644 index a62b2b1..0000000 --- a/libraries/SdFat/html/class_arduino_in_stream.html +++ /dev/null @@ -1,2596 +0,0 @@ - - - - - - -SdFat: ArduinoInStream Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
ArduinoInStream Class Reference
-
-
- -

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 n, 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
 
-

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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 & ch)
-
-inherited
-
-

Extract a character if one is available.

-
Parameters
- - -
[out]chlocation 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.
- -
-
- -
-
- - - - - -
- - - - - - - - -
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/libraries/SdFat/html/class_arduino_in_stream__coll__graph.png b/libraries/SdFat/html/class_arduino_in_stream__coll__graph.png deleted file mode 100644 index 4df6fab93c592555037e9d1612bd039259531248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3427 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 diff --git a/libraries/SdFat/html/class_arduino_in_stream__inherit__graph.png b/libraries/SdFat/html/class_arduino_in_stream__inherit__graph.png deleted file mode 100644 index 4df6fab93c592555037e9d1612bd039259531248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3427 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 diff --git a/libraries/SdFat/html/class_arduino_out_stream-members.html b/libraries/SdFat/html/class_arduino_out_stream-members.html deleted file mode 100644 index 19593ce..0000000 --- a/libraries/SdFat/html/class_arduino_out_stream-members.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -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
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/libraries/SdFat/html/class_arduino_out_stream.html b/libraries/SdFat/html/class_arduino_out_stream.html deleted file mode 100644 index 05f0763..0000000 --- a/libraries/SdFat/html/class_arduino_out_stream.html +++ /dev/null @@ -1,2321 +0,0 @@ - - - - - - -SdFat: ArduinoOutStream Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
ArduinoOutStream Class Reference
-
-
- -

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
 
-

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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/libraries/SdFat/html/class_arduino_out_stream__coll__graph.png b/libraries/SdFat/html/class_arduino_out_stream__coll__graph.png deleted file mode 100644 index 97a213ba291284ff8f4e04060ecb7142c6db22c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/libraries/SdFat/html/class_arduino_out_stream__inherit__graph.png b/libraries/SdFat/html/class_arduino_out_stream__inherit__graph.png deleted file mode 100644 index 97a213ba291284ff8f4e04060ecb7142c6db22c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/libraries/SdFat/html/class_digital_pin-members.html b/libraries/SdFat/html/class_digital_pin-members.html deleted file mode 100644 index dc19940..0000000 --- a/libraries/SdFat/html/class_digital_pin-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
DigitalPin< PinNumber > Member List
-
-
- -

This is the complete list of members for DigitalPin< PinNumber >, including all inherited members.

- - - - - - - - - - - - - -
config(bool mode, bool level)DigitalPin< PinNumber >inline
DigitalPin()DigitalPin< PinNumber >inline
DigitalPin(bool pinMode)DigitalPin< PinNumber >inlineexplicit
DigitalPin(bool mode, bool level)DigitalPin< PinNumber >inline
high()DigitalPin< PinNumber >inline
low()DigitalPin< PinNumber >inline
mode(bool pinMode)DigitalPin< PinNumber >inline
operator bool() const DigitalPin< PinNumber >inline
operator=(bool value)DigitalPin< PinNumber >inline
read() const DigitalPin< PinNumber >inline
toggle()DigitalPin< PinNumber >inline
write(bool value)DigitalPin< PinNumber >inline
- - - - diff --git a/libraries/SdFat/html/class_digital_pin.html b/libraries/SdFat/html/class_digital_pin.html deleted file mode 100644 index b21ea9f..0000000 --- a/libraries/SdFat/html/class_digital_pin.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - - - -SdFat: DigitalPin< PinNumber > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
DigitalPin< PinNumber > Class Template Reference
-
-
- -

Fast digital port I/O. - More...

- -

#include <DigitalPin.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void config (bool mode, bool level)
 
 DigitalPin ()
 
 DigitalPin (bool pinMode)
 
 DigitalPin (bool mode, bool level)
 
void high ()
 
void low ()
 
void mode (bool pinMode)
 
 operator bool () const
 
DigitalPinoperator= (bool value)
 
bool read () const
 
void toggle ()
 
void write (bool value)
 
-

Detailed Description

-

template<uint8_t PinNumber>
-class DigitalPin< PinNumber >

- -

Fast digital port I/O.

-

Constructor & Destructor Documentation

- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
DigitalPin< PinNumber >::DigitalPin ()
-
-inline
-
-

Constructor

- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - -
DigitalPin< PinNumber >::DigitalPin (bool pinMode)
-
-inlineexplicit
-
-

Constructor

Parameters
- - -
[in]pinModeif true set output mode else input mode.
-
-
- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - - - - - - - - - - - -
DigitalPin< PinNumber >::DigitalPin (bool mode,
bool level 
)
-
-inline
-
-

Constructor

Parameters
- - - -
[in]modeIf true set output mode else input mode
[in]levelIf mode is output, set level high/low. If mode is input, enable or disable the pin's 20K pull-up.
-
-
- -
-
-

Member Function Documentation

- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void DigitalPin< PinNumber >::config (bool mode,
bool level 
)
-
-inline
-
-

set pin configuration

Parameters
- - - -
[in]modeIf true set output mode else input mode
[in]levelIf mode is output, set level high/low. If mode is input, enable or disable the pin's 20K pull-up.
-
-
- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
void DigitalPin< PinNumber >::high ()
-
-inline
-
-

Set pin level high if output mode or enable 20K pull-up if input mode.

- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
void DigitalPin< PinNumber >::low ()
-
-inline
-
-

Set pin level low if output mode or disable 20K pull-up if input mode.

- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - -
void DigitalPin< PinNumber >::mode (bool pinMode)
-
-inline
-
-

Set pin mode

Parameters
- - -
[in]pinModeif true set output mode else input mode.
-
-
-

mode() does not enable or disable the 20K pull-up for input mode.

- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
DigitalPin< PinNumber >::operator bool () const
-
-inline
-
-

Parenthesis operator

Returns
Pin's level
- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - -
DigitalPin& DigitalPin< PinNumber >::operator= (bool value)
-
-inline
-
-

Asignment operator

Parameters
- - -
[in]valueIf true set the pin's level high else set the pin's level low.
-
-
-
Returns
This DigitalPin instance.
- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
bool DigitalPin< PinNumber >::read () const
-
-inline
-
-
Returns
Pin's level
- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - -
void DigitalPin< PinNumber >::toggle ()
-
-inline
-
-

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 pull-up.

- -
-
- -
-
-
-template<uint8_t PinNumber>
- - - - - -
- - - - - - - - -
void DigitalPin< PinNumber >::write (bool value)
-
-inline
-
-

Write the pin's level.

Parameters
- - -
[in]valueIf true set the pin's level high else set the pin's level low.
-
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/libraries/SdFat/html/class_fat_cache-members.html b/libraries/SdFat/html/class_fat_cache-members.html deleted file mode 100644 index 5ffcc26..0000000 --- a/libraries/SdFat/html/class_fat_cache-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
FatCache Member List
-
-
- -

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

- - - - - - - - - - - - - - - -
block()FatCacheinline
CACHE_FOR_READFatCachestatic
CACHE_FOR_WRITEFatCachestatic
CACHE_OPTION_NO_READFatCachestatic
CACHE_RESERVE_FOR_WRITEFatCachestatic
CACHE_STATUS_DIRTYFatCachestatic
CACHE_STATUS_MASKFatCachestatic
CACHE_STATUS_MIRROR_FATFatCachestatic
dirty()FatCacheinline
init(FatVolume *vol)FatCacheinline
invalidate()FatCacheinline
lbn()FatCacheinline
read(uint32_t lbn, uint8_t option)FatCache
sync()FatCache
- - - - diff --git a/libraries/SdFat/html/class_fat_cache.html b/libraries/SdFat/html/class_fat_cache.html deleted file mode 100644 index 7039d7d..0000000 --- a/libraries/SdFat/html/class_fat_cache.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - -SdFat: FatCache Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

Block cache. - More...

- -

#include <FatVolume.h>

- - - - - - - - - - - - - - - - -

-Public Member Functions

cache_tblock ()
 
void dirty ()
 
void init (FatVolume *vol)
 
void invalidate ()
 
uint32_t lbn ()
 
cache_tread (uint32_t lbn, uint8_t option)
 
bool sync ()
 
- - - - - - - - - - - - - - - -

-Static Public Attributes

static uint8_t const CACHE_FOR_READ = 0
 
static uint8_t const CACHE_FOR_WRITE = CACHE_STATUS_DIRTY
 
static const uint8_t CACHE_OPTION_NO_READ = 4
 
static uint8_t const CACHE_RESERVE_FOR_WRITE = CACHE_STATUS_DIRTY | CACHE_OPTION_NO_READ
 
static const uint8_t CACHE_STATUS_DIRTY = 1
 
static const uint8_t CACHE_STATUS_MASK = CACHE_STATUS_DIRTY | CACHE_STATUS_MIRROR_FAT
 
static const uint8_t CACHE_STATUS_MIRROR_FAT = 2
 
-

Detailed Description

-

Block cache.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
cache_t* FatCache::block ()
-
-inline
-
-
Returns
Cache block address.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatCache::dirty ()
-
-inline
-
-

Set current block dirty.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatCache::init (FatVolumevol)
-
-inline
-
-

Initialize the cache.

Parameters
- - -
[in]volFatVolume that owns this FatCache.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatCache::invalidate ()
-
-inline
-
-

Invalidate current cache block.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatCache::lbn ()
-
-inline
-
-
Returns
Logical block number for cached block.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
cache_t * FatCache::read (uint32_t lbn,
uint8_t option 
)
-
-

Read a block into the cache.

Parameters
- - - -
[in]lbnBlock to read.
[in]optionmode for cached block.
-
-
-
Returns
Address of cached block.
- -
-
- -
-
- - - - - - - -
bool FatCache::sync ()
-
-

Write current block if dirty.

Returns
true for success else false.
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
uint8_t const FatCache::CACHE_FOR_READ = 0
-
-static
-
-

Cache block for read.

- -
-
- -
-
- - - - - -
- - - - -
uint8_t const FatCache::CACHE_FOR_WRITE = CACHE_STATUS_DIRTY
-
-static
-
-

Cache block for write.

- -
-
- -
-
- - - - - -
- - - - -
const uint8_t FatCache::CACHE_OPTION_NO_READ = 4
-
-static
-
-

Sync existing block but do not read new block.

- -
-
- -
-
- - - - - -
- - - - -
uint8_t const FatCache::CACHE_RESERVE_FOR_WRITE = CACHE_STATUS_DIRTY | CACHE_OPTION_NO_READ
-
-static
-
-

Reserve cache block for write - do not read from block device.

- -
-
- -
-
- - - - - -
- - - - -
const uint8_t FatCache::CACHE_STATUS_DIRTY = 1
-
-static
-
-

Cached block is dirty

- -
-
- -
-
- - - - - -
- - - - -
const uint8_t FatCache::CACHE_STATUS_MASK = CACHE_STATUS_DIRTY | CACHE_STATUS_MIRROR_FAT
-
-static
-
-

Cache block status bits

- -
-
- -
-
- - - - - -
- - - - -
const uint8_t FatCache::CACHE_STATUS_MIRROR_FAT = 2
-
-static
-
-

Cashed block is FAT entry and must be mirrored in second FAT.

- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/utility/FatVolume.h
  • -
  • Arduino/libraries/SdFat/utility/FatVolume.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_fat_file-members.html b/libraries/SdFat/html/class_fat_file-members.html deleted file mode 100644 index 0787537..0000000 --- a/libraries/SdFat/html/class_fat_file-members.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
FatFile Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()FatFileinline
clearError()FatFileinline
clearWriteError()FatFileinline
close()FatFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFile
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFile
curCluster() const FatFileinline
curPosition() const FatFileinline
cwd()FatFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlinestatic
dateTimeCallbackCancel()FatFileinlinestatic
dirEntry(dir_t *dir)FatFile
dirIndex()FatFileinline
dirName(const dir_t *dir, char *name)FatFilestatic
dirSize()FatFile
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFile
exists(const char *path)FatFileinline
FatFile()FatFileinline
FatFile(const char *path, uint8_t oflag)FatFileinline
fgets(char *str, int16_t num, char *delim=0)FatFile
fileAttr() const FatFileinline
fileSize() const FatFileinline
firstCluster() const FatFileinline
getError()FatFileinline
getName(char *name, size_t size)FatFile
getpos(FatPos_t *pos)FatFile
getSFN(char *name)FatFile
getWriteError()FatFileinline
isDir() const FatFileinline
isFile() const FatFileinline
isHidden() const FatFileinline
isLFN() const FatFileinline
isOpen() const FatFileinline
isReadOnly() const FatFileinline
isRoot() const FatFileinline
isRoot32() const FatFileinline
isRootFixed() const FatFileinline
isSubDir() const FatFileinline
isSystem() const FatFileinline
legal83Char(uint8_t c)FatFileinlinestatic
ls(uint8_t flags=0)FatFileinline
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFile
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFile
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFile
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFile
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFile
open(const char *path, uint8_t oflag=O_READ)FatFileinline
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFile
openRoot(FatVolume *vol)FatFile
peek()FatFile
printCreateDateTime(print_t *pr)FatFile
printFatDate(uint16_t fatDate)FatFileinlinestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFilestatic
printFatTime(uint16_t fatTime)FatFileinlinestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFilestatic
printField(float value, char term, uint8_t prec=2)FatFile
printField(int16_t value, char term)FatFile
printField(uint16_t value, char term)FatFile
printField(int32_t value, char term)FatFile
printField(uint32_t value, char term)FatFile
printFileSize(print_t *pr)FatFile
printModifyDateTime(print_t *pr)FatFile
printName()FatFileinline
printName(print_t *pr)FatFile
printSFN(print_t *pr)FatFile
read()FatFileinline
read(void *buf, size_t nbyte)FatFile
readDir(dir_t *dir)FatFile
remove()FatFile
remove(FatFile *dirFile, const char *path)FatFilestatic
rename(FatFile *dirFile, const char *newPath)FatFile
rewind()FatFileinline
rmdir()FatFile
rmRfStar()FatFile
seekCur(int32_t offset)FatFileinline
seekEnd(int32_t offset=0)FatFileinline
seekSet(uint32_t pos)FatFile
setCwd(FatFile *dir)FatFileinlinestatic
setpos(FatPos_t *pos)FatFile
sync()FatFile
timestamp(FatFile *file)FatFile
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFile
truncate(uint32_t length)FatFile
volume() const FatFileinline
write(const char *str)FatFileinline
write(uint8_t b)FatFileinline
write(const void *buf, size_t nbyte)FatFile
- - - - diff --git a/libraries/SdFat/html/class_fat_file.html b/libraries/SdFat/html/class_fat_file.html deleted file mode 100644 index 8fd9caf..0000000 --- a/libraries/SdFat/html/class_fat_file.html +++ /dev/null @@ -1,2910 +0,0 @@ - - - - - - -SdFat: FatFile Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

Basic file class. - More...

- -

#include <FatFile.h>

-
-Inheritance diagram for FatFile:
-
-
Inheritance graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

uint32_t available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
 FatFile ()
 
 FatFile (const char *path, uint8_t oflag)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
int write (const char *str)
 
int write (uint8_t b)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

Basic file class.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
FatFile::FatFile ()
-
-inline
-
-

Create an instance.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
FatFile::FatFile (const char * path,
uint8_t oflag 
)
-
-inline
-
-

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 FatFile::open(FatFile*, const char*, uint8_t).
-
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::available ()
-
-inline
-
-
Returns
The number of bytes available from the current position to EOF for normal files. Zero is returned for directory files.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearError ()
-
-inline
-
-

Clear all error bits.

- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearWriteError ()
-
-inline
-
-

Set writeError to zero

- -
-
- -
-
- - - - - - - -
bool FatFile::close ()
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::createContiguous (FatFiledirFile,
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 true is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curCluster () const
-
-inline
-
-
Returns
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curPosition () const
-
-inline
-
-
Returns
The current position for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
static FatFile* FatFile::cwd ()
-
-inlinestatic
-
-
Returns
Current working directory
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::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 FatFile::dateTimeCallbackCancel ()
-
-inlinestatic
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - - - - -
bool FatFile::dirEntry (dir_tdir)
-
-

Return a file's directory entry.

-
Parameters
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatFile::dirIndex ()
-
-inline
-
-
Returns
The index of this file in it's directory.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t FatFile::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.
-
-
-
Returns
length of the name.
- -
-
- -
-
- - - - - - - -
uint32_t FatFile::dirSize ()
-
-
Returns
The number of bytes allocated to a directory or zero if an error occurs.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::dmpFile (print_tpr,
uint32_t pos,
size_t n 
)
-
-

Dump file in Hex

Parameters
- - - - -
[in]prPrint stream for list.
[in]posStart position in file.
[in]nnumber of locations to dump.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::exists (const char * path)
-
-inline
-
-

Test for the existence of a file in a directory

-
Parameters
- - -
[in]pathPath 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 FatFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::fileAttr () const
-
-inline
-
-

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

-
Returns
The file or directory type.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::fileSize () const
-
-inline
-
-
Returns
The total number of bytes in a file.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::firstCluster () const
-
-inline
-
-
Returns
The first cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::getError ()
-
-inline
-
-
Returns
All error bits.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool FatFile::getName (char * name,
size_t size 
)
-
-

Get a file's name followed by a zero byte.

-
Parameters
- - - -
[out]nameAn array of characters for the file's name.
[in]sizeThe size of the array in bytes. The array must be at least 13 bytes long. The file's name will be truncated if the file's name is too long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - - - - -
void FatFile::getpos (FatPos_tpos)
-
-

get position for streams

Parameters
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - - - - -
bool FatFile::getSFN (char * name)
-
-

Get a file's Short File Name followed by a zero byte.

-
Parameters
- - -
[out]nameAn array of characters for the file's name. The array must be at least 13 bytes long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::getWriteError ()
-
-inline
-
-
Returns
value of writeError
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isDir () const
-
-inline
-
-
Returns
True if this is a directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isFile () const
-
-inline
-
-
Returns
True if this is a normal file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isHidden () const
-
-inline
-
-
Returns
True if this is a hidden file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isLFN () const
-
-inline
-
-
Returns
true if this file has a Long File Name.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isOpen () const
-
-inline
-
-
Returns
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isReadOnly () const
-
-inline
-
-
Returns
True if file is read-only
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot () const
-
-inline
-
-
Returns
True if this is the root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot32 () const
-
-inline
-
-
Returns
True if this is the FAT32 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRootFixed () const
-
-inline
-
-
Returns
True if this is the FAT12 of FAT16 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSubDir () const
-
-inline
-
-
Returns
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSystem () const
-
-inline
-
-
Returns
True if this is a system file else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::legal83Char (uint8_t c)
-
-inlinestatic
-
-

Check for a legal 8.3 character.

Parameters
- - -
[in]cCharacter to be checked.
-
-
-
Returns
true for a legal 8.3 character else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::ls (uint8_t flags = 0)
-
-inline
-
-

List directory contents.

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::ls (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::mkdir (FatFiledir,
const char * path,
bool pFlag = true 
)
-
-

Make a new directory.

-
Parameters
- - - - -
[in]dirAn open FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFileSystemfs,
const char * path,
uint8_t oflag 
)
-
-

Open a file in the volume working directory of a FatFileSystem.

-
Parameters
- - - - -
[in]fsFile System where the file is located.
[in]pathwith a valid 8.3 DOS name for a file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-

Open a file by index.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-

See open() by path for definition of flags.

Returns
true for success or false for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
const char * path,
uint8_t oflag 
)
-
-

Open a file or directory by name.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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) or any functions do character at a time writes since 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 FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-inline
-
-

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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool FatFile::openNext (FatFiledirFile,
uint8_t oflag = O_READ 
)
-
-

Open the next file or subdirectory in a directory.

-
Parameters
- - - -
[in]dirFileAn open FatFile instance for the directory containing the file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool FatFile::openRoot (FatVolumevol)
-
-

Open a volume's root directory.

-
Parameters
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - -
int FatFile::peek ()
-
-

Return the next available byte without consuming it.

-
Returns
The byte if no error and not at eof else -1;
- -
-
- -
-
- - - - - - - - -
bool FatFile::printCreateDateTime (print_tpr)
-
-

Print a file's creation date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatDate (uint16_t fatDate)
-
-inlinestatic
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatDate (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatTime (uint16_t fatTime)
-
-inlinestatic
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatTime (print_tpr,
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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::printFileSize (print_tpr)
-
-

Print a file's size.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool FatFile::printModifyDateTime (print_tpr)
-
-

Print a file's modify date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
size_t FatFile::printName ()
-
-inline
-
-

Print a file's name.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
size_t FatFile::printName (print_tpr)
-
-

Print a file's name

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
size_t FatFile::printSFN (print_tpr)
-
-

Print a file's Short File Name.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int FatFile::read ()
-
-inline
-
-

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 FatFile::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 FatFile::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 FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::remove (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool FatFile::rename (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::rewind ()
-
-inline
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 FatFile::seekEnd (int32_t offset = 0)
-
-inline
-
-

Set the files position to end-of-file + offset. See seekSet(). Can't be used for directory files since file size is not defined.

Parameters
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::setCwd (FatFiledir)
-
-inlinestatic
-
-

Set the current working directory.

-
Parameters
- - -
[in]dirNew current working directory.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - - - - -
void FatFile::setpos (FatPos_tpos)
-
-

set position for streams

Parameters
- - -
[out]posstruct with value for new position
-
-
- -
-
- -
-
- - - - - - - -
bool FatFile::sync ()
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool FatFile::timestamp (FatFilefile)
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFile::volume () const
-
-inline
-
-
Returns
FatVolume that contains this file.
- -
-
- -
-
- - - - - -
- - - - - - - - -
int FatFile::write (const char * str)
-
-inline
-
-

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 FatFile::write (uint8_t b)
-
-inline
-
-

Write a single byte.

Parameters
- - -
[in]bThe byte to be written.
-
-
-
Returns
+1 for success or -1 for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int FatFile::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.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/utility/FatFile.h
  • -
  • Arduino/libraries/SdFat/utility/FatFile.cpp
  • -
  • Arduino/libraries/SdFat/utility/FatFileLFN.cpp
  • -
  • Arduino/libraries/SdFat/utility/FatFilePrint.cpp
  • -
  • Arduino/libraries/SdFat/utility/FatFileSFN.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_fat_file__inherit__graph.png b/libraries/SdFat/html/class_fat_file__inherit__graph.png deleted file mode 100644 index c79389fd14b339e24b8d170e1779fd745256d73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10971 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 AGXMYp diff --git a/libraries/SdFat/html/class_fat_file_system-members.html b/libraries/SdFat/html/class_fat_file_system-members.html deleted file mode 100644 index 5e6054c..0000000 --- a/libraries/SdFat/html/class_fat_file_system-members.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
FatFileSystem Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(uint8_t part=0)FatFileSysteminline
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
chdir(bool set_cwd=false)FatFileSysteminline
chdir(const char *path, bool set_cwd=false)FatFileSysteminline
chvol()FatFileSysteminline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
exists(const char *path)FatFileSysteminline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
init()FatVolumeinline
init(uint8_t part)FatVolume
ls(uint8_t flags=0)FatFileSysteminline
ls(const char *path, uint8_t flags=0)FatFileSysteminline
ls(print_t *pr, uint8_t flags)FatFileSysteminline
ls(print_t *pr, const char *path, uint8_t flags)FatFileSysteminline
mkdir(const char *path, bool pFlag=true)FatFileSysteminline
open(const char *path, uint8_t mode=FILE_READ)FatFileSysteminline
remove(const char *path)FatFileSysteminline
rename(const char *oldPath, const char *newPath)FatFileSysteminline
rmdir(const char *path)FatFileSysteminline
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
truncate(const char *path, uint32_t length)FatFileSysteminline
vol()FatFileSysteminline
volumeBlockCount() const FatVolumeinline
vwd()FatFileSysteminline
wipe(print_t *pr=0)FatFileSysteminline
- - - - diff --git a/libraries/SdFat/html/class_fat_file_system.html b/libraries/SdFat/html/class_fat_file_system.html deleted file mode 100644 index 4aff1c6..0000000 --- a/libraries/SdFat/html/class_fat_file_system.html +++ /dev/null @@ -1,1272 +0,0 @@ - - - - - - -SdFat: FatFileSystem Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
FatFileSystem Class Reference
-
-
- -

Integration class for the FatLib library. - More...

- -

#include <FatFileSystem.h>

-
-Inheritance diagram for FatFileSystem:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for FatFileSystem:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t part=0)
 
uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
bool exists (const char *path)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool init ()
 
bool init (uint8_t part)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags)
 
void ls (print_t *pr, const char *path, uint8_t flags)
 
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)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
bool truncate (const char *path, uint32_t length)
 
FatVolumevol ()
 
uint32_t volumeBlockCount () const
 
FatFilevwd ()
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

Integration class for the FatLib library.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::begin (uint8_t part = 0)
-
-inline
-
-

Initialize an FatFileSystem object.

Parameters
- - -
[in]partpartition to initialize.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::chdir (bool set_cwd = false)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::chdir (const char * path,
bool set_cwd = false 
)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFileSystem::chvol ()
-
-inline
-
-

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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::exists (const char * path)
-
-inline
-
-

Test for the existence of a file.

-
Parameters
- - -
[in]pathPath of the file to be tested for.
-
-
-
Returns
true if the file exists else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFileSystem::ls (uint8_t flags = 0)
-
-inline
-
-

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

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFileSystem::ls (const char * path,
uint8_t flags = 0 
)
-
-inline
-
-

List the directory contents of a directory to Serial.

-
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 FatFileSystem::ls (print_tpr,
uint8_t flags 
)
-
-inline
-
-

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 FatFileSystem::ls (print_tpr,
const char * path,
uint8_t flags 
)
-
-inline
-
-

List the directory contents of a directory.

-
Parameters
- - - - -
[in]prPrint stream for 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 FatFileSystem::mkdir (const char * path,
bool pFlag = true 
)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File FatFileSystem::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 FatFileSystem::remove (const char * path)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::rename (const char * oldPath,
const char * newPath 
)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::rmdir (const char * path)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::truncate (const char * path,
uint32_t length 
)
-
-inline
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFileSystem::vol ()
-
-inline
-
-
Returns
a pointer to the FatVolume object.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - -
FatFile* FatFileSystem::vwd ()
-
-inline
-
-
Returns
a pointer to the volume working directory.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::wipe (print_tpr = 0)
-
-inline
-
-

Wipe all data from the volume. You must reinitialize the volume before accessing it again.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/libraries/SdFat/html/class_fat_file_system__coll__graph.png b/libraries/SdFat/html/class_fat_file_system__coll__graph.png deleted file mode 100644 index 029391a23fea0f31752c5badd68444aea6b9392d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmeAS@N?(olHy`uVBq!ia0vp^r9fQ3!3HE1PTKPWDYhhUcNd2LAh=-f^2rPgEIT}1 z978JRyq&v0U&dAB`2Kv$WX&BL1SYyu6bbZvd|G}HCN$&ot( zTjyWRpx7ed#8IfEyL~_B19thw3EY2pA532+y?yF0kpssW{$)k-|D3POaQ)&v-{g7o z{Ex_6Gi>o??Og8Q(Z3+1IbfBe##M!8j$AQbrdNI6O3s;mo)#XP{;)$)G^0+z*XzSs zrRDLCh3n(9e%4N1HB&R1&183b@zv*1%QNh5m+iX~nm+ZLm2%jxv+vhDnYQ!U(T!(9 z!^-#hotgBr=gywj#k0RjT|S{eqA6 z?Y47Wu3yi8k?)iB>NnDMYE1M7A-hQq+eVXQi zcy~?>fn`gXs`xMb*)GY(kQcM_Q-Q6Ui=u&csl}h4whnf}6Ssdl?J{A`yhmj{JDd{2 zR=xV7?a;NaSY_1?agzlN64O@QXNcNT&$(cJUT&>9k5q_)kC!Z8{Vk!3uQhJkhtBj- z(=KOf6Xls46uP{eLG!QM{El@D29{iAKV?Ef<5WBU6>ki=7V>o}huZVc0Y^W7xG0!E z=kN4q$LHQCY&nqfE4B=nJdgs`X(ii2SgN5^_|>Ej6FcT8{p;@8>$iIK`|L?EU2^X1 zmlyAGxNa@KZq=((|NiYu7JMn(-rg?Je_Z~_Y3}$Z8~5(Lo9VE`_W1GRK(YKOpJyRO z`qSR@%vn~a-4{>%zUz`nX+=DB%OMdRkdixw$;T!SJqmq`Rr%o zR5SIxd_8!Z&hPD6wxzc;ly4vYbbH6M)yLvR+{^yf*p~JkwAr)teoeqn=4Z3yd)>}` z2@MO6{Oy{1?$*lS_^G>MKVF|X|LB#Jo&dKA*;#iTcJFZ8S(Um?M?2%*!Cc|^xgVW_ zoA$oHo?exC+wJbW!0pT1Z(KKO@+e)pKu^Q!hTWy8NUyb0?ix+~bzPsJ56T0cF<S_qW$lM^`oL0+!PC{xWt~$(69BX-XUYHo diff --git a/libraries/SdFat/html/class_fat_file_system__inherit__graph.png b/libraries/SdFat/html/class_fat_file_system__inherit__graph.png deleted file mode 100644 index 9bd24acf93a1cfa84fc4bf51fb018228c260e13f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6616 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 diff --git a/libraries/SdFat/html/class_fat_stream_base-members.html b/libraries/SdFat/html/class_fat_stream_base-members.html deleted file mode 100644 index 453e73a..0000000 --- a/libraries/SdFat/html/class_fat_stream_base-members.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
FatStreamBase Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
adjustfieldios_basestatic
appios_basestatic
ateios_basestatic
available()FatFileinlineprivate
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
clearError()FatFileinlineprivate
clearWriteError()FatFileinlineprivate
close()FatFileprivate
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFileprivate
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFileprivate
cur enum valueios_base
curCluster() const FatFileinlineprivate
curPosition() const FatFileinlineprivate
cwd()FatFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlineprivatestatic
dateTimeCallbackCancel()FatFileinlineprivatestatic
decios_basestatic
dirEntry(dir_t *dir)FatFileprivate
dirIndex()FatFileinlineprivate
dirName(const dir_t *dir, char *name)FatFileprivatestatic
dirSize()FatFileprivate
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFileprivate
end enum valueios_base
eof() const iosinline
eofbitios_basestatic
exists(const char *path)FatFileinlineprivate
fail() const iosinline
failbitios_basestatic
FatFile()FatFileinlineprivate
FatFile(const char *path, uint8_t oflag)FatFileinlineprivate
fgets(char *str, int16_t num, char *delim=0)FatFileprivate
fileAttr() const FatFileinlineprivate
fileSize() const FatFileinlineprivate
fill()ios_baseinline
fill(char c)ios_baseinline
firstCluster() const FatFileinlineprivate
flags() const ios_baseinline
flags(fmtflags fl)ios_baseinline
fmtflags typedefios_base
getError()FatFileinlineprivate
getName(char *name, size_t size)FatFileprivate
getpos(FatPos_t *pos)FatFileprivate
getSFN(char *name)FatFileprivate
getWriteError()FatFileinlineprivate
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 FatFileinlineprivate
isFile() const FatFileinlineprivate
isHidden() const FatFileinlineprivate
isLFN() const FatFileinlineprivate
isOpen() const FatFileinlineprivate
isReadOnly() const FatFileinlineprivate
isRoot() const FatFileinlineprivate
isRoot32() const FatFileinlineprivate
isRootFixed() const FatFileinlineprivate
isSubDir() const FatFileinlineprivate
isSystem() const FatFileinlineprivate
leftios_basestatic
legal83Char(uint8_t c)FatFileinlineprivatestatic
ls(uint8_t flags=0)FatFileinlineprivate
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFileprivate
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFileprivate
octios_basestatic
off_type typedefios_base
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFileprivate
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFileprivate
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFileprivate
open(const char *path, uint8_t oflag=O_READ)FatFileinlineprivate
openmode typedefios_base
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFileprivate
openRoot(FatVolume *vol)FatFileprivate
operator const void *() const iosinline
operator!() const iosinline
outios_basestatic
peek()FatFileprivate
pos_type typedefios_base
precision() const ios_baseinline
precision(unsigned int n)ios_baseinline
printCreateDateTime(print_t *pr)FatFileprivate
printFatDate(uint16_t fatDate)FatFileinlineprivatestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFileprivatestatic
printFatTime(uint16_t fatTime)FatFileinlineprivatestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFileprivatestatic
printField(float value, char term, uint8_t prec=2)FatFileprivate
printField(int16_t value, char term)FatFileprivate
printField(uint16_t value, char term)FatFileprivate
printField(int32_t value, char term)FatFileprivate
printField(uint32_t value, char term)FatFileprivate
printFileSize(print_t *pr)FatFileprivate
printModifyDateTime(print_t *pr)FatFileprivate
printName()FatFileinlineprivate
printName(print_t *pr)FatFileprivate
printSFN(print_t *pr)FatFileprivate
rdstate() const iosinline
read()FatFileinlineprivate
read(void *buf, size_t nbyte)FatFileprivate
readDir(dir_t *dir)FatFileprivate
remove()FatFileprivate
remove(FatFile *dirFile, const char *path)FatFileprivatestatic
rename(FatFile *dirFile, const char *newPath)FatFileprivate
rewind()FatFileinlineprivate
rightios_basestatic
rmdir()FatFileprivate
rmRfStar()FatFileprivate
seekCur(int32_t offset)FatFileinlineprivate
seekdir enum nameios_base
seekEnd(int32_t offset=0)FatFileinlineprivate
seekSet(uint32_t pos)FatFileprivate
setCwd(FatFile *dir)FatFileinlineprivatestatic
setf(fmtflags fl)ios_baseinline
setf(fmtflags fl, fmtflags mask)ios_baseinline
setpos(FatPos_t *pos)FatFileprivate
setstate(iostate state)iosinline
showbaseios_basestatic
showpointios_basestatic
showposios_basestatic
skipwsios_basestatic
streamsize typedefios_base
sync()FatFileprivate
timestamp(FatFile *file)FatFileprivate
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFileprivate
truncios_basestatic
truncate(uint32_t length)FatFileprivate
unsetf(fmtflags fl)ios_baseinline
uppercaseios_basestatic
volume() const FatFileinlineprivate
width()ios_baseinline
width(unsigned n)ios_baseinline
write(const char *str)FatFileinlineprivate
write(uint8_t b)FatFileinlineprivate
write(const void *buf, size_t nbyte)FatFileprivate
- - - - diff --git a/libraries/SdFat/html/class_fat_stream_base.html b/libraries/SdFat/html/class_fat_stream_base.html deleted file mode 100644 index e8c1736..0000000 --- a/libraries/SdFat/html/class_fat_stream_base.html +++ /dev/null @@ -1,1640 +0,0 @@ - - - - - - -SdFat: FatStreamBase Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

Base class for C++ style streams. - More...

- -

#include <fstream.h>

-
-Inheritance diagram for FatStreamBase:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for FatStreamBase:
-
-
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
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Private Member Functions

uint32_t available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
int write (const char *str)
 
int write (uint8_t b)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Private Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

Base class for C++ style 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
-
-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
- -
-
- -
-
- - - - - -
- - - - - - - -
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.
- -
-
- -
-
- - - - - -
- - - - - - - -
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.
- -
-
- -
-
- - - - - -
- - - - - - - - -
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 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/utility/fstream.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_fat_stream_base__coll__graph.png b/libraries/SdFat/html/class_fat_stream_base__coll__graph.png deleted file mode 100644 index 3dc07b8fc77b917990918f5f92c3213a6bc204fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3518 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 diff --git a/libraries/SdFat/html/class_fat_volume-members.html b/libraries/SdFat/html/class_fat_volume-members.html deleted file mode 100644 index 37180e3..0000000 --- a/libraries/SdFat/html/class_fat_volume-members.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
FatVolume Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - -
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
FatCache (defined in FatVolume)FatVolumefriend
fatCount()FatVolumeinline
FatFile (defined in FatVolume)FatVolumefriend
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
init()FatVolumeinline
init(uint8_t part)FatVolume
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
volumeBlockCount() const FatVolumeinline
wipe(print_t *pr=0)FatVolume
- - - - diff --git a/libraries/SdFat/html/class_fat_volume.html b/libraries/SdFat/html/class_fat_volume.html deleted file mode 100644 index d648ff2..0000000 --- a/libraries/SdFat/html/class_fat_volume.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - -SdFat: FatVolume Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
FatVolume Class Referenceabstract
-
-
- -

Access FAT16 and FAT32 volumes on raw file devices. - More...

- -

#include <FatVolume.h>

-
-Inheritance diagram for FatVolume:
-
-
Inheritance graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-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
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
 FatVolume ()
 
int32_t freeClusterCount ()
 
bool init ()
 
bool init (uint8_t part)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
uint32_t volumeBlockCount () const
 
bool wipe (print_t *pr=0)
 
- - - - - -

-Friends

-class FatCache
 
-class FatFile
 
-

Detailed Description

-

Access FAT16 and FAT32 volumes on raw file devices.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
FatVolume::FatVolume ()
-
-inline
-
-

Create an instance of FatVolume

- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inline
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inline
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inline
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inline
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inline
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inline
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::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 FatVolume::fatCount ()
-
-inline
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inline
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inline
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inline
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inline
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inline
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - - - - -
bool FatVolume::wipe (print_tpr = 0)
-
-

Wipe all data from the volume.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/utility/FatVolume.h
  • -
  • Arduino/libraries/SdFat/utility/FatVolume.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_fat_volume__inherit__graph.png b/libraries/SdFat/html/class_fat_volume__inherit__graph.png deleted file mode 100644 index d3649639bac82b3478ca2850b2d08ad422f9c0fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8322 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 - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
File Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()Fileinline
clearError()FatFileinline
clearWriteError()FatFileinline
close()FatFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFile
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFile
curCluster() const FatFileinline
curPosition() const FatFileinline
cwd()FatFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlinestatic
dateTimeCallbackCancel()FatFileinlinestatic
dirEntry(dir_t *dir)FatFile
dirIndex()FatFileinline
dirName(const dir_t *dir, char *name)FatFilestatic
dirSize()FatFile
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFile
exists(const char *path)FatFileinline
FatFile()FatFileinline
FatFile(const char *path, uint8_t oflag)FatFileinline
fgets(char *str, int16_t num, char *delim=0)FatFile
File() (defined in File)Fileinline
File(const char *path, uint8_t oflag)Fileinline
fileAttr() const FatFileinline
fileSize() const FatFileinline
firstCluster() const FatFileinline
flush()Fileinline
getError()FatFileinline
getName(char *name, size_t size)FatFile
getpos(FatPos_t *pos)FatFile
getSFN(char *name)FatFile
getWriteError()FatFileinline
isDir() const FatFileinline
isDirectory()Fileinline
isFile() const FatFileinline
isHidden() const FatFileinline
isLFN() const FatFileinline
isOpen() const FatFileinline
isReadOnly() const FatFileinline
isRoot() const FatFileinline
isRoot32() const FatFileinline
isRootFixed() const FatFileinline
isSubDir() const FatFileinline
isSystem() const FatFileinline
legal83Char(uint8_t c)FatFileinlinestatic
ls(uint8_t flags=0)FatFileinline
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFile
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFile
name() const Fileinline
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFile
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFile
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFile
open(const char *path, uint8_t oflag=O_READ)FatFileinline
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFile
openNextFile(uint8_t mode=O_READ)Fileinline
openRoot(FatVolume *vol)FatFile
operator bool()Fileinline
peek()Fileinline
position()Fileinline
printCreateDateTime(print_t *pr)FatFile
printFatDate(uint16_t fatDate)FatFileinlinestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFilestatic
printFatTime(uint16_t fatTime)FatFileinlinestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFilestatic
printField(float value, char term, uint8_t prec=2)FatFile
printField(int16_t value, char term)FatFile
printField(uint16_t value, char term)FatFile
printField(int32_t value, char term)FatFile
printField(uint32_t value, char term)FatFile
printFileSize(print_t *pr)FatFile
printModifyDateTime(print_t *pr)FatFile
printName()FatFileinline
printName(print_t *pr)FatFile
printSFN(print_t *pr)FatFile
read()Fileinline
FatFile::read(void *buf, size_t nbyte)FatFile
readDir(dir_t *dir)FatFile
remove()FatFile
remove(FatFile *dirFile, const char *path)FatFilestatic
rename(FatFile *dirFile, const char *newPath)FatFile
rewind()FatFileinline
rewindDirectory()Fileinline
rmdir()FatFile
rmRfStar()FatFile
seek(uint32_t pos)Fileinline
seekCur(int32_t offset)FatFileinline
seekEnd(int32_t offset=0)FatFileinline
seekSet(uint32_t pos)FatFile
setCwd(FatFile *dir)FatFileinlinestatic
setpos(FatPos_t *pos)FatFile
size()Fileinline
sync()FatFile
timestamp(FatFile *file)FatFile
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFile
truncate(uint32_t length)FatFile
volume() const FatFileinline
write(uint8_t b)Fileinline
write(const uint8_t *buf, size_t size)Fileinline
FatFile::write(const char *str)FatFileinline
FatFile::write(const void *buf, size_t nbyte)FatFile
- - - - diff --git a/libraries/SdFat/html/class_file.html b/libraries/SdFat/html/class_file.html deleted file mode 100644 index 47a4e70..0000000 --- a/libraries/SdFat/html/class_file.html +++ /dev/null @@ -1,3513 +0,0 @@ - - - - - - -SdFat: File Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

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

- -

#include <ArduinoFiles.h>

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

-Public Member Functions

int available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
 File (const char *path, uint8_t oflag)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
void flush ()
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isDirectory ()
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
const char * name () const
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
File openNextFile (uint8_t mode=O_READ)
 
bool openRoot (FatVolume *vol)
 
 operator bool ()
 
int peek ()
 
uint32_t position ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
size_t write (uint8_t b)
 
size_t write (const uint8_t *buf, size_t size)
 
int write (const char *str)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

Arduino SD.h style File API.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File::File (const char * path,
uint8_t oflag 
)
-
-inline
-
-

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 FatFile::open(FatFile*, const char*, uint8_t).
-
-
- -
-
-

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 FatFile::clearError ()
-
-inlineinherited
-
-

Clear all error bits.

- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearWriteError ()
-
-inlineinherited
-
-

Set writeError to zero

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::close ()
-
-inherited
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::createContiguous (FatFiledirFile,
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 true is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curCluster () const
-
-inlineinherited
-
-
Returns
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curPosition () const
-
-inlineinherited
-
-
Returns
The current position for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
static FatFile* FatFile::cwd ()
-
-inlinestaticinherited
-
-
Returns
Current working directory
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::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 FatFile::dateTimeCallbackCancel ()
-
-inlinestaticinherited
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::dirEntry (dir_tdir)
-
-inherited
-
-

Return a file's directory entry.

-
Parameters
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatFile::dirIndex ()
-
-inlineinherited
-
-
Returns
The index of this file in it's directory.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t FatFile::dirName (const dir_tdir,
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.
-
-
-
Returns
length of the name.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::dirSize ()
-
-inherited
-
-
Returns
The number of bytes allocated to a directory or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::dmpFile (print_tpr,
uint32_t pos,
size_t n 
)
-
-inherited
-
-

Dump file in Hex

Parameters
- - - - -
[in]prPrint stream for list.
[in]posStart position in file.
[in]nnumber of locations to dump.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file in a directory

-
Parameters
- - -
[in]pathPath 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 FatFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::fileAttr () const
-
-inlineinherited
-
-

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

-
Returns
The file or directory type.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::fileSize () const
-
-inlineinherited
-
-
Returns
The total number of bytes in a file.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::getError ()
-
-inlineinherited
-
-
Returns
All error bits.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::getName (char * name,
size_t size 
)
-
-inherited
-
-

Get a file's name followed by a zero byte.

-
Parameters
- - - -
[out]nameAn array of characters for the file's name.
[in]sizeThe size of the array in bytes. The array must be at least 13 bytes long. The file's name will be truncated if the file's name is too long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::getpos (FatPos_tpos)
-
-inherited
-
-

get position for streams

Parameters
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::getSFN (char * name)
-
-inherited
-
-

Get a file's Short File Name followed by a zero byte.

-
Parameters
- - -
[out]nameAn array of characters for the file's name. The array must be at least 13 bytes long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::getWriteError ()
-
-inlineinherited
-
-
Returns
value of writeError
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 FatFile::isFile () const
-
-inlineinherited
-
-
Returns
True if this is a normal file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isHidden () const
-
-inlineinherited
-
-
Returns
True if this is a hidden file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isLFN () const
-
-inlineinherited
-
-
Returns
true if this file has a Long File Name.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isOpen () const
-
-inlineinherited
-
-
Returns
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isReadOnly () const
-
-inlineinherited
-
-
Returns
True if file is read-only
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot () const
-
-inlineinherited
-
-
Returns
True if this is the root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot32 () const
-
-inlineinherited
-
-
Returns
True if this is the FAT32 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRootFixed () const
-
-inlineinherited
-
-
Returns
True if this is the FAT12 of FAT16 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSubDir () const
-
-inlineinherited
-
-
Returns
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSystem () const
-
-inlineinherited
-
-
Returns
True if this is a system file else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::legal83Char (uint8_t c)
-
-inlinestaticinherited
-
-

Check for a legal 8.3 character.

Parameters
- - -
[in]cCharacter to be checked.
-
-
-
Returns
true for a legal 8.3 character else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

List directory contents.

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::ls (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::mkdir (FatFiledir,
const char * path,
bool pFlag = true 
)
-
-inherited
-
-

Make a new directory.

-
Parameters
- - - - -
[in]dirAn open FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
const char* File::name () const
-
-inline
-
-

No longer implemented due to Long File Names.

-

Use getName(char* name, size_t size).

Returns
a pointer to replacement suggestion.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFileSystemfs,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file in the volume working directory of a FatFileSystem.

-
Parameters
- - - - -
[in]fsFile System where the file is located.
[in]pathwith a valid 8.3 DOS name for a file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-inherited
-
-

Open a file by index.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-

See open() by path for definition of flags.

Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file or directory by name.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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) or any functions do character at a time writes since 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 FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-inlineinherited
-
-

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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::openNext (FatFiledirFile,
uint8_t oflag = O_READ 
)
-
-inherited
-
-

Open the next file or subdirectory in a directory.

-
Parameters
- - - -
[in]dirFileAn open FatFile instance for the directory containing the file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
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 FatFile::openRoot (FatVolumevol)
-
-inherited
-
-

Open a volume's root directory.

-
Parameters
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
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 FatFile::printCreateDateTime (print_tpr)
-
-inherited
-
-

Print a file's creation date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatDate (uint16_t fatDate)
-
-inlinestaticinherited
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatDate (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatTime (uint16_t fatTime)
-
-inlinestaticinherited
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatTime (print_tpr,
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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::printFileSize (print_tpr)
-
-inherited
-
-

Print a file's size.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printModifyDateTime (print_tpr)
-
-inherited
-
-

Print a file's modify date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
size_t FatFile::printName ()
-
-inlineinherited
-
-

Print a file's name.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printName (print_tpr)
-
-inherited
-
-

Print a file's name

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printSFN (print_tpr)
-
-inherited
-
-

Print a file's Short File Name.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero 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 FatFile::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 FatFile::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 FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::remove (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::rename (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::rewind ()
-
-inlineinherited
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - -
- - - - - - - -
void File::rewindDirectory ()
-
-inline
-
-

Rewind a file if it is a directory

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value 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 FatFile::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 FatFile::seekEnd (int32_t offset = 0)
-
-inlineinherited
-
-

Set the files position to end-of-file + offset. See seekSet(). Can't be used for directory files since file size is not defined.

Parameters
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::setCwd (FatFiledir)
-
-inlinestaticinherited
-
-

Set the current working directory.

-
Parameters
- - -
[in]dirNew current working directory.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::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 FatFile::sync ()
-
-inherited
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::timestamp (FatFilefile)
-
-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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFile::volume () const
-
-inlineinherited
-
-
Returns
FatVolume 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.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
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.
- -
-
- -
-
- - - - - -
- - - - - - - - -
int FatFile::write (const char * str)
-
-inlineinherited
-
-

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 FatFile::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.
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/libraries/SdFat/html/class_file__coll__graph.png b/libraries/SdFat/html/class_file__coll__graph.png deleted file mode 100644 index c56c43c7dca295ff2d42703eec8612dd81e19f26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2824 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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/libraries/SdFat/html/class_minimum_serial.html b/libraries/SdFat/html/class_minimum_serial.html deleted file mode 100644 index 540800f..0000000 --- a/libraries/SdFat/html/class_minimum_serial.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -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/libraries/SdFat/html/class_minimum_serial__coll__graph.png b/libraries/SdFat/html/class_minimum_serial__coll__graph.png deleted file mode 100644 index 1121af804a7c744235bcd0852e76184e6f321dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 -
-
-
- - - - - - - - - -
- -
- -
-
-
-
PrintFile Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()PrintFileinline
clearError()FatFileinline
clearWriteError()FatFileinline
close()FatFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFile
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFile
curCluster() const FatFileinline
curPosition() const FatFileinline
cwd()FatFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlinestatic
dateTimeCallbackCancel()FatFileinlinestatic
dirEntry(dir_t *dir)FatFile
dirIndex()FatFileinline
dirName(const dir_t *dir, char *name)FatFilestatic
dirSize()FatFile
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFile
exists(const char *path)FatFileinline
FatFile()FatFileinline
FatFile(const char *path, uint8_t oflag)FatFileinline
fgets(char *str, int16_t num, char *delim=0)FatFile
fileAttr() const FatFileinline
fileSize() const FatFileinline
firstCluster() const FatFileinline
flush()PrintFileinline
getError()FatFileinline
getName(char *name, size_t size)FatFile
getpos(FatPos_t *pos)FatFile
getSFN(char *name)FatFile
getWriteError()FatFileinline
isDir() const FatFileinline
isFile() const FatFileinline
isHidden() const FatFileinline
isLFN() const FatFileinline
isOpen() const FatFileinline
isReadOnly() const FatFileinline
isRoot() const FatFileinline
isRoot32() const FatFileinline
isRootFixed() const FatFileinline
isSubDir() const FatFileinline
isSystem() const FatFileinline
legal83Char(uint8_t c)FatFileinlinestatic
ls(uint8_t flags=0)FatFileinline
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFile
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFile
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFile
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFile
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFile
open(const char *path, uint8_t oflag=O_READ)FatFileinline
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFile
openRoot(FatVolume *vol)FatFile
peek()PrintFileinline
printCreateDateTime(print_t *pr)FatFile
printFatDate(uint16_t fatDate)FatFileinlinestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFilestatic
printFatTime(uint16_t fatTime)FatFileinlinestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFilestatic
printField(float value, char term, uint8_t prec=2)FatFile
printField(int16_t value, char term)FatFile
printField(uint16_t value, char term)FatFile
printField(int32_t value, char term)FatFile
printField(uint32_t value, char term)FatFile
PrintFile() (defined in PrintFile)PrintFileinline
PrintFile(const char *path, uint8_t oflag)PrintFileinline
printFileSize(print_t *pr)FatFile
printModifyDateTime(print_t *pr)FatFile
printName()FatFileinline
printName(print_t *pr)FatFile
printSFN(print_t *pr)FatFile
read()FatFileinline
read(void *buf, size_t nbyte)FatFile
readDir(dir_t *dir)FatFile
remove()FatFile
remove(FatFile *dirFile, const char *path)FatFilestatic
rename(FatFile *dirFile, const char *newPath)FatFile
rewind()FatFileinline
rmdir()FatFile
rmRfStar()FatFile
seekCur(int32_t offset)FatFileinline
seekEnd(int32_t offset=0)FatFileinline
seekSet(uint32_t pos)FatFile
setCwd(FatFile *dir)FatFileinlinestatic
setpos(FatPos_t *pos)FatFile
sync()FatFile
timestamp(FatFile *file)FatFile
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFile
truncate(uint32_t length)FatFile
volume() const FatFileinline
write(uint8_t b)PrintFileinline
write(const uint8_t *buf, size_t size)PrintFileinline
FatFile::write(const char *str)FatFileinline
FatFile::write(const void *buf, size_t nbyte)FatFile
- - - - diff --git a/libraries/SdFat/html/class_print_file.html b/libraries/SdFat/html/class_print_file.html deleted file mode 100644 index e6ca75d..0000000 --- a/libraries/SdFat/html/class_print_file.html +++ /dev/null @@ -1,3289 +0,0 @@ - - - - - - -SdFat: PrintFile Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

FatFile with Print. - More...

- -

#include <ArduinoFiles.h>

-
-Inheritance diagram for PrintFile:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for PrintFile:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

int available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
void flush ()
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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)
 
 PrintFile (const char *path, uint8_t oflag)
 
size_t printFileSize (print_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
size_t write (uint8_t b)
 
size_t write (const uint8_t *buf, size_t size)
 
int write (const char *str)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

FatFile with Print.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
PrintFile::PrintFile (const char * path,
uint8_t oflag 
)
-
-inline
-
-

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

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

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
int PrintFile::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 FatFile::clearError ()
-
-inlineinherited
-
-

Clear all error bits.

- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearWriteError ()
-
-inlineinherited
-
-

Set writeError to zero

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::close ()
-
-inherited
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::createContiguous (FatFiledirFile,
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 true is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curCluster () const
-
-inlineinherited
-
-
Returns
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curPosition () const
-
-inlineinherited
-
-
Returns
The current position for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
static FatFile* FatFile::cwd ()
-
-inlinestaticinherited
-
-
Returns
Current working directory
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::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 FatFile::dateTimeCallbackCancel ()
-
-inlinestaticinherited
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::dirEntry (dir_tdir)
-
-inherited
-
-

Return a file's directory entry.

-
Parameters
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatFile::dirIndex ()
-
-inlineinherited
-
-
Returns
The index of this file in it's directory.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t FatFile::dirName (const dir_tdir,
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.
-
-
-
Returns
length of the name.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::dirSize ()
-
-inherited
-
-
Returns
The number of bytes allocated to a directory or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::dmpFile (print_tpr,
uint32_t pos,
size_t n 
)
-
-inherited
-
-

Dump file in Hex

Parameters
- - - - -
[in]prPrint stream for list.
[in]posStart position in file.
[in]nnumber of locations to dump.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file in a directory

-
Parameters
- - -
[in]pathPath 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 FatFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::fileAttr () const
-
-inlineinherited
-
-

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

-
Returns
The file or directory type.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::fileSize () const
-
-inlineinherited
-
-
Returns
The total number of bytes in a file.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::firstCluster () const
-
-inlineinherited
-
-
Returns
The first cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
void PrintFile::flush ()
-
-inline
-
-

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

- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::getError ()
-
-inlineinherited
-
-
Returns
All error bits.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::getName (char * name,
size_t size 
)
-
-inherited
-
-

Get a file's name followed by a zero byte.

-
Parameters
- - - -
[out]nameAn array of characters for the file's name.
[in]sizeThe size of the array in bytes. The array must be at least 13 bytes long. The file's name will be truncated if the file's name is too long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::getpos (FatPos_tpos)
-
-inherited
-
-

get position for streams

Parameters
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::getSFN (char * name)
-
-inherited
-
-

Get a file's Short File Name followed by a zero byte.

-
Parameters
- - -
[out]nameAn array of characters for the file's name. The array must be at least 13 bytes long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::getWriteError ()
-
-inlineinherited
-
-
Returns
value of writeError
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isDir () const
-
-inlineinherited
-
-
Returns
True if this is a directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isFile () const
-
-inlineinherited
-
-
Returns
True if this is a normal file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isHidden () const
-
-inlineinherited
-
-
Returns
True if this is a hidden file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isLFN () const
-
-inlineinherited
-
-
Returns
true if this file has a Long File Name.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isOpen () const
-
-inlineinherited
-
-
Returns
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isReadOnly () const
-
-inlineinherited
-
-
Returns
True if file is read-only
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot () const
-
-inlineinherited
-
-
Returns
True if this is the root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot32 () const
-
-inlineinherited
-
-
Returns
True if this is the FAT32 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRootFixed () const
-
-inlineinherited
-
-
Returns
True if this is the FAT12 of FAT16 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSubDir () const
-
-inlineinherited
-
-
Returns
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSystem () const
-
-inlineinherited
-
-
Returns
True if this is a system file else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::legal83Char (uint8_t c)
-
-inlinestaticinherited
-
-

Check for a legal 8.3 character.

Parameters
- - -
[in]cCharacter to be checked.
-
-
-
Returns
true for a legal 8.3 character else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

List directory contents.

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::ls (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::mkdir (FatFiledir,
const char * path,
bool pFlag = true 
)
-
-inherited
-
-

Make a new directory.

-
Parameters
- - - - -
[in]dirAn open FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFileSystemfs,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file in the volume working directory of a FatFileSystem.

-
Parameters
- - - - -
[in]fsFile System where the file is located.
[in]pathwith a valid 8.3 DOS name for a file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-inherited
-
-

Open a file by index.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-

See open() by path for definition of flags.

Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file or directory by name.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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) or any functions do character at a time writes since 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 FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-inlineinherited
-
-

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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::openNext (FatFiledirFile,
uint8_t oflag = O_READ 
)
-
-inherited
-
-

Open the next file or subdirectory in a directory.

-
Parameters
- - - -
[in]dirFileAn open FatFile instance for the directory containing the file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::openRoot (FatVolumevol)
-
-inherited
-
-

Open a volume's root directory.

-
Parameters
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int PrintFile::peek ()
-
-inline
-
-

Return the next available byte without consuming it.

-
Returns
The byte if no error and not at eof else -1;
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printCreateDateTime (print_tpr)
-
-inherited
-
-

Print a file's creation date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatDate (uint16_t fatDate)
-
-inlinestaticinherited
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatDate (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatTime (uint16_t fatTime)
-
-inlinestaticinherited
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatTime (print_tpr,
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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::printFileSize (print_tpr)
-
-inherited
-
-

Print a file's size.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printModifyDateTime (print_tpr)
-
-inherited
-
-

Print a file's modify date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
size_t FatFile::printName ()
-
-inlineinherited
-
-

Print a file's name.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printName (print_tpr)
-
-inherited
-
-

Print a file's name

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printSFN (print_tpr)
-
-inherited
-
-

Print a file's Short File Name.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int FatFile::read ()
-
-inlineinherited
-
-

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 FatFile::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 FatFile::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 FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::remove (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::rename (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::rewind ()
-
-inlineinherited
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 FatFile::seekEnd (int32_t offset = 0)
-
-inlineinherited
-
-

Set the files position to end-of-file + offset. See seekSet(). Can't be used for directory files since file size is not defined.

Parameters
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::setCwd (FatFiledir)
-
-inlinestaticinherited
-
-

Set the current working directory.

-
Parameters
- - -
[in]dirNew current working directory.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::setpos (FatPos_tpos)
-
-inherited
-
-

set position for streams

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

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::timestamp (FatFilefile)
-
-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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFile::volume () const
-
-inlineinherited
-
-
Returns
FatVolume that contains this file.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t PrintFile::write (uint8_t b)
-
-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. 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.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
size_t PrintFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - - -
int FatFile::write (const char * str)
-
-inlineinherited
-
-

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 FatFile::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.
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/libraries/SdFat/html/class_print_file__coll__graph.png b/libraries/SdFat/html/class_print_file__coll__graph.png deleted file mode 100644 index 12d208d98c6d7654776c084022811c6c3711a826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2715 zcmZXWX*|?x8^`}6%Va4tV~(9M7<0-JMjtwo^v4j9lx57=$JTJNrm~irVQi6Q4vA_) zzV8>;=URR*zBKzYmJ*_Jq5uF$Sm8m3 zy_mUo{)P(gc_r3u!Mz~tb=ndHe*Ut1jgPVbK-As}Jn4A3V4;9;QEEW8_2>AIqBovJ z;#2bz8YD%L4tV?_q4kG`>TVCL8`YR)&}<8&4su0K0e$GarrLQi#}$S}`IWQWXIAkq zOQx$2y|Xvhf(j%8@QnYeRQmCueQq5Oo7e-lMs3-8ulQHUJU07ok z%+ZoRgi|AqeG;0GiH{S)99A$EpYZ+E2AWZ;fGxTBG1oO^)WWuRbXE5R84Y~7yTv@_ zX%PS8xzdBmN=ig!YpHrnOpMzI#s_-#t(Y%5$uFBGb@wdB;WE?Fizuh4{{OWK{3V&ynmIy2DqaZyzoO8lAh0!6H^}6wxTAUo(j1 zMS<^2MUuO`%fk5UBe`#@W-6S;k(98jw%Wss15R}-ovE@>9g0;1C6~DoyJS>oNnlcc z@3d1Q;TiP2($`$tqNU_%8@Jr*?zqy#Bbmbv=fuq7YNo8ao%~Lkr@XXyXb-+w92G9Y{j`P)9&e&&W-@l|W@cO? zY``DDd)k*=(tnNOc16>am02k|CbL;J<+38nT{H<;*|%B^aqkUVGE~LC&^KZ!s}e8F z9NKP}T3(_}3`VZvP*ZLFf*?j?PEn)eG}xV27$u?FXjNNsuVdRltGS?!_C~8L!}J3X47izx`szN*h?uEU zA8+(QiQ`+6tDj!)PnZGVNs(lK@Ovg0uqi2vP>0{=B@gEnLmH^qXfI9yCt5GOFVQIM z7!Rgy2dw!o$}Ew6ZY&x}>(Sc!Tn-TJ+*OLP*hkyDFC@2tCB{$cOc%=~Y}s3;1HF$E|Co`kze{>YKWHrr1*nFOXQ9+Q z8g)w?mR=unUD!jEwe$~}H?S{fR<_qBZXat0U}o#tYfpa6_qa1!gwLnubBxlkF9gNV zAM@&tA31CChR*vo`=`DJn1*_MxiPeC8g3zN7|E51hoO4zSR0(sGaT$q@!#!~Ja}MZjp^_q4ALXy zp%!;Bs*$&`@ZO#{whyM?qfzwTOXl8TAfqc)LFMmwDpclm^zJn>SOa!VrzM1(O}h>l zv9Z$$PB(8wk+KeTC*kvd^{UMIiq+Suso=kW@CJa!er~;Qy<5aszERkec)YvNmQ(HM z=%V3N`u>Fb0L!MB&=EheD?M%rKY@}f3~;%+OY*;@prHzS*`8`?BLlM0+=kx4yb0y-=)~mXchcP=7QymC=L0SH5TRvNbTzAnlszCmR-2SGG&gq|i1TuH%SYp)@l z&?49wOut?KJ5M<>@M7FTpSLpexB2wX)Q6GNC|t<0=mvF*(LvPCD!q zIhs+~n%dv5)oVbR_9pZ9RM@0O=<=cYstEupZzIvTS+R`b2gRN~`YrY*hPYMWjW%CQvN}lKRDc057 z>sF_MK!(m(A-s7=op3tAO*cEu<-#Uu$n`sF1Jmp$gm;y_Dd0nD2~{a^aSm7A=yZX! z;D6Gf>CXKuuX_XQ8@=2tE4la2_2a{OYOgk_TVDV9>C|3p^z`&7UGIbd#=LJp8}dZ- z-6^WJi(KHz(Y^I`udgWqU3wb4gAzaZ3shO!cf}(KvXj zkkbBd=61Hdi#~};ulnEC4t{yRKHnPLl~*kY)E+&my-lHHZ-7Or>P^SyE+)|A8O+b)&7 z#-Ng@^WFmU+Hgp`ukR)#+zmSBGG85Pe&$%P%jizf@f^*$k04;^&L;#g3Oj=g@J~Wq zVUL|TrwjYhoi5-L6vV}={U=wpNLM(_54hd;(P7?E-ha#o5-AqG5bR-jv=x_Dq_g>V8 zr*k`Uim?gS70BP*V3CjiEc**2(3#ForwD|9g08x|yAQ>5P>T4@h@C>d%vn?IKyby?@zV;8~W zhsyAd>al8XlGI`*=dr3kNZFzjl;PSk!pUUA&}nFG$oPR99tZkDng8Oz|M3C7O4kwS zD*Q{j%+b0w&0g2on7+FkixLczNlISl?C$Q?)tKMNjvW&C&2GOD&hERifPb>|b0mo0 PqfNld{0#WS%p>uCxEl0N diff --git a/libraries/SdFat/html/class_print_file__inherit__graph.png b/libraries/SdFat/html/class_print_file__inherit__graph.png deleted file mode 100644 index d686c72e0d79f3387f6bbed8348c84493d0204c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3466 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 Z7vqK4ST~hn@KLCU2X4?P& diff --git a/libraries/SdFat/html/class_sd2_card-members.html b/libraries/SdFat/html/class_sd2_card-members.html deleted file mode 100644 index 05ef7a7..0000000 --- a/libraries/SdFat/html/class_sd2_card-members.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
Sd2Card Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(uint8_t chipSelectPin=SS, uint8_t sckDivisor=2)Sd2Cardinline
cardSize()SdSpiCard
erase(uint32_t firstBlock, uint32_t lastBlock)SdSpiCard
eraseSingleBlockEnable()SdSpiCard
error(uint8_t code)SdSpiCardinline
errorCode() const SdSpiCardinline
errorData() const SdSpiCardinline
init(uint8_t sckDivisor=2, uint8_t chipSelectPin=SS)Sd2Cardinline
isBusy()SdSpiCard
m_spi_t typedefSdSpiCard
readBlock(uint32_t block, uint8_t *dst)SdSpiCard
readBlocks(uint32_t block, uint8_t *dst, size_t count)SdSpiCard
readCID(cid_t *cid)SdSpiCardinline
readCSD(csd_t *csd)SdSpiCardinline
readData(uint8_t *dst)SdSpiCard
readOCR(uint32_t *ocr)SdSpiCard
readStart(uint32_t blockNumber)SdSpiCard
readStop()SdSpiCard
sckDivisor()SdSpiCardinline
SdSpiCard()SdSpiCardinline
type() const SdSpiCardinline
writeBlock(uint32_t blockNumber, const uint8_t *src)SdSpiCard
writeBlocks(uint32_t block, const uint8_t *src, size_t count)SdSpiCard
writeData(const uint8_t *src)SdSpiCard
writeStart(uint32_t blockNumber, uint32_t eraseCount)SdSpiCard
writeStop()SdSpiCard
- - - - diff --git a/libraries/SdFat/html/class_sd2_card.html b/libraries/SdFat/html/class_sd2_card.html deleted file mode 100644 index 1437a3c..0000000 --- a/libraries/SdFat/html/class_sd2_card.html +++ /dev/null @@ -1,1006 +0,0 @@ - - - - - - -SdFat: Sd2Card Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
Sd2Card Class Reference
-
-
- -

Raw access to SD and SDHC card using default SPI library. - More...

- -

#include <SdSpiCard.h>

-
-Inheritance diagram for Sd2Card:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for Sd2Card:
-
-
Collaboration graph
- - -
[legend]
- - - - -

-Public Types

typedef SpiDefault_t m_spi_t
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t chipSelectPin=SS, uint8_t sckDivisor=2)
 
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=2, uint8_t chipSelectPin=SS)
 
bool isBusy ()
 
bool readBlock (uint32_t block, uint8_t *dst)
 
bool readBlocks (uint32_t block, uint8_t *dst, size_t count)
 
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 ()
 
int type () const
 
bool writeBlock (uint32_t blockNumber, const uint8_t *src)
 
bool writeBlocks (uint32_t block, const uint8_t *src, size_t count)
 
bool writeData (const uint8_t *src)
 
bool writeStart (uint32_t blockNumber, uint32_t eraseCount)
 
bool writeStop ()
 
-

Detailed Description

-

Raw access to SD and SDHC card using default SPI library.

-

Member Typedef Documentation

- -
-
- - - - - -
- - - - -
typedef SpiDefault_t SdSpiCard::m_spi_t
-
-inherited
-
-

typedef for SPI class.

- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::begin (uint8_t chipSelectPin = SS,
uint8_t sckDivisor = 2 
)
-
-inline
-
-

Initialize the SD card.

Parameters
- - - -
[in]chipSelectPinSD chip select pin.
[in]sckDivisorSPI clock divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t SdSpiCard::cardSize ()
-
-inherited
-
-

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 SdSpiCard::erase (uint32_t firstBlock,
uint32_t lastBlock 
)
-
-inherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpiCard::eraseSingleBlockEnable ()
-
-inherited
-
-

Determine if card supports single block erase.

-
Returns
true is returned if single block erase is supported. false is returned if single block erase is not supported.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdSpiCard::error (uint8_t code)
-
-inlineinherited
-
-

Set SD error code.

Parameters
- - -
[in]codevalue for error code.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::errorCode () const
-
-inlineinherited
-
-
Returns
code for the last error. See SdSpiCard.h for a list of error codes.
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::errorData () const
-
-inlineinherited
-
-
Returns
error data for last error.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool Sd2Card::init (uint8_t sckDivisor = 2,
uint8_t chipSelectPin = SS 
)
-
-inline
-
-

Initialize the SD card. Obsolete form.

Parameters
- - - -
[in]chipSelectPinSD chip select pin.
[in]sckDivisorSPI clock divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpiCard::isBusy ()
-
-inherited
-
-

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

-
Returns
true if busy else false.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdSpiCard::readBlock (uint32_t block,
uint8_t * dst 
)
-
-inherited
-
-

Read a 512 byte block from an SD card.

-
Parameters
- - - -
[in]blockLogical block to be read.
[out]dstPointer to the location that will receive the data.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdSpiCard::readBlocks (uint32_t block,
uint8_t * dst,
size_t count 
)
-
-inherited
-
-

Read multiple 512 byte blocks from an SD card.

-
Parameters
- - - - -
[in]blockLogical block to be read.
[in]countNumber of blocks to be read.
[out]dstPointer to the location that will receive the data.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool SdSpiCard::readCID (cid_t * cid)
-
-inlineinherited
-
-

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 SdSpiCard::readCSD (csd_t * csd)
-
-inlineinherited
-
-

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 SdSpiCard::readData (uint8_t * dst)
-
-inherited
-
-

Read one data block in a multiple block read sequence

-
Parameters
- - -
[out]dstPointer to the location for the data to be read.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool SdSpiCard::readOCR (uint32_t * ocr)
-
-inherited
-
-

Read OCR register.

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpiCard::readStop ()
-
-inherited
-
-

End a read multiple blocks sequence.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t SdSpiCard::sckDivisor ()
-
-inlineinherited
-
-

Return SCK divisor.

-
Returns
Requested SCK divisor.
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::type () const
-
-inlineinherited
-
-

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

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdSpiCard::writeBlocks (uint32_t block,
const uint8_t * src,
size_t count 
)
-
-inherited
-
-

Write multiple 512 byte blocks to an SD card.

-
Parameters
- - - - -
[in]blockLogical block to be written.
[in]countNumber of blocks to be written.
[in]srcPointer to the location of the data to be written.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool SdSpiCard::writeData (const uint8_t * src)
-
-inherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdSpiCard::writeStart (uint32_t blockNumber,
uint32_t eraseCount 
)
-
-inherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpiCard::writeStop ()
-
-inherited
-
-

End a write multiple blocks sequence.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/libraries/SdFat/html/class_sd2_card__coll__graph.png b/libraries/SdFat/html/class_sd2_card__coll__graph.png deleted file mode 100644 index 03e05452d351709fd0b621e45cdc167f4923f210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^u|QnF!3HF2oNKg!6kC$Fy9>jA5L~c#`D6wLmMTvd z$B>FSZ|6E@UvUsQ{$KxY)C$`zNr}4yG`B9d<&3k*?C!GVXnhowu~z+~g4gQ545j%^ z?)zQ$yR3`*#rj2qtBKuz>6E**a&M-Y%vG73GimzCeex`4QqsOXoqlq5=Cm~pi!{0x zY0Ok~zM0NYeu{6&u{lf?tPj3#IG{3@v4-`-;w1}S`LQ1mYgoL)i|0Y5=EENL@R};8 z#vW6xSca*34PN34CI;K*Xc({UY5J`RU+Q1UKih6`Qs=8~-qK>_{x3puo}Md}YM9L4 z`qrlSN_xIje^p#0JpZ~&mekb1AfN5KeSh!yR1{>N`RJTW+@OPmBNSOOi@e>rz++ee^FZXxB-W`IoObpw9cM8X!DB9f7 zY2qz=`}UoX^V@V@Rb1Jh``fG6`{h!z6(x)@6XRBGRFQ3zX;0jeYL+*o`&G^G+4RyJdShrY0vQzW;aVke&JL>i8weC!1DV z)=D$j@LL}^t|aF#-c@`lJnWvYVfAf>13sJ2KD&SXlHt;$mM_)S?+Gi-V`NbJ(y>8V zHaKd|WIKrqd<}LC2FXGP(pG=1iZWYOVxd}F_wOu^pjkoXN^4Vzn0hVIV6i!q?q$T> zwvfN;$i}c=fKx-+&y&4E{J{rvOJ0W8-rm2@{V{yr^Cj%{12u>Kjtr%m9*%oACCyYH zooX_^G?V>2L)V{qQzdsVWiw&o^L##?!TsoK#y<&#A9GhWZglNshj9JTm(r)j32ZGU~7-crdlJ5{ImHS%YE1lN@$ zANjw$=l$H8ua`Q%1eu5IVt}O>ho#&LU|~uH;V)XohK3(yKiNkVZ}j!On{k z!HbeQ^*+ac&0So#fB&VIB^UCx=g#gCy_;7qbRd`ExMykb-WON%wr||EYnI`fs>^T7 z*1pd26NfuZ^=vA#a?b@sFb8P|XrUsfE*^*a%w9y4uA ze5%&WxJ@x4_rLd+hly&&?#g6&uByH2eZl|3e-kR_6{-YARB`t2SrRh&JLhswch_Ty zi!Mxj_xs<`X(p3$)Nh!~pZl~z^0QOs{_jarp=Lcsj$x+9#mz2#ws@!`u5qVqM`)+l zy10glhs&mV#r$2>`{R<@rG&~L*~_n#R_5LjGRm}!{8nUq_P_j*_V)H)8Rku&ySK4E z&{&z5df9t!AUN3~1+l_atJ=y+$>QSTR@TQx$B!Rxcxq+a`^BGOn(;9czAub23_nz5 fJ3uAEm09&_sw&Rj49mP-ttu6{1-oD!M<1a~e% diff --git a/libraries/SdFat/html/class_sd2_card__inherit__graph.png b/libraries/SdFat/html/class_sd2_card__inherit__graph.png deleted file mode 100644 index 03e05452d351709fd0b621e45cdc167f4923f210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^u|QnF!3HF2oNKg!6kC$Fy9>jA5L~c#`D6wLmMTvd z$B>FSZ|6E@UvUsQ{$KxY)C$`zNr}4yG`B9d<&3k*?C!GVXnhowu~z+~g4gQ545j%^ z?)zQ$yR3`*#rj2qtBKuz>6E**a&M-Y%vG73GimzCeex`4QqsOXoqlq5=Cm~pi!{0x zY0Ok~zM0NYeu{6&u{lf?tPj3#IG{3@v4-`-;w1}S`LQ1mYgoL)i|0Y5=EENL@R};8 z#vW6xSca*34PN34CI;K*Xc({UY5J`RU+Q1UKih6`Qs=8~-qK>_{x3puo}Md}YM9L4 z`qrlSN_xIje^p#0JpZ~&mekb1AfN5KeSh!yR1{>N`RJTW+@OPmBNSOOi@e>rz++ee^FZXxB-W`IoObpw9cM8X!DB9f7 zY2qz=`}UoX^V@V@Rb1Jh``fG6`{h!z6(x)@6XRBGRFQ3zX;0jeYL+*o`&G^G+4RyJdShrY0vQzW;aVke&JL>i8weC!1DV z)=D$j@LL}^t|aF#-c@`lJnWvYVfAf>13sJ2KD&SXlHt;$mM_)S?+Gi-V`NbJ(y>8V zHaKd|WIKrqd<}LC2FXGP(pG=1iZWYOVxd}F_wOu^pjkoXN^4Vzn0hVIV6i!q?q$T> zwvfN;$i}c=fKx-+&y&4E{J{rvOJ0W8-rm2@{V{yr^Cj%{12u>Kjtr%m9*%oACCyYH zooX_^G?V>2L)V{qQzdsVWiw&o^L##?!TsoK#y<&#A9GhWZglNshj9JTm(r)j32ZGU~7-crdlJ5{ImHS%YE1lN@$ zANjw$=l$H8ua`Q%1eu5IVt}O>ho#&LU|~uH;V)XohK3(yKiNkVZ}j!On{k z!HbeQ^*+ac&0So#fB&VIB^UCx=g#gCy_;7qbRd`ExMykb-WON%wr||EYnI`fs>^T7 z*1pd26NfuZ^=vA#a?b@sFb8P|XrUsfE*^*a%w9y4uA ze5%&WxJ@x4_rLd+hly&&?#g6&uByH2eZl|3e-kR_6{-YARB`t2SrRh&JLhswch_Ty zi!Mxj_xs<`X(p3$)Nh!~pZl~z^0QOs{_jarp=Lcsj$x+9#mz2#ws@!`u5qVqM`)+l zy10glhs&mV#r$2>`{R<@rG&~L*~_n#R_5LjGRm}!{8nUq_P_j*_V)H)8Rku&ySK4E z&{&z5df9t!AUN3~1+l_atJ=y+$>QSTR@TQx$B!Rxcxq+a`^BGOn(;9czAub23_nz5 fJ3uAEm09&_sw&Rj49mP-ttu6{1-oD!M<1a~e% diff --git a/libraries/SdFat/html/class_sd_base_file-members.html b/libraries/SdFat/html/class_sd_base_file-members.html deleted file mode 100644 index 3566129..0000000 --- a/libraries/SdFat/html/class_sd_base_file-members.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdBaseFile Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()FatFileinline
clearError()FatFileinline
clearWriteError()FatFileinline
close()FatFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFile
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFile
curCluster() const FatFileinline
curPosition() const FatFileinline
cwd()FatFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlinestatic
dateTimeCallbackCancel()FatFileinlinestatic
dirEntry(dir_t *dir)FatFile
dirIndex()FatFileinline
dirName(const dir_t *dir, char *name)FatFilestatic
dirSize()FatFile
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFile
exists(const char *path)FatFileinline
FatFile()FatFileinline
FatFile(const char *path, uint8_t oflag)FatFileinline
fgets(char *str, int16_t num, char *delim=0)FatFile
fileAttr() const FatFileinline
fileSize() const FatFileinline
firstCluster() const FatFileinline
getError()FatFileinline
getName(char *name, size_t size)FatFile
getpos(FatPos_t *pos)FatFile
getSFN(char *name)FatFile
getWriteError()FatFileinline
isDir() const FatFileinline
isFile() const FatFileinline
isHidden() const FatFileinline
isLFN() const FatFileinline
isOpen() const FatFileinline
isReadOnly() const FatFileinline
isRoot() const FatFileinline
isRoot32() const FatFileinline
isRootFixed() const FatFileinline
isSubDir() const FatFileinline
isSystem() const FatFileinline
legal83Char(uint8_t c)FatFileinlinestatic
ls(uint8_t flags=0)FatFileinline
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFile
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFile
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFile
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFile
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFile
open(const char *path, uint8_t oflag=O_READ)FatFileinline
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFile
openRoot(FatVolume *vol)FatFile
peek()FatFile
printCreateDateTime(print_t *pr)FatFile
printFatDate(uint16_t fatDate)FatFileinlinestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFilestatic
printFatTime(uint16_t fatTime)FatFileinlinestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFilestatic
printField(float value, char term, uint8_t prec=2)FatFile
printField(int16_t value, char term)FatFile
printField(uint16_t value, char term)FatFile
printField(int32_t value, char term)FatFile
printField(uint32_t value, char term)FatFile
printFileSize(print_t *pr)FatFile
printModifyDateTime(print_t *pr)FatFile
printName()FatFileinline
printName(print_t *pr)FatFile
printSFN(print_t *pr)FatFile
read()FatFileinline
read(void *buf, size_t nbyte)FatFile
readDir(dir_t *dir)FatFile
remove()FatFile
remove(FatFile *dirFile, const char *path)FatFilestatic
rename(FatFile *dirFile, const char *newPath)FatFile
rewind()FatFileinline
rmdir()FatFile
rmRfStar()FatFile
SdBaseFile() (defined in SdBaseFile)SdBaseFileinline
SdBaseFile(const char *path, uint8_t oflag)SdBaseFileinline
seekCur(int32_t offset)FatFileinline
seekEnd(int32_t offset=0)FatFileinline
seekSet(uint32_t pos)FatFile
setCwd(FatFile *dir)FatFileinlinestatic
setpos(FatPos_t *pos)FatFile
sync()FatFile
timestamp(FatFile *file)FatFile
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFile
truncate(uint32_t length)FatFile
volume() const FatFileinline
write(const char *str)FatFileinline
write(uint8_t b)FatFileinline
write(const void *buf, size_t nbyte)FatFile
- - - - diff --git a/libraries/SdFat/html/class_sd_base_file.html b/libraries/SdFat/html/class_sd_base_file.html deleted file mode 100644 index c489fb2..0000000 --- a/libraries/SdFat/html/class_sd_base_file.html +++ /dev/null @@ -1,3215 +0,0 @@ - - - - - - -SdFat: SdBaseFile Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

Class for backward compatibility. - More...

- -

#include <SdFat.h>

-
-Inheritance diagram for SdBaseFile:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdBaseFile:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

uint32_t available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
 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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
int write (const char *str)
 
int write (uint8_t b)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

Class for backward compatibility.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
SdBaseFile::SdBaseFile (const char * path,
uint8_t oflag 
)
-
-inline
-
-

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

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

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::available ()
-
-inlineinherited
-
-
Returns
The number of bytes available from the current position to EOF for normal files. Zero is returned for directory files.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearError ()
-
-inlineinherited
-
-

Clear all error bits.

- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearWriteError ()
-
-inlineinherited
-
-

Set writeError to zero

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::close ()
-
-inherited
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::createContiguous (FatFiledirFile,
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 true is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curCluster () const
-
-inlineinherited
-
-
Returns
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curPosition () const
-
-inlineinherited
-
-
Returns
The current position for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
static FatFile* FatFile::cwd ()
-
-inlinestaticinherited
-
-
Returns
Current working directory
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::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 FatFile::dateTimeCallbackCancel ()
-
-inlinestaticinherited
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::dirEntry (dir_tdir)
-
-inherited
-
-

Return a file's directory entry.

-
Parameters
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatFile::dirIndex ()
-
-inlineinherited
-
-
Returns
The index of this file in it's directory.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t FatFile::dirName (const dir_tdir,
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.
-
-
-
Returns
length of the name.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::dirSize ()
-
-inherited
-
-
Returns
The number of bytes allocated to a directory or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::dmpFile (print_tpr,
uint32_t pos,
size_t n 
)
-
-inherited
-
-

Dump file in Hex

Parameters
- - - - -
[in]prPrint stream for list.
[in]posStart position in file.
[in]nnumber of locations to dump.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file in a directory

-
Parameters
- - -
[in]pathPath 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 FatFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::fileAttr () const
-
-inlineinherited
-
-

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

-
Returns
The file or directory type.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::fileSize () const
-
-inlineinherited
-
-
Returns
The total number of bytes in a file.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::firstCluster () const
-
-inlineinherited
-
-
Returns
The first cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::getError ()
-
-inlineinherited
-
-
Returns
All error bits.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::getName (char * name,
size_t size 
)
-
-inherited
-
-

Get a file's name followed by a zero byte.

-
Parameters
- - - -
[out]nameAn array of characters for the file's name.
[in]sizeThe size of the array in bytes. The array must be at least 13 bytes long. The file's name will be truncated if the file's name is too long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::getpos (FatPos_tpos)
-
-inherited
-
-

get position for streams

Parameters
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::getSFN (char * name)
-
-inherited
-
-

Get a file's Short File Name followed by a zero byte.

-
Parameters
- - -
[out]nameAn array of characters for the file's name. The array must be at least 13 bytes long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::getWriteError ()
-
-inlineinherited
-
-
Returns
value of writeError
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isDir () const
-
-inlineinherited
-
-
Returns
True if this is a directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isFile () const
-
-inlineinherited
-
-
Returns
True if this is a normal file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isHidden () const
-
-inlineinherited
-
-
Returns
True if this is a hidden file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isLFN () const
-
-inlineinherited
-
-
Returns
true if this file has a Long File Name.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isOpen () const
-
-inlineinherited
-
-
Returns
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isReadOnly () const
-
-inlineinherited
-
-
Returns
True if file is read-only
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot () const
-
-inlineinherited
-
-
Returns
True if this is the root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot32 () const
-
-inlineinherited
-
-
Returns
True if this is the FAT32 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRootFixed () const
-
-inlineinherited
-
-
Returns
True if this is the FAT12 of FAT16 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSubDir () const
-
-inlineinherited
-
-
Returns
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSystem () const
-
-inlineinherited
-
-
Returns
True if this is a system file else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::legal83Char (uint8_t c)
-
-inlinestaticinherited
-
-

Check for a legal 8.3 character.

Parameters
- - -
[in]cCharacter to be checked.
-
-
-
Returns
true for a legal 8.3 character else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

List directory contents.

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::ls (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::mkdir (FatFiledir,
const char * path,
bool pFlag = true 
)
-
-inherited
-
-

Make a new directory.

-
Parameters
- - - - -
[in]dirAn open FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFileSystemfs,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file in the volume working directory of a FatFileSystem.

-
Parameters
- - - - -
[in]fsFile System where the file is located.
[in]pathwith a valid 8.3 DOS name for a file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-inherited
-
-

Open a file by index.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-

See open() by path for definition of flags.

Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file or directory by name.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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) or any functions do character at a time writes since 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 FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-inlineinherited
-
-

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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::openNext (FatFiledirFile,
uint8_t oflag = O_READ 
)
-
-inherited
-
-

Open the next file or subdirectory in a directory.

-
Parameters
- - - -
[in]dirFileAn open FatFile instance for the directory containing the file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::openRoot (FatVolumevol)
-
-inherited
-
-

Open a volume's root directory.

-
Parameters
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int FatFile::peek ()
-
-inherited
-
-

Return the next available byte without consuming it.

-
Returns
The byte if no error and not at eof else -1;
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printCreateDateTime (print_tpr)
-
-inherited
-
-

Print a file's creation date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatDate (uint16_t fatDate)
-
-inlinestaticinherited
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatDate (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatTime (uint16_t fatTime)
-
-inlinestaticinherited
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatTime (print_tpr,
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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::printFileSize (print_tpr)
-
-inherited
-
-

Print a file's size.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printModifyDateTime (print_tpr)
-
-inherited
-
-

Print a file's modify date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
size_t FatFile::printName ()
-
-inlineinherited
-
-

Print a file's name.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printName (print_tpr)
-
-inherited
-
-

Print a file's name

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printSFN (print_tpr)
-
-inherited
-
-

Print a file's Short File Name.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int FatFile::read ()
-
-inlineinherited
-
-

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 FatFile::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 FatFile::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 FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::remove (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::rename (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::rewind ()
-
-inlineinherited
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 FatFile::seekEnd (int32_t offset = 0)
-
-inlineinherited
-
-

Set the files position to end-of-file + offset. See seekSet(). Can't be used for directory files since file size is not defined.

Parameters
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::setCwd (FatFiledir)
-
-inlinestaticinherited
-
-

Set the current working directory.

-
Parameters
- - -
[in]dirNew current working directory.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::setpos (FatPos_tpos)
-
-inherited
-
-

set position for streams

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

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::timestamp (FatFilefile)
-
-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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFile::volume () const
-
-inlineinherited
-
-
Returns
FatVolume that contains this file.
- -
-
- -
-
- - - - - -
- - - - - - - - -
int FatFile::write (const char * str)
-
-inlineinherited
-
-

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 FatFile::write (uint8_t b)
-
-inlineinherited
-
-

Write a single byte.

Parameters
- - -
[in]bThe byte to be written.
-
-
-
Returns
+1 for success or -1 for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int FatFile::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.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_base_file__coll__graph.png b/libraries/SdFat/html/class_sd_base_file__coll__graph.png deleted file mode 100644 index 0e071735ababa4575f01c646fdd29ed5a4cf4fb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^$v|Ad!3HF`D$gwdQfx`y?k)`fL2$v|<&zm0Sn@nw z978JRyq&v0?{=6-d;RoDuNIt5Sk9s3=)}I*c|p%yE0&Gz+axC~($(VMHd*t;1*Jyb zlJYrhrv33h@d!aVV--^endc&S+CAqHXez?E}Yw=-Upyzhf8}_!;i7e3-qsLeY?+fc=2} zw#Jx~4Ch>PEPKSc9%%(U(Gu9$ZY1I;*|mVjb%)G>)00d;=oasc74bHD7Wy!lZ9~oS zC8Zg0I#cJ)Z%OqMyp?+5jLB{ujq=+0*UfU}<37YLn?x(L8$W%Uzx{mF zN8Q7zbNQ2EP8{Ceqx4Ec_TK5sB4>>*d3lJguw1-_|3UDps_#{{-X`-UFE?6Q+8;fd zFuUjVSDlZV$rG8)xzFeeold)bi({!zESH9};FN_Nrvg|~HJZSVEcj`eEPEii{o{#A zdk*aW&YCrQ*4gY$yQ;3A-lxCJm|_0T7e^jsZvP%vW>tOZ<(vE8=635g_Di0h6{vFi z`R9+@?#I00jB?xk_xW_CG*JeZMRTLK&#Qf4tuEa(EwSf~MDynEpQ|5#l#l;;?qpj+ z>YW`QFS|SZnadF+-mO-sV;whnlS+hS@3H;g8H}T+%{umA_Ur5QJ6`E(dN)lKJbqD6 z;r*QgA;;BMqki5B_uIyzx%m3+{cI;<510t8c2TK&psLBvqN&{XIKOw|PV16m3m9kU z@472*|83%QUB^=bhWxHR$KD1h7vA}^?_SRxfjK>K`TMy~MA*TdFOPc`Pz5BUHiuQeA-Gk?b}N$yU%_29`F59fF(3r`9ct30k&C<#yP_=+NWRcdmv6xy&qI`EB!&pA2@p_pCTO#pw3( zsY}-wZ9Q?+HF8ylrRv+88;S}F4%jaYKk@LPVqbrMKSR!0J^pn*d(UHp{ls6E$+fkz z+1c4!)r%u7Y;BKL*v$JqXQJBU^f~|MhXv`bXZZ8VniH7yTOvNmvzWbH@bI4luqa|+ N@O1TaS?83{1OPhNDpmjh diff --git a/libraries/SdFat/html/class_sd_base_file__inherit__graph.png b/libraries/SdFat/html/class_sd_base_file__inherit__graph.png deleted file mode 100644 index 0e071735ababa4575f01c646fdd29ed5a4cf4fb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^$v|Ad!3HF`D$gwdQfx`y?k)`fL2$v|<&zm0Sn@nw z978JRyq&v0?{=6-d;RoDuNIt5Sk9s3=)}I*c|p%yE0&Gz+axC~($(VMHd*t;1*Jyb zlJYrhrv33h@d!aVV--^endc&S+CAqHXez?E}Yw=-Upyzhf8}_!;i7e3-qsLeY?+fc=2} zw#Jx~4Ch>PEPKSc9%%(U(Gu9$ZY1I;*|mVjb%)G>)00d;=oasc74bHD7Wy!lZ9~oS zC8Zg0I#cJ)Z%OqMyp?+5jLB{ujq=+0*UfU}<37YLn?x(L8$W%Uzx{mF zN8Q7zbNQ2EP8{Ceqx4Ec_TK5sB4>>*d3lJguw1-_|3UDps_#{{-X`-UFE?6Q+8;fd zFuUjVSDlZV$rG8)xzFeeold)bi({!zESH9};FN_Nrvg|~HJZSVEcj`eEPEii{o{#A zdk*aW&YCrQ*4gY$yQ;3A-lxCJm|_0T7e^jsZvP%vW>tOZ<(vE8=635g_Di0h6{vFi z`R9+@?#I00jB?xk_xW_CG*JeZMRTLK&#Qf4tuEa(EwSf~MDynEpQ|5#l#l;;?qpj+ z>YW`QFS|SZnadF+-mO-sV;whnlS+hS@3H;g8H}T+%{umA_Ur5QJ6`E(dN)lKJbqD6 z;r*QgA;;BMqki5B_uIyzx%m3+{cI;<510t8c2TK&psLBvqN&{XIKOw|PV16m3m9kU z@472*|83%QUB^=bhWxHR$KD1h7vA}^?_SRxfjK>K`TMy~MA*TdFOPc`Pz5BUHiuQeA-Gk?b}N$yU%_29`F59fF(3r`9ct30k&C<#yP_=+NWRcdmv6xy&qI`EB!&pA2@p_pCTO#pw3( zsY}-wZ9Q?+HF8ylrRv+88;S}F4%jaYKk@LPVqbrMKSR!0J^pn*d(UHp{ls6E$+fkz z+1c4!)r%u7Y;BKL*v$JqXQJBU^f~|MhXv`bXZZ8VniH7yTOvNmvzWbH@bI4luqa|+ N@O1TaS?83{1OPhNDpmjh diff --git a/libraries/SdFat/html/class_sd_fat-members.html b/libraries/SdFat/html/class_sd_fat-members.html deleted file mode 100644 index 7f8fe3a..0000000 --- a/libraries/SdFat/html/class_sd_fat-members.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdFat Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(uint8_t csPin=SS, uint8_t divisor=2)SdFatinline
SdFatBase::begin(SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)SdFatBaseinline
FatFileSystem::begin(uint8_t part=0)FatFileSysteminline
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
card()SdFatBaseinline
cardBegin(uint8_t csPin=SS, uint8_t divisor=2)SdFatinline
chdir(bool set_cwd=false)FatFileSysteminline
chdir(const char *path, bool set_cwd=false)FatFileSysteminline
chvol()FatFileSysteminline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
errorHalt()SdFatBaseinline
errorHalt(Print *pr)SdFatBase
errorHalt(char const *msg)SdFatBaseinline
errorHalt(Print *pr, char const *msg)SdFatBase
errorHalt(const __FlashStringHelper *msg)SdFatBaseinline
errorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
errorPrint()SdFatBaseinline
errorPrint(Print *pr)SdFatBase
errorPrint(const char *msg)SdFatBaseinline
errorPrint(Print *pr, char const *msg)SdFatBase
errorPrint(const __FlashStringHelper *msg)SdFatBaseinline
errorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
exists(const char *path)FatFileSysteminline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
fsBegin()SdFatBaseinline
init()FatVolumeinline
init(uint8_t part)FatVolume
initErrorHalt()SdFatBaseinline
initErrorHalt(Print *pr)SdFatBase
initErrorHalt(char const *msg)SdFatBaseinline
initErrorHalt(Print *pr, char const *msg)SdFatBase
initErrorHalt(const __FlashStringHelper *msg)SdFatBaseinline
initErrorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
initErrorPrint()SdFatBaseinline
initErrorPrint(Print *pr)SdFatBase
initErrorPrint(char const *msg)SdFatBaseinline
initErrorPrint(Print *pr, char const *msg)SdFatBase
initErrorPrint(const __FlashStringHelper *msg)SdFatBaseinline
initErrorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
ls(uint8_t flags=0)FatFileSysteminline
ls(const char *path, uint8_t flags=0)FatFileSysteminline
ls(print_t *pr, uint8_t flags)FatFileSysteminline
ls(print_t *pr, const char *path, uint8_t flags)FatFileSysteminline
mkdir(const char *path, bool pFlag=true)FatFileSysteminline
open(const char *path, uint8_t mode=FILE_READ)FatFileSysteminline
remove(const char *path)FatFileSysteminline
rename(const char *oldPath, const char *newPath)FatFileSysteminline
rmdir(const char *path)FatFileSysteminline
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
truncate(const char *path, uint32_t length)FatFileSysteminline
vol()FatFileSysteminline
volumeBlockCount() const FatVolumeinline
vwd()FatFileSysteminline
wipe(print_t *pr=0)FatFileSysteminline
- - - - diff --git a/libraries/SdFat/html/class_sd_fat.html b/libraries/SdFat/html/class_sd_fat.html deleted file mode 100644 index dbfb6eb..0000000 --- a/libraries/SdFat/html/class_sd_fat.html +++ /dev/null @@ -1,2313 +0,0 @@ - - - - - - -SdFat: SdFat Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdFat Class Reference
-
-
- -

Main file system class for SdFat library. - More...

- -

#include <SdFat.h>

-
-Inheritance diagram for SdFat:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdFat:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t part=0)
 
bool begin (SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)
 
bool begin (uint8_t csPin=SS, uint8_t divisor=2)
 
uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
SdSpiCardcard ()
 
bool cardBegin (uint8_t csPin=SS, uint8_t divisor=2)
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
void errorHalt ()
 
void errorHalt (Print *pr)
 
void errorHalt (char const *msg)
 
void errorHalt (Print *pr, char const *msg)
 
void errorHalt (const __FlashStringHelper *msg)
 
void errorHalt (Print *pr, const __FlashStringHelper *msg)
 
void errorPrint ()
 
void errorPrint (Print *pr)
 
void errorPrint (const char *msg)
 
void errorPrint (Print *pr, char const *msg)
 
void errorPrint (const __FlashStringHelper *msg)
 
void errorPrint (Print *pr, const __FlashStringHelper *msg)
 
bool exists (const char *path)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool fsBegin ()
 
bool init ()
 
bool init (uint8_t part)
 
void initErrorHalt ()
 
void initErrorHalt (Print *pr)
 
void initErrorHalt (char const *msg)
 
void initErrorHalt (Print *pr, char const *msg)
 
void initErrorHalt (const __FlashStringHelper *msg)
 
void initErrorHalt (Print *pr, const __FlashStringHelper *msg)
 
void initErrorPrint ()
 
void initErrorPrint (Print *pr)
 
void initErrorPrint (char const *msg)
 
void initErrorPrint (Print *pr, char const *msg)
 
void initErrorPrint (const __FlashStringHelper *msg)
 
void initErrorPrint (Print *pr, const __FlashStringHelper *msg)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags)
 
void ls (print_t *pr, const char *path, uint8_t flags)
 
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)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
bool truncate (const char *path, uint32_t length)
 
FatVolumevol ()
 
uint32_t volumeBlockCount () const
 
FatFilevwd ()
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

Main file system class for SdFat library.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::begin (uint8_t part = 0)
-
-inlineinherited
-
-

Initialize an FatFileSystem object.

Parameters
- - -
[in]partpartition to initialize.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdFatBase::begin (SdSpiCard::m_spi_tspi,
uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inlineinherited
-
-

Initialize SD card and file system.

Parameters
- - - - -
[in]spiSPI object for the card.
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFat::begin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Initialize SD card and file system.

-
Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
SdSpiCard* SdFatBase::card ()
-
-inlineinherited
-
-
Returns
Pointer to SD card object
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFat::cardBegin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Diagnostic call to initialize SD card - use for diagnostic purposes only.

Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::chdir (bool set_cwd = false)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::chdir (const char * path,
bool set_cwd = false 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFileSystem::chvol ()
-
-inlineinherited
-
-

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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorHalt ()
-
-inlineinherited
-
-

Print any SD error code to Serial and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (Print * pr)
-
-inherited
-
-

Print any SD error code and halt.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (char const * msg)
-
-inlineinherited
-
-

Print msg, any SD error code and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorPrint ()
-
-inlineinherited
-
-

Print any SD error code to Serial

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (Print * pr)
-
-inherited
-
-

Print any SD error code.

Parameters
- - -
[in]prPrint device.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const char * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file.

-
Parameters
- - -
[in]pathPath of the file to be tested for.
-
-
-
Returns
true if the file exists else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdFatBase::fsBegin ()
-
-inlineinherited
-
-

Diagnostic call to initialize FatFileSystem - use for diagnostic purposes only.

Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorHalt ()
-
-inlineinherited
-
-

Print any SD error code and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr)
-
-inherited
-
-

Print error details and halt after begin fails.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device for message.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorPrint ()
-
-inlineinherited
-
-

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

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr)
-
-inherited
-
-

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

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFileSystem::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

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

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFileSystem::ls (const char * path,
uint8_t flags = 0 
)
-
-inlineinherited
-
-

List the directory contents of a directory to Serial.

-
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 FatFileSystem::ls (print_tpr,
uint8_t flags 
)
-
-inlineinherited
-
-

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 FatFileSystem::ls (print_tpr,
const char * path,
uint8_t flags 
)
-
-inlineinherited
-
-

List the directory contents of a directory.

-
Parameters
- - - - -
[in]prPrint stream for 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 FatFileSystem::mkdir (const char * path,
bool pFlag = true 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File FatFileSystem::open (const char * path,
uint8_t mode = FILE_READ 
)
-
-inlineinherited
-
-

open a file

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::rename (const char * oldPath,
const char * newPath 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::rmdir (const char * path)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::truncate (const char * path,
uint32_t length 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFileSystem::vol ()
-
-inlineinherited
-
-
Returns
a pointer to the FatVolume object.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - -
FatFile* FatFileSystem::vwd ()
-
-inlineinherited
-
-
Returns
a pointer to the volume working directory.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::wipe (print_tpr = 0)
-
-inlineinherited
-
-

Wipe all data from the volume. You must reinitialize the volume before accessing it again.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_fat__coll__graph.png b/libraries/SdFat/html/class_sd_fat__coll__graph.png deleted file mode 100644 index 5cc69f5d8522a34b6154956d4e821af7ba7017e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2786 zcmb_ec{tQtAOBe@*A1D7261)A)>xA@vdg{>*$HJSMaEpiNC=S`!X%8wWiEq|Fk>en z(#SL-8bbDEGz>*}-M9O`_qosgx96Pa`JU(eb-w4beec;?oAPjjxd8y+F}rAFe^B87 zz;=l1@WF|0SK50}4qvt~H3IhkT=neTI!hpQJ zzOB84NtzNdA;;0cQtlUdzUxvv>^11k@E2-D*bV1 z)@VNTMnHjsiR)13lv$UuQP z@jk6h+8WXPL!gCI@UZ>usm zGR>3CATNqRm+gO2{%==(8a61=_V=Jgv-1@|F_=#G&?mm`r$-UYIO_T;CxRm&s?Ru8z1Or9ZJ!wyzBabx@TXrp&w7*`# z$SF(oT-@F1Kp2Ie0g}C8oa?Q=Wnd(6x3!;Ro-J0co2_|drGP%AUKUh{ZM-#yA*Foe zQY&b*+T3}JqBvVB;IX4YR-!ITIG^p7*;bdtr0rxtchCL#$H} zX=hXj(EL@>chFyw%gJf&cMREG?+mPNA0%Nmp$UTJhk?@#lL?D~dYR*1z&vSlIg+rX zDr0JEz7nCh%0Cz{%-nPIhr{9DN;|9b^<`mow*}G*C+3e2h5}hd-hE5>vKj$SWRx%Q z8f*x{Us3tmP*A)PLy<{K+9x#J>_>M zYAftP*W+`T_xVAgaLd==0KuM8vZrjuOv)!dS9=fRDH&I1r~+fl%@rwIm{y^4I@kvB z+4FcPUJM<(w^>^y&DeN|r@x8AlTmin_=mom)A2C#)`)*={~`W^1HY3iojZbe}8$C zPNJhG&Az0>>%DXw2bae%EPKfF#-w$s zlAsN|X|C-PMCQmFb6kP$mLTk&U`fi6SW$#n=9vJ(;X9&28QEliNnz(9aWcABu)^Nh z$hv&-MLKLVLTj!dLg<0E41v-Q6?N=NetW`&f6}re%YFxi@>!V)V;0N9B6}T@vkktA z5hT(PNS%8zbMr^>w>dw>>)+uTM~FPKlfzNs>c@oUt9ICn7ZA^U|7S8kOb367sraR0 zuNz?Efh^h* zXfxvpW_%HfxlToa+BS-!EGYB*E4i*Znkt`N$+ju{wysT{=Ee4yY z7Fc>Rr-F$oUw!Jbh!_n<@nt=qDSFrIdfQzm5E*6<4P8)^-TmX_F{ebv9s76inh1aWM5;C zeaa5k@Cgf>s1(yiH`mo}bc~6kHkuI8J(&;MB<2PbQZ{HXpiREI`<0;%1SY*Q@`G??G1=BR z4t#(2_$7-L4o5iq`~Zh(@NGG)&}HJ)9@vbA0TChgHJa2EMTxwK#%GU)+(0>TK2CL$ z`kikZh5JtYl=)^Zr)ey)kIaQ$8AnZ?t(*>HBhW&&mQU!lRi%9XrQC{z)L4efBppP; z7Aab&z0|X`4Ap0+L~!JfmhTGk)w_vjdY}KeLsHGIu2ucIP9*N{UhxfFBgJ^#261k$ z;*I>i84f=^385}P1Da5iISdVVy+<+X+W*Ajd*=QSIYiTo7?Hr7yBZm_v(*~S7{3rw zRq<`dH|cfjk&p1C6}B~LRv!hYjiFE|$e>o_>Uc}4h6O1GavnW7RbT63%N zgNG|8nKQ3EN9%q6j;mrj^`6|ksEv@y)YMeNVR0yCEP}RaMNqcyjH71tWH@_c)fQt3 zUIt*rbEEOIv$G(F6`8|hi6rr6idzXEI5S2_NJxEo#Ez(8ZBPq!H&yN8ojtO0z+E*H zxwX=S0GDvO4=8Df9u9__vm~2hA;o605yEMje>k;tb}rN}wA3rxdr&t{jpb~JAnuE1 zVO*tycSBjKfz>o&qF!T1fAt*)?Db4fb+!X_{)_fgE9Y4Uy_1owvZ~oLbF;7WS`BYf p@_;N9SVSbMtybsC_jyoYZl5EJ3~^<6Vh)B@z|7d%sM5eY?mwNOKQ;gW diff --git a/libraries/SdFat/html/class_sd_fat__inherit__graph.png b/libraries/SdFat/html/class_sd_fat__inherit__graph.png deleted file mode 100644 index 5cc69f5d8522a34b6154956d4e821af7ba7017e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2786 zcmb_ec{tQtAOBe@*A1D7261)A)>xA@vdg{>*$HJSMaEpiNC=S`!X%8wWiEq|Fk>en z(#SL-8bbDEGz>*}-M9O`_qosgx96Pa`JU(eb-w4beec;?oAPjjxd8y+F}rAFe^B87 zz;=l1@WF|0SK50}4qvt~H3IhkT=neTI!hpQJ zzOB84NtzNdA;;0cQtlUdzUxvv>^11k@E2-D*bV1 z)@VNTMnHjsiR)13lv$UuQP z@jk6h+8WXPL!gCI@UZ>usm zGR>3CATNqRm+gO2{%==(8a61=_V=Jgv-1@|F_=#G&?mm`r$-UYIO_T;CxRm&s?Ru8z1Or9ZJ!wyzBabx@TXrp&w7*`# z$SF(oT-@F1Kp2Ie0g}C8oa?Q=Wnd(6x3!;Ro-J0co2_|drGP%AUKUh{ZM-#yA*Foe zQY&b*+T3}JqBvVB;IX4YR-!ITIG^p7*;bdtr0rxtchCL#$H} zX=hXj(EL@>chFyw%gJf&cMREG?+mPNA0%Nmp$UTJhk?@#lL?D~dYR*1z&vSlIg+rX zDr0JEz7nCh%0Cz{%-nPIhr{9DN;|9b^<`mow*}G*C+3e2h5}hd-hE5>vKj$SWRx%Q z8f*x{Us3tmP*A)PLy<{K+9x#J>_>M zYAftP*W+`T_xVAgaLd==0KuM8vZrjuOv)!dS9=fRDH&I1r~+fl%@rwIm{y^4I@kvB z+4FcPUJM<(w^>^y&DeN|r@x8AlTmin_=mom)A2C#)`)*={~`W^1HY3iojZbe}8$C zPNJhG&Az0>>%DXw2bae%EPKfF#-w$s zlAsN|X|C-PMCQmFb6kP$mLTk&U`fi6SW$#n=9vJ(;X9&28QEliNnz(9aWcABu)^Nh z$hv&-MLKLVLTj!dLg<0E41v-Q6?N=NetW`&f6}re%YFxi@>!V)V;0N9B6}T@vkktA z5hT(PNS%8zbMr^>w>dw>>)+uTM~FPKlfzNs>c@oUt9ICn7ZA^U|7S8kOb367sraR0 zuNz?Efh^h* zXfxvpW_%HfxlToa+BS-!EGYB*E4i*Znkt`N$+ju{wysT{=Ee4yY z7Fc>Rr-F$oUw!Jbh!_n<@nt=qDSFrIdfQzm5E*6<4P8)^-TmX_F{ebv9s76inh1aWM5;C zeaa5k@Cgf>s1(yiH`mo}bc~6kHkuI8J(&;MB<2PbQZ{HXpiREI`<0;%1SY*Q@`G??G1=BR z4t#(2_$7-L4o5iq`~Zh(@NGG)&}HJ)9@vbA0TChgHJa2EMTxwK#%GU)+(0>TK2CL$ z`kikZh5JtYl=)^Zr)ey)kIaQ$8AnZ?t(*>HBhW&&mQU!lRi%9XrQC{z)L4efBppP; z7Aab&z0|X`4Ap0+L~!JfmhTGk)w_vjdY}KeLsHGIu2ucIP9*N{UhxfFBgJ^#261k$ z;*I>i84f=^385}P1Da5iISdVVy+<+X+W*Ajd*=QSIYiTo7?Hr7yBZm_v(*~S7{3rw zRq<`dH|cfjk&p1C6}B~LRv!hYjiFE|$e>o_>Uc}4h6O1GavnW7RbT63%N zgNG|8nKQ3EN9%q6j;mrj^`6|ksEv@y)YMeNVR0yCEP}RaMNqcyjH71tWH@_c)fQt3 zUIt*rbEEOIv$G(F6`8|hi6rr6idzXEI5S2_NJxEo#Ez(8ZBPq!H&yN8ojtO0z+E*H zxwX=S0GDvO4=8Df9u9__vm~2hA;o605yEMje>k;tb}rN}wA3rxdr&t{jpb~JAnuE1 zVO*tycSBjKfz>o&qF!T1fAt*)?Db4fb+!X_{)_fgE9Y4Uy_1owvZ~oLbF;7WS`BYf p@_;N9SVSbMtybsC_jyoYZl5EJ3~^<6Vh)B@z|7d%sM5eY?mwNOKQ;gW diff --git a/libraries/SdFat/html/class_sd_fat_base-members.html b/libraries/SdFat/html/class_sd_fat_base-members.html deleted file mode 100644 index c3d4173..0000000 --- a/libraries/SdFat/html/class_sd_fat_base-members.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdFatBase Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)SdFatBaseinline
FatFileSystem::begin(uint8_t part=0)FatFileSysteminline
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
card()SdFatBaseinline
chdir(bool set_cwd=false)FatFileSysteminline
chdir(const char *path, bool set_cwd=false)FatFileSysteminline
chvol()FatFileSysteminline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
errorHalt()SdFatBaseinline
errorHalt(Print *pr)SdFatBase
errorHalt(char const *msg)SdFatBaseinline
errorHalt(Print *pr, char const *msg)SdFatBase
errorHalt(const __FlashStringHelper *msg)SdFatBaseinline
errorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
errorPrint()SdFatBaseinline
errorPrint(Print *pr)SdFatBase
errorPrint(const char *msg)SdFatBaseinline
errorPrint(Print *pr, char const *msg)SdFatBase
errorPrint(const __FlashStringHelper *msg)SdFatBaseinline
errorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
exists(const char *path)FatFileSysteminline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
fsBegin()SdFatBaseinline
init()FatVolumeinline
init(uint8_t part)FatVolume
initErrorHalt()SdFatBaseinline
initErrorHalt(Print *pr)SdFatBase
initErrorHalt(char const *msg)SdFatBaseinline
initErrorHalt(Print *pr, char const *msg)SdFatBase
initErrorHalt(const __FlashStringHelper *msg)SdFatBaseinline
initErrorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
initErrorPrint()SdFatBaseinline
initErrorPrint(Print *pr)SdFatBase
initErrorPrint(char const *msg)SdFatBaseinline
initErrorPrint(Print *pr, char const *msg)SdFatBase
initErrorPrint(const __FlashStringHelper *msg)SdFatBaseinline
initErrorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
ls(uint8_t flags=0)FatFileSysteminline
ls(const char *path, uint8_t flags=0)FatFileSysteminline
ls(print_t *pr, uint8_t flags)FatFileSysteminline
ls(print_t *pr, const char *path, uint8_t flags)FatFileSysteminline
mkdir(const char *path, bool pFlag=true)FatFileSysteminline
open(const char *path, uint8_t mode=FILE_READ)FatFileSysteminline
remove(const char *path)FatFileSysteminline
rename(const char *oldPath, const char *newPath)FatFileSysteminline
rmdir(const char *path)FatFileSysteminline
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
truncate(const char *path, uint32_t length)FatFileSysteminline
vol()FatFileSysteminline
volumeBlockCount() const FatVolumeinline
vwd()FatFileSysteminline
wipe(print_t *pr=0)FatFileSysteminline
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_base.html b/libraries/SdFat/html/class_sd_fat_base.html deleted file mode 100644 index 9cf1469..0000000 --- a/libraries/SdFat/html/class_sd_fat_base.html +++ /dev/null @@ -1,2129 +0,0 @@ - - - - - - -SdFat: SdFatBase Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdFatBase Class Reference
-
-
- -

Virtual base class for SdFat library. - More...

- -

#include <SdFat.h>

-
-Inheritance diagram for SdFatBase:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdFatBase:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t part=0)
 
bool begin (SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)
 
uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
SdSpiCardcard ()
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
void errorHalt ()
 
void errorHalt (Print *pr)
 
void errorHalt (char const *msg)
 
void errorHalt (Print *pr, char const *msg)
 
void errorHalt (const __FlashStringHelper *msg)
 
void errorHalt (Print *pr, const __FlashStringHelper *msg)
 
void errorPrint ()
 
void errorPrint (Print *pr)
 
void errorPrint (const char *msg)
 
void errorPrint (Print *pr, char const *msg)
 
void errorPrint (const __FlashStringHelper *msg)
 
void errorPrint (Print *pr, const __FlashStringHelper *msg)
 
bool exists (const char *path)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool fsBegin ()
 
bool init ()
 
bool init (uint8_t part)
 
void initErrorHalt ()
 
void initErrorHalt (Print *pr)
 
void initErrorHalt (char const *msg)
 
void initErrorHalt (Print *pr, char const *msg)
 
void initErrorHalt (const __FlashStringHelper *msg)
 
void initErrorHalt (Print *pr, const __FlashStringHelper *msg)
 
void initErrorPrint ()
 
void initErrorPrint (Print *pr)
 
void initErrorPrint (char const *msg)
 
void initErrorPrint (Print *pr, char const *msg)
 
void initErrorPrint (const __FlashStringHelper *msg)
 
void initErrorPrint (Print *pr, const __FlashStringHelper *msg)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags)
 
void ls (print_t *pr, const char *path, uint8_t flags)
 
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)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
bool truncate (const char *path, uint32_t length)
 
FatVolumevol ()
 
uint32_t volumeBlockCount () const
 
FatFilevwd ()
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

Virtual base class for SdFat library.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::begin (uint8_t part = 0)
-
-inlineinherited
-
-

Initialize an FatFileSystem object.

Parameters
- - -
[in]partpartition to initialize.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdFatBase::begin (SdSpiCard::m_spi_tspi,
uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Initialize SD card and file system.

Parameters
- - - - -
[in]spiSPI object for the card.
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
SdSpiCard* SdFatBase::card ()
-
-inline
-
-
Returns
Pointer to SD card object
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::chdir (bool set_cwd = false)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::chdir (const char * path,
bool set_cwd = false 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFileSystem::chvol ()
-
-inlineinherited
-
-

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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorHalt ()
-
-inline
-
-

Print any SD error code to Serial and halt.

- -
-
- -
-
- - - - - - - - -
void SdFatBase::errorHalt (Print * pr)
-
-

Print any SD error code and halt.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (char const * msg)
-
-inline
-
-

Print msg, any SD error code and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
char const * msg 
)
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (const __FlashStringHelper * msg)
-
-inline
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorPrint ()
-
-inline
-
-

Print any SD error code to Serial

- -
-
- -
-
- - - - - - - - -
void SdFatBase::errorPrint (Print * pr)
-
-

Print any SD error code.

Parameters
- - -
[in]prPrint device.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const char * msg)
-
-inline
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
char const * msg 
)
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const __FlashStringHelper * msg)
-
-inline
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file.

-
Parameters
- - -
[in]pathPath of the file to be tested for.
-
-
-
Returns
true if the file exists else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdFatBase::fsBegin ()
-
-inline
-
-

Diagnostic call to initialize FatFileSystem - use for diagnostic purposes only.

Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorHalt ()
-
-inline
-
-

Print any SD error code and halt.

- -
-
- -
-
- - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr)
-
-

Print error details and halt after begin fails.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (char const * msg)
-
-inline
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
char const * msg 
)
-
-

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

Parameters
- - - -
[in]prPrint device.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (const __FlashStringHelper * msg)
-
-inline
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-

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

Parameters
- - - -
[in]prPrint device for message.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorPrint ()
-
-inline
-
-

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

- -
-
- -
-
- - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr)
-
-

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

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (char const * msg)
-
-inline
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
char const * msg 
)
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (const __FlashStringHelper * msg)
-
-inline
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFileSystem::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

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

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFileSystem::ls (const char * path,
uint8_t flags = 0 
)
-
-inlineinherited
-
-

List the directory contents of a directory to Serial.

-
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 FatFileSystem::ls (print_tpr,
uint8_t flags 
)
-
-inlineinherited
-
-

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 FatFileSystem::ls (print_tpr,
const char * path,
uint8_t flags 
)
-
-inlineinherited
-
-

List the directory contents of a directory.

-
Parameters
- - - - -
[in]prPrint stream for 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 FatFileSystem::mkdir (const char * path,
bool pFlag = true 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File FatFileSystem::open (const char * path,
uint8_t mode = FILE_READ 
)
-
-inlineinherited
-
-

open a file

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::rename (const char * oldPath,
const char * newPath 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::rmdir (const char * path)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::truncate (const char * path,
uint32_t length 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFileSystem::vol ()
-
-inlineinherited
-
-
Returns
a pointer to the FatVolume object.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - -
FatFile* FatFileSystem::vwd ()
-
-inlineinherited
-
-
Returns
a pointer to the volume working directory.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::wipe (print_tpr = 0)
-
-inlineinherited
-
-

Wipe all data from the volume. You must reinitialize the volume before accessing it again.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
  • Arduino/libraries/SdFat/SdFatBase.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_base__coll__graph.png b/libraries/SdFat/html/class_sd_fat_base__coll__graph.png deleted file mode 100644 index 686de372b9834a1c22da16819cf3500b0bcbc987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2027 zcmb_dc{JPU8vaFF!PI)~l-g?xYNyl^#IC7W8*8bEQX%%DjA>M-N#ByvM^or$$HM>m?RU6pkXABvj&d^6QkJHmKxF)AtFC@S;GjQeL zC>baZEm6S1x={Hr0X7;@y}mL)-y@`KrvwBn5=w47CD7aGt-2E*IDQBe|5krf{rQLr zL>4{7y~v#br4+<7pTpMyBhJr@8PWGOt3lE>(T1;HH5yCIN6Vy(atq*#a90$Z)Z~=$ z0)-ARg*WDfoFH$zWRvTqf&Ie`jZ7{%k>0fPs!By4T_EilbAIjQ`7s1(*ZJtCMH|}4 z^U|1!{r1seUJEs-dcr^Cd$smWL-iLS4T;ejF-;)^dO_n3%{F5C%j;e?=4ww&II=(V z66N)RgwvAt%c6Srv`=viD*xrDiaa=S9!(V7$wZ9Zfj{`W)$)iVGvU~6^aXL(pY$`t z_hnyB4{S1yp#&ElTBBUFf;n$1GZlW(`?TQwC~iYHg66~fe9130SNcbHt3Q5&vsdb> z6oS9QE`b0~M_h2kEu&bDvf#rRKD0@8-h(oREwfv4t{|MHTXA>Fj!N6GrP6BZN8gG) zi`ndmG$sy!EQJ3dw1GOe9$(Bu8_5Jy3=tK^fE#|(V|k{k0&oG& zr;DwAr>MwRrvuIb?m9f5orp15*YP@1md{e#ZP`_k4pc;YEIN)#FFT7bw3zv>AYY}XiX%yavEL#g3An7xv>VCDE66e&R%6Xmx$~Lw7lr(lGs3VUH>~F7 zPx;i6rW(@~Z!f~!qbJZ-GIEbd+v&=*b}oh?kx0R|D$jE})Di~jQG#aoK&QP&}uNzpT; z-yP@#7tP1F1jD&?YQO(4d4v8B^qNo};AOcFmMAvSFV&T_NzPcj(y`-xt$ewJ9}L_F zm9soqcs%&o)tU@nz%R#;FDbugY6+v`@b;khyeU!W&o}fX&3exco2cWexGCFR^-MZa ztolRG_`I0~L?v#D6nRNNz#dsDUP7y?U^%D;vwoV`BLbDov#l_E8kGWoS| zi!r{n&#H0@J;+rNxg7A#%Tl6f2D@-~;*;y61XK`pi+*vYUzIK{C+NR8QkU%!orn42 zkge&dn8qjw5_w+{rlDe9w&&}Us2V8iooqY$bd5<RVPa`acIv^EwylSKXz=CU@f}HEZmNY8p)cUR@l$h0h{Ywu{-lEivM_FL#V+E4>^0Vy= zCDy=Nj}#J~#<8KFej`;bfha!|;pCKZYiqFLupOdxym@P1)bxi#ppAzB74WGq^_*O_ zx!EGt_8lRIKd##t0bK-YNYZ5`2OC+819x89NOpFXJrD&F5bPKx2D=|C%w_n6SKNu& zKNc;w1s1Fqn5U9zry4#4qZwi#BLjWx(R{ipg0E@h{d+V8_nC{ewoK}qWU+d)(ox^& z3*pzsS-e}kPzFwZO~^?T0j1Og=}p(&vnC9@C0iD30re-NQWWyNt54LPa$pAIUE0d= zk~WwtP!D83RGUOvKOA^3RtL9%E+DWGZ`5>GcXK=0@GWrFNNsI*1xXw;Ay1ZnqVyv? zyoF3O@NZCbopi%D-htN%_pM*Bd6+_NgKVx#BSAZM7VI^B+-I%!5{aszNUd-(wvgSX zW#N+=Z~A*!{wrSo^xl7_&i_c?`>K+7>Wy^zqC;O5M&>em)hK?}ZN!zp|K9ddaSrPArQ|o5>>`>;-O)S`6TG$i~IWqn- z+1N!MPBaQTaAsW>lS8@t#envdu1|`wd2@Bn%wVfGKrP9X`uNR%FArG@gJroC%y<8WHSYS0M&@(V=1e>yhs& z|8n{t>cbwII;dNWOO4Id%}xE(d#;Kz{VHI~)1_T-a0bL)eXD)8Q~PY@<7430TZ+Z# T2k)Fuwl`pJ;{t843dr~k^i#yb diff --git a/libraries/SdFat/html/class_sd_fat_base__inherit__graph.png b/libraries/SdFat/html/class_sd_fat_base__inherit__graph.png deleted file mode 100644 index 0498757eacb0dd53fdb96a1c59b3c089ec816363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6594 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 - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdFatLibSpi Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(uint8_t csPin=SS, uint8_t divisor=2)SdFatLibSpiinline
SdFatBase::begin(SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)SdFatBaseinline
FatFileSystem::begin(uint8_t part=0)FatFileSysteminline
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
card()SdFatBaseinline
cardBegin(uint8_t csPin=SS, uint8_t divisor=2)SdFatLibSpiinline
chdir(bool set_cwd=false)FatFileSysteminline
chdir(const char *path, bool set_cwd=false)FatFileSysteminline
chvol()FatFileSysteminline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
errorHalt()SdFatBaseinline
errorHalt(Print *pr)SdFatBase
errorHalt(char const *msg)SdFatBaseinline
errorHalt(Print *pr, char const *msg)SdFatBase
errorHalt(const __FlashStringHelper *msg)SdFatBaseinline
errorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
errorPrint()SdFatBaseinline
errorPrint(Print *pr)SdFatBase
errorPrint(const char *msg)SdFatBaseinline
errorPrint(Print *pr, char const *msg)SdFatBase
errorPrint(const __FlashStringHelper *msg)SdFatBaseinline
errorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
exists(const char *path)FatFileSysteminline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
fsBegin()SdFatBaseinline
init()FatVolumeinline
init(uint8_t part)FatVolume
initErrorHalt()SdFatBaseinline
initErrorHalt(Print *pr)SdFatBase
initErrorHalt(char const *msg)SdFatBaseinline
initErrorHalt(Print *pr, char const *msg)SdFatBase
initErrorHalt(const __FlashStringHelper *msg)SdFatBaseinline
initErrorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
initErrorPrint()SdFatBaseinline
initErrorPrint(Print *pr)SdFatBase
initErrorPrint(char const *msg)SdFatBaseinline
initErrorPrint(Print *pr, char const *msg)SdFatBase
initErrorPrint(const __FlashStringHelper *msg)SdFatBaseinline
initErrorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
ls(uint8_t flags=0)FatFileSysteminline
ls(const char *path, uint8_t flags=0)FatFileSysteminline
ls(print_t *pr, uint8_t flags)FatFileSysteminline
ls(print_t *pr, const char *path, uint8_t flags)FatFileSysteminline
mkdir(const char *path, bool pFlag=true)FatFileSysteminline
open(const char *path, uint8_t mode=FILE_READ)FatFileSysteminline
remove(const char *path)FatFileSysteminline
rename(const char *oldPath, const char *newPath)FatFileSysteminline
rmdir(const char *path)FatFileSysteminline
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
truncate(const char *path, uint32_t length)FatFileSysteminline
vol()FatFileSysteminline
volumeBlockCount() const FatVolumeinline
vwd()FatFileSysteminline
wipe(print_t *pr=0)FatFileSysteminline
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_lib_spi.html b/libraries/SdFat/html/class_sd_fat_lib_spi.html deleted file mode 100644 index b8626b7..0000000 --- a/libraries/SdFat/html/class_sd_fat_lib_spi.html +++ /dev/null @@ -1,2313 +0,0 @@ - - - - - - -SdFat: SdFatLibSpi Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdFatLibSpi Class Reference
-
-
- -

SdFat class using the standard Arduino SPI library. - More...

- -

#include <SdFat.h>

-
-Inheritance diagram for SdFatLibSpi:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdFatLibSpi:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t part=0)
 
bool begin (SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)
 
bool begin (uint8_t csPin=SS, uint8_t divisor=2)
 
uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
SdSpiCardcard ()
 
bool cardBegin (uint8_t csPin=SS, uint8_t divisor=2)
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
void errorHalt ()
 
void errorHalt (Print *pr)
 
void errorHalt (char const *msg)
 
void errorHalt (Print *pr, char const *msg)
 
void errorHalt (const __FlashStringHelper *msg)
 
void errorHalt (Print *pr, const __FlashStringHelper *msg)
 
void errorPrint ()
 
void errorPrint (Print *pr)
 
void errorPrint (const char *msg)
 
void errorPrint (Print *pr, char const *msg)
 
void errorPrint (const __FlashStringHelper *msg)
 
void errorPrint (Print *pr, const __FlashStringHelper *msg)
 
bool exists (const char *path)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool fsBegin ()
 
bool init ()
 
bool init (uint8_t part)
 
void initErrorHalt ()
 
void initErrorHalt (Print *pr)
 
void initErrorHalt (char const *msg)
 
void initErrorHalt (Print *pr, char const *msg)
 
void initErrorHalt (const __FlashStringHelper *msg)
 
void initErrorHalt (Print *pr, const __FlashStringHelper *msg)
 
void initErrorPrint ()
 
void initErrorPrint (Print *pr)
 
void initErrorPrint (char const *msg)
 
void initErrorPrint (Print *pr, char const *msg)
 
void initErrorPrint (const __FlashStringHelper *msg)
 
void initErrorPrint (Print *pr, const __FlashStringHelper *msg)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags)
 
void ls (print_t *pr, const char *path, uint8_t flags)
 
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)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
bool truncate (const char *path, uint32_t length)
 
FatVolumevol ()
 
uint32_t volumeBlockCount () const
 
FatFilevwd ()
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

SdFat class using the standard Arduino SPI library.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::begin (uint8_t part = 0)
-
-inlineinherited
-
-

Initialize an FatFileSystem object.

Parameters
- - -
[in]partpartition to initialize.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdFatBase::begin (SdSpiCard::m_spi_tspi,
uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inlineinherited
-
-

Initialize SD card and file system.

Parameters
- - - - -
[in]spiSPI object for the card.
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFatLibSpi::begin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Initialize SD card and file system.

-
Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
SdSpiCard* SdFatBase::card ()
-
-inlineinherited
-
-
Returns
Pointer to SD card object
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFatLibSpi::cardBegin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Diagnostic call to initialize SD card - use for diagnostic purposes only.

Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::chdir (bool set_cwd = false)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::chdir (const char * path,
bool set_cwd = false 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFileSystem::chvol ()
-
-inlineinherited
-
-

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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorHalt ()
-
-inlineinherited
-
-

Print any SD error code to Serial and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (Print * pr)
-
-inherited
-
-

Print any SD error code and halt.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (char const * msg)
-
-inlineinherited
-
-

Print msg, any SD error code and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorPrint ()
-
-inlineinherited
-
-

Print any SD error code to Serial

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (Print * pr)
-
-inherited
-
-

Print any SD error code.

Parameters
- - -
[in]prPrint device.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const char * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file.

-
Parameters
- - -
[in]pathPath of the file to be tested for.
-
-
-
Returns
true if the file exists else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdFatBase::fsBegin ()
-
-inlineinherited
-
-

Diagnostic call to initialize FatFileSystem - use for diagnostic purposes only.

Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorHalt ()
-
-inlineinherited
-
-

Print any SD error code and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr)
-
-inherited
-
-

Print error details and halt after begin fails.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device for message.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorPrint ()
-
-inlineinherited
-
-

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

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr)
-
-inherited
-
-

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

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFileSystem::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

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

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFileSystem::ls (const char * path,
uint8_t flags = 0 
)
-
-inlineinherited
-
-

List the directory contents of a directory to Serial.

-
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 FatFileSystem::ls (print_tpr,
uint8_t flags 
)
-
-inlineinherited
-
-

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 FatFileSystem::ls (print_tpr,
const char * path,
uint8_t flags 
)
-
-inlineinherited
-
-

List the directory contents of a directory.

-
Parameters
- - - - -
[in]prPrint stream for 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 FatFileSystem::mkdir (const char * path,
bool pFlag = true 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File FatFileSystem::open (const char * path,
uint8_t mode = FILE_READ 
)
-
-inlineinherited
-
-

open a file

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::rename (const char * oldPath,
const char * newPath 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::rmdir (const char * path)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::truncate (const char * path,
uint32_t length 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFileSystem::vol ()
-
-inlineinherited
-
-
Returns
a pointer to the FatVolume object.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - -
FatFile* FatFileSystem::vwd ()
-
-inlineinherited
-
-
Returns
a pointer to the volume working directory.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::wipe (print_tpr = 0)
-
-inlineinherited
-
-

Wipe all data from the volume. You must reinitialize the volume before accessing it again.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_lib_spi__coll__graph.png b/libraries/SdFat/html/class_sd_fat_lib_spi__coll__graph.png deleted file mode 100644 index 564f5e0f5f4f666d538d65efade102ef2b7b8f21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2860 zcmb`Jc{tSDAIHB$WUCZ~EKSzzvKvf7n6eHbOU$)zk+Fu1W|Ap;*3ejU zh2fIMPWI77m}&UA-QRs~fBgQtzvq0O=bY#B$9c~AeBQ73IVf|}>zr)-Yybdo8XM_b z9?b{)r^CPrP?@{HqSi!s{$k{LB%ilzXUuw~pIT8}OD$iDO2(ncFQ zdG^t_OT0bV29EU>bPz|*)tL^_?oJHu2O<`|2#S#!&_b)PCsv}hRU+}+p`R>aPSvR|D!odL47w+r;CpGg9+xneK7-x*WcsxBdh7|-@nyB8 z&KRa2_ee4pd;fyl)$)WQ?g1(A8C5;@o(c&Lo|T$nXo}mJ608m8Cb!VbLNv8*pMq8_ z7cy)6>L8ohr{7Ch!5sUMM8BD2r{$3xa8NUjo#rWAJ+uQTp?Y z_Bi^%%fe&xNl7XC*(ecP`*wDn*&v2ju#vXpSW)_-5iIbN7li9#7TyE6`Kbl?7_dR6 z1x29VjKWtoHGwtf6l6TiO{@h!0FSB3I;RDhAsTGhCNBJC_Nzsq zqXSR;@C_pO7e;o?i7XqKE8cU1b;{=+(Na5@GnYfF;6DnQ1JnCkFF)7$-=+PzxfpF9 z918ILu8Bsk4~vYgXr~^>78){llDB38f!lyNU79{S>o;{#xlIgUDZVo7KmYaRqN}1e z=v&s+kQ+bs8_`wuz7e5no-N)aXB8kI9P0Q~GXQ=ogoTKbqUq0p{9g1EF#Z9yRI&FZ zq)qFzO|Xc@g7}El3$${(wv4^_M%3h9#_Y%LKbEL9<{nh^aUQZuAVtjG&c@MeU7|+A zx6~*qd?huxwVUR0!>yAQRj-NV<*Y`*VGe}M?jVCdSY&Y(mjhw1qP@g75z(^ZmY*v1T(F%a=7qEP&>jF$-36JU|G#4dJ-YPr#wz%(UU9;v3OiRoX?3e zc7%8IU2t8_KBD=r?mSjCM|Rnrx!q3&0N>n8=r;Dpsx9Lorb*qFpOsFh;8%7X zyXM(!a3GKe3<2%EOhYzrnZ0H25zMrdkodxd1I<+%Wa+D0DU^`fAcf9RZ*#z2*R7ql z&$?pF4-BPP=hvU`pbi$7WQt;ddHM{;>83BLN*Ehtv&MRe{E+i5v(Yfcz3Xq6`FHC7 zuT}lDiP4ioQ3{}b;!YFRmjBBEy;YFmH97Qx#=ds!M1_EM!p_N<8rUrCwX{GoY%~fxniV|_{!TRou)V_`FdR2Vq zkckYPdnha7jJWn#v$s7OyROu%uxdB&mZkF02Ny2X{tUr^{w<@svVNDlN(OfT-m$hD zRo6j!2g5O2#j9B38!sC@WoB|j-NGIH)DkG$dD}e|dP8Nk8`R25Q*z)uRu(gbT_H5U zt5%@UHj?4eBpclQwMB+&6q@2S!m&os1whm34BZ)27divyhdCP-FFvq6D zflE9qciYFt4#--eLJ{{|X6SV~-#6<5XsHqsF@`-cjb%et*$m&Ydf^^xV}WZDz%P-J zhgX5psIFnHffb z*)xNQ@o~R3{1CoDunkjRU?0p4#?-aD_I6L|_rSNYmfo!~{?bKLRz%NU@42Jnt;k3w znwto6)JC&FY~*1h3=5JumUz~dTzJiC5%sY!1))uPt1|laYlUxBU%wvGk@U~gg!s4v zb=K{InG5NICmp)nNk#;nj?1aZY|y{ihbF>8<~@v z+rH43oy>d1B#2H$IJ^xiG3V35{sUY7=LXlEkQo8LCPR z!$YI}_BOvZ`HA~If}$+)r}%48W`yL-tOtb29K*RT5;inUo!l^n)6s>5Kj){{dL`0Q zi2MIwb4D%ABw5VA8T_VG(5kBQ%cW`W1S2?*9kW`(CX8 diff --git a/libraries/SdFat/html/class_sd_fat_lib_spi__inherit__graph.png b/libraries/SdFat/html/class_sd_fat_lib_spi__inherit__graph.png deleted file mode 100644 index 564f5e0f5f4f666d538d65efade102ef2b7b8f21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2860 zcmb`Jc{tSDAIHB$WUCZ~EKSzzvKvf7n6eHbOU$)zk+Fu1W|Ap;*3ejU zh2fIMPWI77m}&UA-QRs~fBgQtzvq0O=bY#B$9c~AeBQ73IVf|}>zr)-Yybdo8XM_b z9?b{)r^CPrP?@{HqSi!s{$k{LB%ilzXUuw~pIT8}OD$iDO2(ncFQ zdG^t_OT0bV29EU>bPz|*)tL^_?oJHu2O<`|2#S#!&_b)PCsv}hRU+}+p`R>aPSvR|D!odL47w+r;CpGg9+xneK7-x*WcsxBdh7|-@nyB8 z&KRa2_ee4pd;fyl)$)WQ?g1(A8C5;@o(c&Lo|T$nXo}mJ608m8Cb!VbLNv8*pMq8_ z7cy)6>L8ohr{7Ch!5sUMM8BD2r{$3xa8NUjo#rWAJ+uQTp?Y z_Bi^%%fe&xNl7XC*(ecP`*wDn*&v2ju#vXpSW)_-5iIbN7li9#7TyE6`Kbl?7_dR6 z1x29VjKWtoHGwtf6l6TiO{@h!0FSB3I;RDhAsTGhCNBJC_Nzsq zqXSR;@C_pO7e;o?i7XqKE8cU1b;{=+(Na5@GnYfF;6DnQ1JnCkFF)7$-=+PzxfpF9 z918ILu8Bsk4~vYgXr~^>78){llDB38f!lyNU79{S>o;{#xlIgUDZVo7KmYaRqN}1e z=v&s+kQ+bs8_`wuz7e5no-N)aXB8kI9P0Q~GXQ=ogoTKbqUq0p{9g1EF#Z9yRI&FZ zq)qFzO|Xc@g7}El3$${(wv4^_M%3h9#_Y%LKbEL9<{nh^aUQZuAVtjG&c@MeU7|+A zx6~*qd?huxwVUR0!>yAQRj-NV<*Y`*VGe}M?jVCdSY&Y(mjhw1qP@g75z(^ZmY*v1T(F%a=7qEP&>jF$-36JU|G#4dJ-YPr#wz%(UU9;v3OiRoX?3e zc7%8IU2t8_KBD=r?mSjCM|Rnrx!q3&0N>n8=r;Dpsx9Lorb*qFpOsFh;8%7X zyXM(!a3GKe3<2%EOhYzrnZ0H25zMrdkodxd1I<+%Wa+D0DU^`fAcf9RZ*#z2*R7ql z&$?pF4-BPP=hvU`pbi$7WQt;ddHM{;>83BLN*Ehtv&MRe{E+i5v(Yfcz3Xq6`FHC7 zuT}lDiP4ioQ3{}b;!YFRmjBBEy;YFmH97Qx#=ds!M1_EM!p_N<8rUrCwX{GoY%~fxniV|_{!TRou)V_`FdR2Vq zkckYPdnha7jJWn#v$s7OyROu%uxdB&mZkF02Ny2X{tUr^{w<@svVNDlN(OfT-m$hD zRo6j!2g5O2#j9B38!sC@WoB|j-NGIH)DkG$dD}e|dP8Nk8`R25Q*z)uRu(gbT_H5U zt5%@UHj?4eBpclQwMB+&6q@2S!m&os1whm34BZ)27divyhdCP-FFvq6D zflE9qciYFt4#--eLJ{{|X6SV~-#6<5XsHqsF@`-cjb%et*$m&Ydf^^xV}WZDz%P-J zhgX5psIFnHffb z*)xNQ@o~R3{1CoDunkjRU?0p4#?-aD_I6L|_rSNYmfo!~{?bKLRz%NU@42Jnt;k3w znwto6)JC&FY~*1h3=5JumUz~dTzJiC5%sY!1))uPt1|laYlUxBU%wvGk@U~gg!s4v zb=K{InG5NICmp)nNk#;nj?1aZY|y{ihbF>8<~@v z+rH43oy>d1B#2H$IJ^xiG3V35{sUY7=LXlEkQo8LCPR z!$YI}_BOvZ`HA~If}$+)r}%48W`yL-tOtb29K*RT5;inUo!l^n)6s>5Kj){{dL`0Q zi2MIwb4D%ABw5VA8T_VG(5kBQ%cW`W1S2?*9kW`(CX8 diff --git a/libraries/SdFat/html/class_sd_fat_soft_spi-members.html b/libraries/SdFat/html/class_sd_fat_soft_spi-members.html deleted file mode 100644 index 2c27903..0000000 --- a/libraries/SdFat/html/class_sd_fat_soft_spi-members.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdFatSoftSpi< MisoPin, MosiPin, SckPin > Member List
-
-
- -

This is the complete list of members for SdFatSoftSpi< MisoPin, MosiPin, SckPin >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(uint8_t csPin=SS, uint8_t divisor=2)SdFatSoftSpi< MisoPin, MosiPin, SckPin >inline
SdFatBase::begin(SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)SdFatBaseinline
FatFileSystem::begin(uint8_t part=0)FatFileSysteminline
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
card()SdFatBaseinline
cardBegin(uint8_t csPin=SS, uint8_t divisor=2)SdFatSoftSpi< MisoPin, MosiPin, SckPin >inline
chdir(bool set_cwd=false)FatFileSysteminline
chdir(const char *path, bool set_cwd=false)FatFileSysteminline
chvol()FatFileSysteminline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
errorHalt()SdFatBaseinline
errorHalt(Print *pr)SdFatBase
errorHalt(char const *msg)SdFatBaseinline
errorHalt(Print *pr, char const *msg)SdFatBase
errorHalt(const __FlashStringHelper *msg)SdFatBaseinline
errorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
errorPrint()SdFatBaseinline
errorPrint(Print *pr)SdFatBase
errorPrint(const char *msg)SdFatBaseinline
errorPrint(Print *pr, char const *msg)SdFatBase
errorPrint(const __FlashStringHelper *msg)SdFatBaseinline
errorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
exists(const char *path)FatFileSysteminline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
fsBegin()SdFatBaseinline
init()FatVolumeinline
init(uint8_t part)FatVolume
initErrorHalt()SdFatBaseinline
initErrorHalt(Print *pr)SdFatBase
initErrorHalt(char const *msg)SdFatBaseinline
initErrorHalt(Print *pr, char const *msg)SdFatBase
initErrorHalt(const __FlashStringHelper *msg)SdFatBaseinline
initErrorHalt(Print *pr, const __FlashStringHelper *msg)SdFatBase
initErrorPrint()SdFatBaseinline
initErrorPrint(Print *pr)SdFatBase
initErrorPrint(char const *msg)SdFatBaseinline
initErrorPrint(Print *pr, char const *msg)SdFatBase
initErrorPrint(const __FlashStringHelper *msg)SdFatBaseinline
initErrorPrint(Print *pr, const __FlashStringHelper *msg)SdFatBase
ls(uint8_t flags=0)FatFileSysteminline
ls(const char *path, uint8_t flags=0)FatFileSysteminline
ls(print_t *pr, uint8_t flags)FatFileSysteminline
ls(print_t *pr, const char *path, uint8_t flags)FatFileSysteminline
mkdir(const char *path, bool pFlag=true)FatFileSysteminline
open(const char *path, uint8_t mode=FILE_READ)FatFileSysteminline
remove(const char *path)FatFileSysteminline
rename(const char *oldPath, const char *newPath)FatFileSysteminline
rmdir(const char *path)FatFileSysteminline
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
truncate(const char *path, uint32_t length)FatFileSysteminline
vol()FatFileSysteminline
volumeBlockCount() const FatVolumeinline
vwd()FatFileSysteminline
wipe(print_t *pr=0)FatFileSysteminline
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_soft_spi.html b/libraries/SdFat/html/class_sd_fat_soft_spi.html deleted file mode 100644 index ee61c79..0000000 --- a/libraries/SdFat/html/class_sd_fat_soft_spi.html +++ /dev/null @@ -1,2320 +0,0 @@ - - - - - - -SdFat: SdFatSoftSpi< MisoPin, MosiPin, SckPin > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdFatSoftSpi< MisoPin, MosiPin, SckPin > Class Template Reference
-
-
- -

SdFat class using software SPI. - More...

- -

#include <SdFat.h>

-
-Inheritance diagram for SdFatSoftSpi< MisoPin, MosiPin, SckPin >:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdFatSoftSpi< MisoPin, MosiPin, SckPin >:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (uint8_t part=0)
 
bool begin (SdSpiCard::m_spi_t *spi, uint8_t csPin=SS, uint8_t divisor=2)
 
bool begin (uint8_t csPin=SS, uint8_t divisor=2)
 
uint8_t blocksPerCluster () const
 
uint32_t blocksPerFat () const
 
cache_tcacheClear ()
 
SdSpiCardcard ()
 
bool cardBegin (uint8_t csPin=SS, uint8_t divisor=2)
 
bool chdir (bool set_cwd=false)
 
bool chdir (const char *path, bool set_cwd=false)
 
void chvol ()
 
uint32_t clusterCount () const
 
uint8_t clusterSizeShift () const
 
uint32_t dataStartBlock () const
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
void errorHalt ()
 
void errorHalt (Print *pr)
 
void errorHalt (char const *msg)
 
void errorHalt (Print *pr, char const *msg)
 
void errorHalt (const __FlashStringHelper *msg)
 
void errorHalt (Print *pr, const __FlashStringHelper *msg)
 
void errorPrint ()
 
void errorPrint (Print *pr)
 
void errorPrint (const char *msg)
 
void errorPrint (Print *pr, char const *msg)
 
void errorPrint (const __FlashStringHelper *msg)
 
void errorPrint (Print *pr, const __FlashStringHelper *msg)
 
bool exists (const char *path)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool fsBegin ()
 
bool init ()
 
bool init (uint8_t part)
 
void initErrorHalt ()
 
void initErrorHalt (Print *pr)
 
void initErrorHalt (char const *msg)
 
void initErrorHalt (Print *pr, char const *msg)
 
void initErrorHalt (const __FlashStringHelper *msg)
 
void initErrorHalt (Print *pr, const __FlashStringHelper *msg)
 
void initErrorPrint ()
 
void initErrorPrint (Print *pr)
 
void initErrorPrint (char const *msg)
 
void initErrorPrint (Print *pr, char const *msg)
 
void initErrorPrint (const __FlashStringHelper *msg)
 
void initErrorPrint (Print *pr, const __FlashStringHelper *msg)
 
void ls (uint8_t flags=0)
 
void ls (const char *path, uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags)
 
void ls (print_t *pr, const char *path, uint8_t flags)
 
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)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
bool truncate (const char *path, uint32_t length)
 
FatVolumevol ()
 
uint32_t volumeBlockCount () const
 
FatFilevwd ()
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
-class SdFatSoftSpi< MisoPin, MosiPin, SckPin >

- -

SdFat class using software SPI.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::begin (uint8_t part = 0)
-
-inlineinherited
-
-

Initialize an FatFileSystem object.

Parameters
- - -
[in]partpartition to initialize.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdFatBase::begin (SdSpiCard::m_spi_tspi,
uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inlineinherited
-
-

Initialize SD card and file system.

Parameters
- - - - -
[in]spiSPI object for the card.
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFatSoftSpi< MisoPin, MosiPin, SckPin >::begin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Initialize SD card and file system.

-
Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
SdSpiCard* SdFatBase::card ()
-
-inlineinherited
-
-
Returns
Pointer to SD card object
- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdFatSoftSpi< MisoPin, MosiPin, SckPin >::cardBegin (uint8_t csPin = SS,
uint8_t divisor = 2 
)
-
-inline
-
-

Diagnostic call to initialize SD card - use for diagnostic purposes only.

Parameters
- - - -
[in]csPinSD card chip select pin.
[in]divisorSPI divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::chdir (bool set_cwd = false)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::chdir (const char * path,
bool set_cwd = false 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFileSystem::chvol ()
-
-inlineinherited
-
-

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.

- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorHalt ()
-
-inlineinherited
-
-

Print any SD error code to Serial and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (Print * pr)
-
-inherited
-
-

Print any SD error code and halt.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (char const * msg)
-
-inlineinherited
-
-

Print msg, any SD error code and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code, and halt.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::errorPrint ()
-
-inlineinherited
-
-

Print any SD error code to Serial

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (Print * pr)
-
-inherited
-
-

Print any SD error code.

Parameters
- - -
[in]prPrint device.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const char * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::errorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

Print msg, any SD error code.

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::errorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

Print msg, any SD error code.

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file.

-
Parameters
- - -
[in]pathPath of the file to be tested for.
-
-
-
Returns
true if the file exists else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

Volume free space in clusters.

-
Returns
Count of free clusters for success or -1 if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdFatBase::fsBegin ()
-
-inlineinherited
-
-

Diagnostic call to initialize FatFileSystem - use for diagnostic purposes only.

Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorHalt ()
-
-inlineinherited
-
-

Print any SD error code and halt.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr)
-
-inherited
-
-

Print error details and halt after begin fails.

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorHalt (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorHalt (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

Parameters
- - - -
[in]prPrint device for message.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void SdFatBase::initErrorPrint ()
-
-inlineinherited
-
-

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

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr)
-
-inherited
-
-

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

-
Parameters
- - -
[in]prPrint destination.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (char const * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
char const * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdFatBase::initErrorPrint (const __FlashStringHelper * msg)
-
-inlineinherited
-
-

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

-
Parameters
- - -
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdFatBase::initErrorPrint (Print * pr,
const __FlashStringHelper * msg 
)
-
-inherited
-
-

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

-
Parameters
- - - -
[in]prPrint destination.
[in]msgMessage to print.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFileSystem::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

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

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFileSystem::ls (const char * path,
uint8_t flags = 0 
)
-
-inlineinherited
-
-

List the directory contents of a directory to Serial.

-
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 FatFileSystem::ls (print_tpr,
uint8_t flags 
)
-
-inlineinherited
-
-

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 FatFileSystem::ls (print_tpr,
const char * path,
uint8_t flags 
)
-
-inlineinherited
-
-

List the directory contents of a directory.

-
Parameters
- - - - -
[in]prPrint stream for 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 FatFileSystem::mkdir (const char * path,
bool pFlag = true 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
File FatFileSystem::open (const char * path,
uint8_t mode = FILE_READ 
)
-
-inlineinherited
-
-

open a file

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

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::rename (const char * oldPath,
const char * newPath 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::rmdir (const char * path)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFileSystem::truncate (const char * path,
uint32_t length 
)
-
-inlineinherited
-
-

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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFileSystem::vol ()
-
-inlineinherited
-
-
Returns
a pointer to the FatVolume object.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - -
FatFile* FatFileSystem::vwd ()
-
-inlineinherited
-
-
Returns
a pointer to the volume working directory.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFileSystem::wipe (print_tpr = 0)
-
-inlineinherited
-
-

Wipe all data from the volume. You must reinitialize the volume before accessing it again.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_fat_soft_spi__coll__graph.png b/libraries/SdFat/html/class_sd_fat_soft_spi__coll__graph.png deleted file mode 100644 index 6b95d4e166d151a212fa250de9f27bcff2f36468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3379 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 - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdFile Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()PrintFileinline
clearError()FatFileinline
clearWriteError()FatFileinline
close()FatFile
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFile
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFile
curCluster() const FatFileinline
curPosition() const FatFileinline
cwd()FatFileinlinestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlinestatic
dateTimeCallbackCancel()FatFileinlinestatic
dirEntry(dir_t *dir)FatFile
dirIndex()FatFileinline
dirName(const dir_t *dir, char *name)FatFilestatic
dirSize()FatFile
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFile
exists(const char *path)FatFileinline
FatFile()FatFileinline
FatFile(const char *path, uint8_t oflag)FatFileinline
fgets(char *str, int16_t num, char *delim=0)FatFile
fileAttr() const FatFileinline
fileSize() const FatFileinline
firstCluster() const FatFileinline
flush()PrintFileinline
getError()FatFileinline
getName(char *name, size_t size)FatFile
getpos(FatPos_t *pos)FatFile
getSFN(char *name)FatFile
getWriteError()FatFileinline
isDir() const FatFileinline
isFile() const FatFileinline
isHidden() const FatFileinline
isLFN() const FatFileinline
isOpen() const FatFileinline
isReadOnly() const FatFileinline
isRoot() const FatFileinline
isRoot32() const FatFileinline
isRootFixed() const FatFileinline
isSubDir() const FatFileinline
isSystem() const FatFileinline
legal83Char(uint8_t c)FatFileinlinestatic
ls(uint8_t flags=0)FatFileinline
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFile
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFile
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFile
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFile
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFile
open(const char *path, uint8_t oflag=O_READ)FatFileinline
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFile
openRoot(FatVolume *vol)FatFile
peek()PrintFileinline
printCreateDateTime(print_t *pr)FatFile
printFatDate(uint16_t fatDate)FatFileinlinestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFilestatic
printFatTime(uint16_t fatTime)FatFileinlinestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFilestatic
printField(float value, char term, uint8_t prec=2)FatFile
printField(int16_t value, char term)FatFile
printField(uint16_t value, char term)FatFile
printField(int32_t value, char term)FatFile
printField(uint32_t value, char term)FatFile
PrintFile() (defined in PrintFile)PrintFileinline
PrintFile(const char *path, uint8_t oflag)PrintFileinline
printFileSize(print_t *pr)FatFile
printModifyDateTime(print_t *pr)FatFile
printName()FatFileinline
printName(print_t *pr)FatFile
printSFN(print_t *pr)FatFile
read()FatFileinline
read(void *buf, size_t nbyte)FatFile
readDir(dir_t *dir)FatFile
remove()FatFile
remove(FatFile *dirFile, const char *path)FatFilestatic
rename(FatFile *dirFile, const char *newPath)FatFile
rewind()FatFileinline
rmdir()FatFile
rmRfStar()FatFile
SdFile() (defined in SdFile)SdFileinline
SdFile(const char *path, uint8_t oflag)SdFileinline
seekCur(int32_t offset)FatFileinline
seekEnd(int32_t offset=0)FatFileinline
seekSet(uint32_t pos)FatFile
setCwd(FatFile *dir)FatFileinlinestatic
setpos(FatPos_t *pos)FatFile
sync()FatFile
timestamp(FatFile *file)FatFile
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFile
truncate(uint32_t length)FatFile
volume() const FatFileinline
write(uint8_t b)PrintFileinline
write(const uint8_t *buf, size_t size)PrintFileinline
FatFile::write(const char *str)FatFileinline
FatFile::write(const void *buf, size_t nbyte)FatFile
- - - - diff --git a/libraries/SdFat/html/class_sd_file.html b/libraries/SdFat/html/class_sd_file.html deleted file mode 100644 index 0e87629..0000000 --- a/libraries/SdFat/html/class_sd_file.html +++ /dev/null @@ -1,3289 +0,0 @@ - - - - - - -SdFat: SdFile Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

Class for backward compatibility. - More...

- -

#include <SdFat.h>

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

-Public Member Functions

int available ()
 
void clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
void flush ()
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *dirFile, const char *newPath)
 
void rewind ()
 
bool rmdir ()
 
bool rmRfStar ()
 
 SdFile (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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
size_t write (uint8_t b)
 
size_t write (const uint8_t *buf, size_t size)
 
int write (const char *str)
 
int write (const void *buf, size_t nbyte)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

Detailed Description

-

Class for backward compatibility.

-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
SdFile::SdFile (const char * path,
uint8_t oflag 
)
-
-inline
-
-

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

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

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
int PrintFile::available ()
-
-inlineinherited
-
-
Returns
number of bytes available from the current position to EOF or INT_MAX if more than INT_MAX bytes are available.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearError ()
-
-inlineinherited
-
-

Clear all error bits.

- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::clearWriteError ()
-
-inlineinherited
-
-

Set writeError to zero

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::close ()
-
-inherited
-
-

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::createContiguous (FatFiledirFile,
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 true is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curCluster () const
-
-inlineinherited
-
-
Returns
The current cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::curPosition () const
-
-inlineinherited
-
-
Returns
The current position for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
static FatFile* FatFile::cwd ()
-
-inlinestaticinherited
-
-
Returns
Current working directory
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::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 FatFile::dateTimeCallbackCancel ()
-
-inlinestaticinherited
-
-

Cancel the date/time callback function.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::dirEntry (dir_tdir)
-
-inherited
-
-

Return a file's directory entry.

-
Parameters
- - -
[out]dirLocation for return of the file's directory entry.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatFile::dirIndex ()
-
-inlineinherited
-
-
Returns
The index of this file in it's directory.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t FatFile::dirName (const dir_tdir,
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.
-
-
-
Returns
length of the name.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::dirSize ()
-
-inherited
-
-
Returns
The number of bytes allocated to a directory or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::dmpFile (print_tpr,
uint32_t pos,
size_t n 
)
-
-inherited
-
-

Dump file in Hex

Parameters
- - - - -
[in]prPrint stream for list.
[in]posStart position in file.
[in]nnumber of locations to dump.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::exists (const char * path)
-
-inlineinherited
-
-

Test for the existence of a file in a directory

-
Parameters
- - -
[in]pathPath 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 FatFile::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.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::fileAttr () const
-
-inlineinherited
-
-

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

-
Returns
The file or directory type.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::fileSize () const
-
-inlineinherited
-
-
Returns
The total number of bytes in a file.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatFile::firstCluster () const
-
-inlineinherited
-
-
Returns
The first cluster number for a file or directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
void PrintFile::flush ()
-
-inlineinherited
-
-

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

- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatFile::getError ()
-
-inlineinherited
-
-
Returns
All error bits.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::getName (char * name,
size_t size 
)
-
-inherited
-
-

Get a file's name followed by a zero byte.

-
Parameters
- - - -
[out]nameAn array of characters for the file's name.
[in]sizeThe size of the array in bytes. The array must be at least 13 bytes long. The file's name will be truncated if the file's name is too long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::getpos (FatPos_tpos)
-
-inherited
-
-

get position for streams

Parameters
- - -
[out]posstruct to receive position
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::getSFN (char * name)
-
-inherited
-
-

Get a file's Short File Name followed by a zero byte.

-
Parameters
- - -
[out]nameAn array of characters for the file's name. The array must be at least 13 bytes long.
-
-
-
Returns
The value true, is returned for success and the value false, is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::getWriteError ()
-
-inlineinherited
-
-
Returns
value of writeError
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isDir () const
-
-inlineinherited
-
-
Returns
True if this is a directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isFile () const
-
-inlineinherited
-
-
Returns
True if this is a normal file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isHidden () const
-
-inlineinherited
-
-
Returns
True if this is a hidden file else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isLFN () const
-
-inlineinherited
-
-
Returns
true if this file has a Long File Name.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isOpen () const
-
-inlineinherited
-
-
Returns
True if this is an open file/directory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isReadOnly () const
-
-inlineinherited
-
-
Returns
True if file is read-only
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot () const
-
-inlineinherited
-
-
Returns
True if this is the root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRoot32 () const
-
-inlineinherited
-
-
Returns
True if this is the FAT32 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isRootFixed () const
-
-inlineinherited
-
-
Returns
True if this is the FAT12 of FAT16 root directory.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSubDir () const
-
-inlineinherited
-
-
Returns
True if this is a subdirectory else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::isSystem () const
-
-inlineinherited
-
-
Returns
True if this is a system file else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::legal83Char (uint8_t c)
-
-inlinestaticinherited
-
-

Check for a legal 8.3 character.

Parameters
- - -
[in]cCharacter to be checked.
-
-
-
Returns
true for a legal 8.3 character else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::ls (uint8_t flags = 0)
-
-inlineinherited
-
-

List directory contents.

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

LS_DATE - Print file modification date

-

LS_SIZE - Print file size.

-

LS_R - Recursive list of subdirectories.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void FatFile::ls (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::mkdir (FatFiledir,
const char * path,
bool pFlag = true 
)
-
-inherited
-
-

Make a new directory.

-
Parameters
- - - - -
[in]dirAn open FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFileSystemfs,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file in the volume working directory of a FatFileSystem.

-
Parameters
- - - - -
[in]fsFile System where the file is located.
[in]pathwith a valid 8.3 DOS name for a file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
uint16_t index,
uint8_t oflag 
)
-
-inherited
-
-

Open a file by index.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-

See open() by path for definition of flags.

Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::open (FatFiledirFile,
const char * path,
uint8_t oflag 
)
-
-inherited
-
-

Open a file or directory by name.

-
Parameters
- - - - -
[in]dirFileAn open FatFile 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) or any functions do character at a time writes since 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 FatFile 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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::open (const char * path,
uint8_t oflag = O_READ 
)
-
-inlineinherited
-
-

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]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::openNext (FatFiledirFile,
uint8_t oflag = O_READ 
)
-
-inherited
-
-

Open the next file or subdirectory in a directory.

-
Parameters
- - - -
[in]dirFileAn open FatFile instance for the directory containing the file to be opened.
[in]oflagbitwise-inclusive OR of open mode flags. See see FatFile::open(FatFile*, const char*, uint8_t).
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::openRoot (FatVolumevol)
-
-inherited
-
-

Open a volume's root directory.

-
Parameters
- - -
[in]volThe FAT volume containing the root directory to be opened.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int PrintFile::peek ()
-
-inlineinherited
-
-

Return the next available byte without consuming it.

-
Returns
The byte if no error and not at eof else -1;
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printCreateDateTime (print_tpr)
-
-inherited
-
-

Print a file's creation date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatDate (uint16_t fatDate)
-
-inlinestaticinherited
-
-

Print a directory date field.

-

Format is yyyy-mm-dd.

-
Parameters
- - -
[in]fatDateThe date field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatDate (print_tpr,
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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void FatFile::printFatTime (uint16_t fatTime)
-
-inlinestaticinherited
-
-

Print a directory time field.

-

Format is hh:mm:ss.

-
Parameters
- - -
[in]fatTimeThe time field from a directory entry.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void FatFile::printFatTime (print_tpr,
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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::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 FatFile::printFileSize (print_tpr)
-
-inherited
-
-

Print a file's size.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::printModifyDateTime (print_tpr)
-
-inherited
-
-

Print a file's modify date and time

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
size_t FatFile::printName ()
-
-inlineinherited
-
-

Print a file's name.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printName (print_tpr)
-
-inherited
-
-

Print a file's name

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t FatFile::printSFN (print_tpr)
-
-inherited
-
-

Print a file's Short File Name.

-
Parameters
- - -
[in]prPrint stream for output.
-
-
-
Returns
The number of characters printed is returned for success and zero is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
int FatFile::read ()
-
-inlineinherited
-
-

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 FatFile::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 FatFile::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 FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::remove (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool FatFile::rename (FatFiledirFile,
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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
void FatFile::rewind ()
-
-inlineinherited
-
-

Set the file's current position to zero.

- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 FatFile::seekEnd (int32_t offset = 0)
-
-inlineinherited
-
-

Set the files position to end-of-file + offset. See seekSet(). Can't be used for directory files since file size is not defined.

Parameters
- - -
[in]offsetThe new position in bytes from end-of-file.
-
-
-
Returns
true for success or false for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
static bool FatFile::setCwd (FatFiledir)
-
-inlinestaticinherited
-
-

Set the current working directory.

-
Parameters
- - -
[in]dirNew current working directory.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void FatFile::setpos (FatPos_tpos)
-
-inherited
-
-

set position for streams

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

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

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::timestamp (FatFilefile)
-
-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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatFile::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
FatVolume* FatFile::volume () const
-
-inlineinherited
-
-
Returns
FatVolume that contains this file.
- -
-
- -
-
- - - - - -
- - - - - - - - -
size_t PrintFile::write (uint8_t b)
-
-inlineinherited
-
-

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. 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.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
size_t PrintFile::write (const uint8_t * buf,
size_t size 
)
-
-inlineinherited
-
-

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.
- -
-
- -
-
- - - - - -
- - - - - - - - -
int FatFile::write (const char * str)
-
-inlineinherited
-
-

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 FatFile::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.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdFat.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_file__coll__graph.png b/libraries/SdFat/html/class_sd_file__coll__graph.png deleted file mode 100644 index ac11b58c698740680706d23295f76a0f9961b474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 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 - - - - - -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 divisor)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
useSpiTransactions()SdSpiinline
- - - - diff --git a/libraries/SdFat/html/class_sd_spi.html b/libraries/SdFat/html/class_sd_spi.html deleted file mode 100644 index 8c93122..0000000 --- a/libraries/SdFat/html/class_sd_spi.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - -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 divisor)
 
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)
 
bool useSpiTransactions ()
 
-

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 divisor)
-
-

Set SPI options for access to SD/SDHC cards.

-
Parameters
- - -
[in]divisorSCK 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.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpi::useSpiTransactions ()
-
-inline
-
-
Returns
true - uses SPI transactions
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdSpi.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_base-members.html b/libraries/SdFat/html/class_sd_spi_base-members.html deleted file mode 100644 index e585c41..0000000 --- a/libraries/SdFat/html/class_sd_spi_base-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdSpiBase Member List
-
-
- -

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

- - - - - - - - -
begin()=0SdSpiBasepure virtual
init(uint8_t divisor)SdSpiBasevirtual
receive()=0SdSpiBasepure virtual
receive(uint8_t *buf, size_t n)=0SdSpiBasepure virtual
send(uint8_t data)=0SdSpiBasepure virtual
send(const uint8_t *buf, size_t n)=0SdSpiBasepure virtual
useSpiTransactions()=0SdSpiBasepure virtual
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_base.html b/libraries/SdFat/html/class_sd_spi_base.html deleted file mode 100644 index 5003c79..0000000 --- a/libraries/SdFat/html/class_sd_spi_base.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - -SdFat: SdSpiBase Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdSpiBase Class Referenceabstract
-
-
- -

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

- -

#include <SdSpi.h>

-
-Inheritance diagram for SdSpiBase:
-
-
Inheritance graph
- - -
[legend]
- - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void begin ()=0
 
virtual void init (uint8_t divisor)
 
virtual uint8_t receive ()=0
 
virtual uint8_t receive (uint8_t *buf, size_t n)=0
 
virtual void send (uint8_t data)=0
 
virtual void send (const uint8_t *buf, size_t n)=0
 
virtual bool useSpiTransactions ()=0
 
-

Detailed Description

-

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

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
virtual void SdSpiBase::begin ()
-
-pure virtual
-
-

Initialize the SPI bus

- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual void SdSpiBase::init (uint8_t divisor)
-
-virtual
-
-

Set SPI options for access to SD/SDHC cards.

-
Parameters
- - -
[in]divisorSCK clock divider relative to the system clock.
-
-
- -

Reimplemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual uint8_t SdSpiBase::receive ()
-
-pure virtual
-
-

Receive a byte.

-
Returns
The byte.
- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual uint8_t SdSpiBase::receive (uint8_t * buf,
size_t n 
)
-
-pure virtual
-
-

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.
- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual void SdSpiBase::send (uint8_t data)
-
-pure virtual
-
-

Send a byte.

-
Parameters
- - -
[in]dataByte to send
-
-
- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void SdSpiBase::send (const uint8_t * buf,
size_t n 
)
-
-pure virtual
-
-

Send multiple bytes.

-
Parameters
- - - -
[in]bufBuffer for data to be sent.
[in]nNumber of bytes to send.
-
-
- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual bool SdSpiBase::useSpiTransactions ()
-
-pure virtual
-
-
Returns
true if hardware SPI else false
- -

Implemented in SdSpiSoft< MisoPin, MosiPin, SckPin >.

- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdSpi.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_base__inherit__graph.png b/libraries/SdFat/html/class_sd_spi_base__inherit__graph.png deleted file mode 100644 index 4ce252dee9edd5d2a28e85ed6171037173dac76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1749 zcmb_ddobIH7XFcn)>5t2D$S<5N_DryqxDQlkqRQjv$qKGmJ-$y)MJ@aEp5lEC0bU! z5<;TZv(hG7b*a=1Lt@0;$@jmhc}W1S}h8 zURIiWUFJTKYOQlY`i+i$lH}XNUf4qId!S~>a}7&KUqN-IcnY;}9W}M4q`&WmE5XnP z`|at&N{!9RTJ5&+#=$ZFJR7lv5Km_zT4=nu;=Pa@cm%Tnb^-a>k_`{wfZSmqz*)zf z`XeC2j41aXdK4cOrGiGI>m=keC=_Z+BvMtb6<;rbj}znL@kF9Yif(dLTAB_V4zJ@} zFilZ9Cpu=PHI!R=8hjf`dZ#bqZf=AfaTA6g`m&Y{Ywh>^ zc{+sa!p)%R`Af-y?rhUj6DsO`S;`#FsD$PeEns<$Uy45)x};Tf3>2vqHBc0vq5D!w z^m|Jb94zf9g5fcFGnvii_WCV);Q2a~7}r>UT=q_wj5^WrDSASVr^V5-9uvM2N;#4$ z=sN+gUQdhU+$bG$<&(l4rapa2rBWm>GKK^E$c!)7Ajvlkyw#5th7V|mpMWy+l}`Ry zxoU%4>g`q@k`fa&sZ?qm$IK2Bqk8(Ic;&U~-YHL5Qu3leRSrLnz_}ZY5yvz4Jsq49s zYLU};+469mq)-JEOwe(77BoyWFn7Nz(gX!aeYr9+Grf2)QYCdc@Il_JOpsJI(;qg3(9{eyQS$0?d@?$f zM^L|!NDs+BGiFgewreooiRk15K7e(?+l&Wk<$8xb&L0rJA4~i3yzPbr4Y=+u&s)dj z7Zm6 z(itb!Vq)0y?B6?dyGoYq09jk#1v%SePh&>IbPh@3Gr<7aGgO7q*tx4DqY#?ZfgHEn z!Ec9+;q9}Qp9S^5mAO3A?BM=BXZiBiQBCW(-pVVjec6+ur0@9tauxw6+-bRsINr|o z;<^l^Togh*CZ$A&0lV%l(i@UoyPNa|GrY7jJZ^)uYLHkiT#FnS6;-Gw7$GfxYY{vm z_+CN>1P1(agCWiO%D1@Wv;a$_2BOxl`ag{cxBG?HZH}x!AbqXrdQcBxs{l)%4@9q! zlvf=D{SK}5t>bGUli7vAwcVuB_7B9AAsUNoB@{xRpiN*Oe##C1Uee_~4<1U*T#2(N z6y1v7yc4^6oSPctkYOf-;(CeHt|Sd!%63BXb|q^8cCe{z%U!m~sy{M`i>!2r<(Ds8 zoKIb}IbPm3VhXdSM=-Om+E+^8z9ulue2isJ9gTHrklGpm+cboIl(hNID~I&9xtYwB zPv^HVXxZG2w%}ss66S6>xxlsP5Xi-jz82fDuPwP(6lqkE>)mJo?W%a}5k!bM!J^W; zY`G)tRMYB(?Pw;3qFTjk9h|cn<+te%(#LZxYkKOh zcn!~Y9pNuJ!e&1vLA+n7u0ER+%{t+>dA67R2k#b($q%4y8aU>~WkI#2j>G$&tL$6x z7U%!PIadLLppx$QH8bRRTouj7Pkuc%IRhKSr&v9a-*r%aZ$Z2$7reLU6Re1yL4>#r z>;}n*D(ZWe7oa%ERit{On@1Ek=`TWeUx)m560puX>NK&1?Z%S6*o6!brvqa>p8`2A f@^1cNSGF`k8U~Qt2ln+S{uJPL(G$sV!e9F@nIuPp diff --git a/libraries/SdFat/html/class_sd_spi_card-members.html b/libraries/SdFat/html/class_sd_spi_card-members.html deleted file mode 100644 index 5d4097f..0000000 --- a/libraries/SdFat/html/class_sd_spi_card-members.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdSpiCard Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - -
begin(m_spi_t *spi, uint8_t chipSelectPin=SS, uint8_t sckDivisor=SPI_FULL_SPEED)SdSpiCard
cardSize()SdSpiCard
erase(uint32_t firstBlock, uint32_t lastBlock)SdSpiCard
eraseSingleBlockEnable()SdSpiCard
error(uint8_t code)SdSpiCardinline
errorCode() const SdSpiCardinline
errorData() const SdSpiCardinline
isBusy()SdSpiCard
m_spi_t typedefSdSpiCard
readBlock(uint32_t block, uint8_t *dst)SdSpiCard
readBlocks(uint32_t block, uint8_t *dst, size_t count)SdSpiCard
readCID(cid_t *cid)SdSpiCardinline
readCSD(csd_t *csd)SdSpiCardinline
readData(uint8_t *dst)SdSpiCard
readOCR(uint32_t *ocr)SdSpiCard
readStart(uint32_t blockNumber)SdSpiCard
readStop()SdSpiCard
sckDivisor()SdSpiCardinline
SdSpiCard()SdSpiCardinline
type() const SdSpiCardinline
writeBlock(uint32_t blockNumber, const uint8_t *src)SdSpiCard
writeBlocks(uint32_t block, const uint8_t *src, size_t count)SdSpiCard
writeData(const uint8_t *src)SdSpiCard
writeStart(uint32_t blockNumber, uint32_t eraseCount)SdSpiCard
writeStop()SdSpiCard
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_card.html b/libraries/SdFat/html/class_sd_spi_card.html deleted file mode 100644 index 520ede8..0000000 --- a/libraries/SdFat/html/class_sd_spi_card.html +++ /dev/null @@ -1,854 +0,0 @@ - - - - - - -SdFat: SdSpiCard Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdSpiCard Class Reference
-
-
- -

Raw access to SD and SDHC flash memory cards via SPI protocol. - More...

- -

#include <SdSpiCard.h>

-
-Inheritance diagram for SdSpiCard:
-
-
Inheritance graph
- - -
[legend]
- - - - -

-Public Types

typedef SpiDefault_t m_spi_t
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool begin (m_spi_t *spi, uint8_t chipSelectPin=SS, 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 isBusy ()
 
bool readBlock (uint32_t block, uint8_t *dst)
 
bool readBlocks (uint32_t block, uint8_t *dst, size_t count)
 
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 ()
 
 SdSpiCard ()
 
int type () const
 
bool writeBlock (uint32_t blockNumber, const uint8_t *src)
 
bool writeBlocks (uint32_t block, const uint8_t *src, size_t count)
 
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 via SPI protocol.

-

Member Typedef Documentation

- -
-
- - - - -
typedef SpiDefault_t SdSpiCard::m_spi_t
-
-

typedef for SPI class.

- -
-
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
SdSpiCard::SdSpiCard ()
-
-inline
-
-

Construct an instance of SdSpiCard.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdSpiCard::begin (m_spi_tspi,
uint8_t chipSelectPin = SS,
uint8_t sckDivisor = SPI_FULL_SPEED 
)
-
-

Initialize the SD card.

Parameters
- - - - -
[in]spiSPI object.
[in]chipSelectPinSD chip select pin.
[in]sckDivisorSPI clock divisor.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - - - -
uint32_t SdSpiCard::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 SdSpiCard::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - -
bool SdSpiCard::eraseSingleBlockEnable ()
-
-

Determine if card supports single block erase.

-
Returns
true is returned if single block erase is supported. false is returned if single block erase is not supported.
- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdSpiCard::error (uint8_t code)
-
-inline
-
-

Set SD error code.

Parameters
- - -
[in]codevalue for error code.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::errorCode () const
-
-inline
-
-
Returns
code for the last error. See SdSpiCard.h for a list of error codes.
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::errorData () const
-
-inline
-
-
Returns
error data for last error.
- -
-
- -
-
- - - - - - - -
bool SdSpiCard::isBusy ()
-
-

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

-
Returns
true if busy else false.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdSpiCard::readBlock (uint32_t block,
uint8_t * dst 
)
-
-

Read a 512 byte block from an SD card.

-
Parameters
- - - -
[in]blockLogical block to be read.
[out]dstPointer to the location that will receive the data.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdSpiCard::readBlocks (uint32_t block,
uint8_t * dst,
size_t count 
)
-
-

Read multiple 512 byte blocks from an SD card.

-
Parameters
- - - - -
[in]blockLogical block to be read.
[in]countNumber of blocks to be read.
[out]dstPointer to the location that will receive the data.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool SdSpiCard::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 SdSpiCard::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 SdSpiCard::readData (uint8_t * dst)
-
-

Read one data block in a multiple block read sequence

-
Parameters
- - -
[out]dstPointer to the location for the data to be read.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdSpiCard::readOCR (uint32_t * ocr)
-
-

Read OCR register.

-
Parameters
- - -
[out]ocrValue of OCR register.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - - - - -
bool SdSpiCard::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - -
bool SdSpiCard::readStop ()
-
-

End a read multiple blocks sequence.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t SdSpiCard::sckDivisor ()
-
-inline
-
-

Return SCK divisor.

-
Returns
Requested SCK divisor.
- -
-
- -
-
- - - - - -
- - - - - - - -
int SdSpiCard::type () const
-
-inline
-
-

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

Returns
0 - SD V1, 1 - SD V2, or 3 - SDHC.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdSpiCard::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool SdSpiCard::writeBlocks (uint32_t block,
const uint8_t * src,
size_t count 
)
-
-

Write multiple 512 byte blocks to an SD card.

-
Parameters
- - - - -
[in]blockLogical block to be written.
[in]countNumber of blocks to be written.
[in]srcPointer to the location of the data to be written.
-
-
-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - -
bool SdSpiCard::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool SdSpiCard::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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - - - -
bool SdSpiCard::writeStop ()
-
-

End a write multiple blocks sequence.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
-
The documentation for this class was generated from the following files:
    -
  • Arduino/libraries/SdFat/SdSpiCard.h
  • -
  • Arduino/libraries/SdFat/SdSpiCard.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_card__inherit__graph.png b/libraries/SdFat/html/class_sd_spi_card__inherit__graph.png deleted file mode 100644 index 12134ac948a974b92d091c9c82112151f74f2ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmeAS@N?(olHy`uVBq!ia0vp^u|QnF!3HF2oNKg!6kC$Fy9>jA5L~c#`D6wLmPSt( z$B>FSZ|CgImT{LjHa~K%Qb9LO zJzl+-C;JQjb%Z`QS#^1*!HoouiB1wH=e#dX^o;CHw@>@__-5o@`v{e@Z_nBO-o3N@ znb=*Xu0k8 zZ4grywo4e@uzw9mx7@n)xhaG<;(NvPg5RvUK{diWtM=?*S)Tc-M%^&ecULycuQ_{G|Jm_t z#ijJPX?ylVVyQZYZx@6LLd6;Aus;{6f{mYyLd3^`HDmdZtJ0Vk7^q*KgyV z{#f>^DAL|;r*o!D)wErUH+Ei(VcUJ|`ns2;{tLJn%X+2`c$ti*iJqNEyQE0)Z+{r!27;f}V+-gjGXzInWQjgO*>YOTqy7q=e1IA_HC#7s3nA<&ck37))|0uh)sX#+y$+^Z47w zbJB0Z-&~)b(|0U0xGL_0mim)h$Mdv*@814p>z%!`>%&l=nVZmh$v#?sxrb z=a&_WTuQ6l=pGljGV@nU?Ww@omUau?PRuikzUi^b>fkS%@)M8Op68Ce_x`Bqs#O8$ zO>a_r^NW|57amg7pHTbe;x*}CyQ&zwT6c$Ox&Hp1b)?*KV%qJ~-wN02o$Aw#a+;>A zZXKJqE%x&2J!@lshv>4~O-{Y{e&6}X*>=;XA6$eUr2Affv1j;m!)?OlmhfyEPpr>mdKI;Vst0N;mDCIA2c diff --git a/libraries/SdFat/html/class_sd_spi_lib-members.html b/libraries/SdFat/html/class_sd_spi_lib-members.html deleted file mode 100644 index c3e5093..0000000 --- a/libraries/SdFat/html/class_sd_spi_lib-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdSpiLib Member List
-
-
- -

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

- - - - - - - - -
begin()SdSpiLibinline
init(uint8_t divisor)SdSpiLibinline
receive()SdSpiLibinline
receive(uint8_t *buf, size_t n)SdSpiLibinline
send(uint8_t b)SdSpiLibinline
send(const uint8_t *buf, size_t n)SdSpiLibinline
useSpiTransactions()SdSpiLibinline
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_lib.html b/libraries/SdFat/html/class_sd_spi_lib.html deleted file mode 100644 index 3a69039..0000000 --- a/libraries/SdFat/html/class_sd_spi_lib.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - -SdFat: SdSpiLib Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdSpiLib Class Reference
-
-
- -

Arduino SPI library class for access to SD and SDHC flash memory cards. - More...

- -

#include <SdSpi.h>

- - - - - - - - - - - - - - - - -

-Public Member Functions

void begin ()
 
void init (uint8_t divisor)
 
uint8_t receive ()
 
uint8_t receive (uint8_t *buf, size_t n)
 
void send (uint8_t b)
 
void send (const uint8_t *buf, size_t n)
 
bool useSpiTransactions ()
 
-

Detailed Description

-

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

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
void SdSpiLib::begin ()
-
-inline
-
-

Initialize SPI pins.

- -
-
- -
-
- - - - - -
- - - - - - - - -
void SdSpiLib::init (uint8_t divisor)
-
-inline
-
-

Set SPI options for access to SD/SDHC cards.

-
Parameters
- - -
[in]divisorSCK clock divider relative to the system clock.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t SdSpiLib::receive ()
-
-inline
-
-

Receive a byte.

-
Returns
The byte.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t SdSpiLib::receive (uint8_t * buf,
size_t n 
)
-
-inline
-
-

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 SdSpiLib::send (uint8_t b)
-
-inline
-
-

Send a byte.

-
Parameters
- - -
[in]bByte to send
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdSpiLib::send (const uint8_t * buf,
size_t n 
)
-
-inline
-
-

Send multiple bytes.

-
Parameters
- - - -
[in]bufBuffer for data to be sent.
[in]nNumber of bytes to send.
-
-
- -
-
- -
-
- - - - - -
- - - - - - - -
bool SdSpiLib::useSpiTransactions ()
-
-inline
-
-
Returns
true - uses SPI transactions
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdSpi.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_soft-members.html b/libraries/SdFat/html/class_sd_spi_soft-members.html deleted file mode 100644 index 0cdf7ca..0000000 --- a/libraries/SdFat/html/class_sd_spi_soft-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdSpiSoft< MisoPin, MosiPin, SckPin > Member List
-
-
- -

This is the complete list of members for SdSpiSoft< MisoPin, MosiPin, SckPin >, including all inherited members.

- - - - - - - - -
begin()SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
init(uint8_t divisor)SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
receive()SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
receive(uint8_t *buf, size_t n)SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
send(uint8_t data)SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
send(const uint8_t *buf, size_t n)SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
useSpiTransactions()SdSpiSoft< MisoPin, MosiPin, SckPin >inlinevirtual
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_soft.html b/libraries/SdFat/html/class_sd_spi_soft.html deleted file mode 100644 index b89b948..0000000 --- a/libraries/SdFat/html/class_sd_spi_soft.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - -SdFat: SdSpiSoft< MisoPin, MosiPin, SckPin > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdSpiSoft< MisoPin, MosiPin, SckPin > Class Template Reference
-
-
- -

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

- -

#include <SdSpi.h>

-
-Inheritance diagram for SdSpiSoft< MisoPin, MosiPin, SckPin >:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdSpiSoft< MisoPin, MosiPin, SckPin >:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - -

-Public Member Functions

void begin ()
 
void init (uint8_t divisor)
 
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)
 
bool useSpiTransactions ()
 
-

Detailed Description

-

template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
-class SdSpiSoft< MisoPin, MosiPin, SckPin >

- -

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

-

Member Function Documentation

- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - -
void SdSpiSoft< MisoPin, MosiPin, SckPin >::begin ()
-
-inlinevirtual
-
-

initialize SPI pins

- -

Implements SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - -
void SdSpiSoft< MisoPin, MosiPin, SckPin >::init (uint8_t divisor)
-
-inlinevirtual
-
-

Initialize hardware SPI - dummy for soft SPI

Parameters
- - -
[in]divisorSCK divisor - ignored.
-
-
- -

Reimplemented from SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - -
uint8_t SdSpiSoft< MisoPin, MosiPin, SckPin >::receive ()
-
-inlinevirtual
-
-

Receive a byte.

-
Returns
The byte.
- -

Implements SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t SdSpiSoft< MisoPin, MosiPin, SckPin >::receive (uint8_t * buf,
size_t n 
)
-
-inlinevirtual
-
-

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.
- -

Implements SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - -
void SdSpiSoft< MisoPin, MosiPin, SckPin >::send (uint8_t data)
-
-inlinevirtual
-
-

Send a byte.

-
Parameters
- - -
[in]dataByte to send
-
-
- -

Implements SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SdSpiSoft< MisoPin, MosiPin, SckPin >::send (const uint8_t * buf,
size_t n 
)
-
-inlinevirtual
-
-

Send multiple bytes.

-
Parameters
- - - -
[in]bufBuffer for data to be sent.
[in]nNumber of bytes to send.
-
-
- -

Implements SdSpiBase.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin>
- - - - - -
- - - - - - - -
bool SdSpiSoft< MisoPin, MosiPin, SckPin >::useSpiTransactions ()
-
-inlinevirtual
-
-
Returns
false - no SPI transactions
- -

Implements SdSpiBase.

- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdSpi.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_spi_soft__coll__graph.png b/libraries/SdFat/html/class_sd_spi_soft__coll__graph.png deleted file mode 100644 index 4ca752c5d6e86cf28af7da4c4105d9d27e21202c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708 zcmb_d`CHOi7ylAPHJVNh7Nb+XxnyYKl3N;B<`TI;#^4gpm}#RSU@4{rXgQOKV&hDU zI`*omsJV<{)&?jAe*JI|oC2oVPd!^~`k6hzIkbM3SXeysOU|T6_k%wSn-Wl2==R zIAHX`v;n?H1T?S$j_Ge=gO)dsMohclf2#vfF3za&5}QOPPOAU$D^)Z~fo>}z5w8b! ze+aYOB}mLD(coy5JdcqFQh9}*qU7qD#W1H7l+usPhl251sl;oNnGUs$j3~XtG&&7W z54Mx;JaM*K%@uk4=Zrqpy?6|FvFz{y->48)HMTX^8Byklkw;M87F={b!(uZCD=O6e zG$jmdbriDR z@`&Tr_a4*PzD?1Vm{h@-UEc1*ULw%~l@f$8g;`RPEI`O6IkIj~T{bR?xlqNKTU+ zt>6jEtii_Zqk-{ty>SWFOA|@kjE%noML)A1H21m9m)exhww1t*HT{cbA*W=b)b8`- zBi@Jxz~YXnRj^Lmcq18fF?8evt8H9eQ(JZrsp-!Xd3B$ECymZIU=|fuGZ3i9LhOTo z=b65D4Rw^Zs`b88w{ zz?Um5+S}J?TY$G>heqBq26^aRT?0eb*V3YuS|GOBM{(A@U866kG&KHKlnogULegBV zf{mCU!_%6ul#u^b=>L?uBl8O<8_4xJ(`8G`qGbz4q?>tRqZY92KNvMp<7HO#Rd|JH z`47-0NKz`0C>V=>eM*If+x7)EDjG>QR~CdqEjxSrx>6?o>G1Hr*eh4A`?BM-{%N0$ zOY-FRQS5G67U`G%^2=*u^Z7GHD${E1i19Oi;`vHC{cBO-@~{p40hR^6U^bu(&aPI* zgQt4BdXvdz#U&NmL)7V@WQ|d1|1DBao?q)G{A#sVad)0}tIbT7>bjt)_US96uf58ns6^sE5P=8A5Q2O7{3MNrOWq00? z-yXxv*;{0y#GWN;&K8c4glk-y&A$*@Sr_RZsH`jzxN9Y!?yF2M6481w6`+V&W z+h9dyi+UAd`#bOhajeSw6$m!H^FYXG=RK+fVK4z-J@0FU!W|KVfqW zMEMBHMC>lhkub9*MQ4#|J|%PEu}-e^cx5fE2bqpw4BnjzWiE)NzB-brn+uZA`0t60 zjxOm1G@+^OQ0(q1b_d>Tr9XxrX&e)eJ^7^8A>F7qiMs#wWE97TF-7zLvKzOjonvk2 zucwMl8LqJNafI={d8Tr0Wpn}FDt^(H$%BI9|&qZWOFb4%35JOa>eKCYE6!8iT{4}LnM diff --git a/libraries/SdFat/html/class_sd_spi_soft__inherit__graph.png b/libraries/SdFat/html/class_sd_spi_soft__inherit__graph.png deleted file mode 100644 index 4ca752c5d6e86cf28af7da4c4105d9d27e21202c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708 zcmb_d`CHOi7ylAPHJVNh7Nb+XxnyYKl3N;B<`TI;#^4gpm}#RSU@4{rXgQOKV&hDU zI`*omsJV<{)&?jAe*JI|oC2oVPd!^~`k6hzIkbM3SXeysOU|T6_k%wSn-Wl2==R zIAHX`v;n?H1T?S$j_Ge=gO)dsMohclf2#vfF3za&5}QOPPOAU$D^)Z~fo>}z5w8b! ze+aYOB}mLD(coy5JdcqFQh9}*qU7qD#W1H7l+usPhl251sl;oNnGUs$j3~XtG&&7W z54Mx;JaM*K%@uk4=Zrqpy?6|FvFz{y->48)HMTX^8Byklkw;M87F={b!(uZCD=O6e zG$jmdbriDR z@`&Tr_a4*PzD?1Vm{h@-UEc1*ULw%~l@f$8g;`RPEI`O6IkIj~T{bR?xlqNKTU+ zt>6jEtii_Zqk-{ty>SWFOA|@kjE%noML)A1H21m9m)exhww1t*HT{cbA*W=b)b8`- zBi@Jxz~YXnRj^Lmcq18fF?8evt8H9eQ(JZrsp-!Xd3B$ECymZIU=|fuGZ3i9LhOTo z=b65D4Rw^Zs`b88w{ zz?Um5+S}J?TY$G>heqBq26^aRT?0eb*V3YuS|GOBM{(A@U866kG&KHKlnogULegBV zf{mCU!_%6ul#u^b=>L?uBl8O<8_4xJ(`8G`qGbz4q?>tRqZY92KNvMp<7HO#Rd|JH z`47-0NKz`0C>V=>eM*If+x7)EDjG>QR~CdqEjxSrx>6?o>G1Hr*eh4A`?BM-{%N0$ zOY-FRQS5G67U`G%^2=*u^Z7GHD${E1i19Oi;`vHC{cBO-@~{p40hR^6U^bu(&aPI* zgQt4BdXvdz#U&NmL)7V@WQ|d1|1DBao?q)G{A#sVad)0}tIbT7>bjt)_US96uf58ns6^sE5P=8A5Q2O7{3MNrOWq00? z-yXxv*;{0y#GWN;&K8c4glk-y&A$*@Sr_RZsH`jzxN9Y!?yF2M6481w6`+V&W z+h9dyi+UAd`#bOhajeSw6$m!H^FYXG=RK+fVK4z-J@0FU!W|KVfqW zMEMBHMC>lhkub9*MQ4#|J|%PEu}-e^cx5fE2bqpw4BnjzWiE)NzB-brn+uZA`0t60 zjxOm1G@+^OQ0(q1b_d>Tr9XxrX&e)eJ^7^8A>F7qiMs#wWE97TF-7zLvKzOjonvk2 zucwMl8LqJNafI={d8Tr0Wpn}FDt^(H$%BI9|&qZWOFb4%35JOa>eKCYE6!8iT{4}LnM diff --git a/libraries/SdFat/html/class_sd_volume-members.html b/libraries/SdFat/html/class_sd_volume-members.html deleted file mode 100644 index e5765c7..0000000 --- a/libraries/SdFat/html/class_sd_volume-members.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SdVolume Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - -
blocksPerCluster() const FatVolumeinline
blocksPerFat() const FatVolumeinline
cacheClear()FatVolumeinline
clusterCount() const FatVolumeinline
clusterSizeShift() const FatVolumeinline
dataStartBlock() const FatVolumeinline
dbgFat(uint32_t n, uint32_t *v)FatVolumeinline
fatCount()FatVolumeinline
fatStartBlock() const FatVolumeinline
fatType() const FatVolumeinline
FatVolume()FatVolumeinline
freeClusterCount()FatVolume
init(Sd2Card *dev)SdVolumeinline
init(Sd2Card *dev, uint8_t part)SdVolumeinline
FatVolume::init()FatVolumeinline
FatVolume::init(uint8_t part)FatVolume
rootDirEntryCount() const FatVolumeinline
rootDirStart() const FatVolumeinline
volumeBlockCount() const FatVolumeinline
wipe(print_t *pr=0)FatVolume
- - - - diff --git a/libraries/SdFat/html/class_sd_volume.html b/libraries/SdFat/html/class_sd_volume.html deleted file mode 100644 index 03b8c8d..0000000 --- a/libraries/SdFat/html/class_sd_volume.html +++ /dev/null @@ -1,685 +0,0 @@ - - - - - - -SdFat: SdVolume Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SdVolume Class Reference
-
-
- -

SdVolume Soon to be removed. - More...

- -

#include <SdVolume.h>

-
-Inheritance diagram for SdVolume:
-
-
Inheritance graph
- - -
[legend]
-
-Collaboration diagram for SdVolume:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-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
 
int8_t dbgFat (uint32_t n, uint32_t *v)
 
uint8_t fatCount ()
 
uint32_t fatStartBlock () const
 
uint8_t fatType () const
 
int32_t freeClusterCount ()
 
bool init (Sd2Card *dev)
 
bool init (Sd2Card *dev, uint8_t part)
 
bool init ()
 
bool init (uint8_t part)
 
uint16_t rootDirEntryCount () const
 
uint32_t rootDirStart () const
 
uint32_t volumeBlockCount () const
 
bool wipe (print_t *pr=0)
 
-

Detailed Description

-

SdVolume Soon to be removed.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::blocksPerCluster () const
-
-inlineinherited
-
-
Returns
The volume's cluster size in blocks.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::blocksPerFat () const
-
-inlineinherited
-
-
Returns
The number of blocks in one FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
cache_t* FatVolume::cacheClear ()
-
-inlineinherited
-
-

Clear the cache and returns a pointer to the cache. Not for normal apps.

Returns
A pointer to the cache buffer or zero if an error occurs.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::clusterCount () const
-
-inlineinherited
-
-
Returns
The total number of clusters in the volume.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::clusterSizeShift () const
-
-inlineinherited
-
-
Returns
The shift count required to multiply by blocksPerCluster.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::dataStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of file data.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t FatVolume::dbgFat (uint32_t n,
uint32_t * v 
)
-
-inlineinherited
-
-

Debug access to FAT table

-
Parameters
- - - -
[in]ncluster number.
[out]vvalue of entry
-
-
-
Returns
true for success or false for failure
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatCount ()
-
-inlineinherited
-
-
Returns
The number of File Allocation Tables.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::fatStartBlock () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the first FAT.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint8_t FatVolume::fatType () const
-
-inlineinherited
-
-
Returns
The FAT type of the volume. Values are 12, 16 or 32.
- -
-
- -
-
- - - - - -
- - - - - - - -
int32_t FatVolume::freeClusterCount ()
-
-inherited
-
-

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
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SdVolume::init (Sd2Carddev,
uint8_t part 
)
-
-inline
-
-

Initialize a FAT volume.

-
Parameters
- - - -
[in]devThe Sd2Card where the volume is located.
[in]partthe partition to use. Zero for super floppy or 1-4.
-
-
-
Returns
true for success else false.
- -
-
- -
-
- - - - - -
- - - - - - - -
bool FatVolume::init ()
-
-inlineinherited
-
-

Initialize a FAT volume. Try partition one first then try super floppy format.

-
Returns
The value true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::init (uint8_t part)
-
-inherited
-
-

Initialize a FAT volume.

-
Parameters
- - -
[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 true is returned for success and the value false is returned for failure.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint16_t FatVolume::rootDirEntryCount () const
-
-inlineinherited
-
-
Returns
The number of entries in the root directory for FAT16 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::rootDirStart () const
-
-inlineinherited
-
-
Returns
The logical block number for the start of the root directory on FAT16 volumes or the first cluster number on FAT32 volumes.
- -
-
- -
-
- - - - - -
- - - - - - - -
uint32_t FatVolume::volumeBlockCount () const
-
-inlineinherited
-
-
Returns
The number of blocks in the volume
- -
-
- -
-
- - - - - -
- - - - - - - - -
bool FatVolume::wipe (print_tpr = 0)
-
-inherited
-
-

Wipe all data from the volume.

Parameters
- - -
[in]prprint stream for status dots.
-
-
-
Returns
true for success else false.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/SdVolume.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_sd_volume__coll__graph.png b/libraries/SdFat/html/class_sd_volume__coll__graph.png deleted file mode 100644 index b54752f4ebb400eca9a75b0d7475f19b6487514e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 zcmeAS@N?(olHy`uVBq!ia0vp^2|!%H!3HEB`jsvQQfx`y?k)`fL2$v|<&zm0SaLjF z978JRyq#;Cuk0#u{QqOqB9G!tDd)O`8>d`ijc45L;?%?x?6^w!t>)FKicd`yyj1KQ zKPk>R?=X=qQSq+kaaoTxwduPvY{ONasZG8a{{EeD^8flvTK8_=ynFof?8>z3AGsYk z6k7xYrz~E>{~(+pn)mpocQK3=EDx4O-Y5(C!*f8K!B3haYx0Z-%X0nCI8AR*y?;gO z+_QzTt!tMpRw!S{kf`Ax!6l%UE2P&{+|>Bn$o#cM=I@l;^U=qpR|zppslViC8gcc< zv?h^B?w6ywvVt1S#5VJIAU-8KCfwAX~cT7Q8RmXcC6*Lou|6i ziFZay_9w30Ew{dCU$u!T`;S>xZ+1xaZ}wu06p`HZOyh&<_wZR&(@azkn6@}Cp5~`e zC^}{P$J$qa&8C(vSmxGHS^09;6`flbz8OyX=DT~1uG78GqRX@xE15Q}FZuK)IxYHM zr|IfAW#KLP=1J1*tQ^jahXNW5L=rBPn&lHgRu8<>@RhH4R4>l`b${H}%qWuZIp+^ER=}Z2I<%&%P)5FMq?^+lx+X1nqr(zP?IVGF-Ar zhOuys{qeio&*$Hr#_B$SiQ%tq!+-VIwO1c))3IpscD(y;GW*r}wRP&0jtqvq5dXTzJk9Qoz# z-nmcQ*hup5`ESbp{UunPq(nMV-vb{Yq!XjO!NTs zc~yJh-#@!uck_}Du2KH{Q)cr`9*vLt7A)UTF3Jgf3s SvjDIpV(@hJb6Mw<&;$VFlq$~v diff --git a/libraries/SdFat/html/class_sd_volume__inherit__graph.png b/libraries/SdFat/html/class_sd_volume__inherit__graph.png deleted file mode 100644 index b54752f4ebb400eca9a75b0d7475f19b6487514e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 zcmeAS@N?(olHy`uVBq!ia0vp^2|!%H!3HEB`jsvQQfx`y?k)`fL2$v|<&zm0SaLjF z978JRyq#;Cuk0#u{QqOqB9G!tDd)O`8>d`ijc45L;?%?x?6^w!t>)FKicd`yyj1KQ zKPk>R?=X=qQSq+kaaoTxwduPvY{ONasZG8a{{EeD^8flvTK8_=ynFof?8>z3AGsYk z6k7xYrz~E>{~(+pn)mpocQK3=EDx4O-Y5(C!*f8K!B3haYx0Z-%X0nCI8AR*y?;gO z+_QzTt!tMpRw!S{kf`Ax!6l%UE2P&{+|>Bn$o#cM=I@l;^U=qpR|zppslViC8gcc< zv?h^B?w6ywvVt1S#5VJIAU-8KCfwAX~cT7Q8RmXcC6*Lou|6i ziFZay_9w30Ew{dCU$u!T`;S>xZ+1xaZ}wu06p`HZOyh&<_wZR&(@azkn6@}Cp5~`e zC^}{P$J$qa&8C(vSmxGHS^09;6`flbz8OyX=DT~1uG78GqRX@xE15Q}FZuK)IxYHM zr|IfAW#KLP=1J1*tQ^jahXNW5L=rBPn&lHgRu8<>@RhH4R4>l`b${H}%qWuZIp+^ER=}Z2I<%&%P)5FMq?^+lx+X1nqr(zP?IVGF-Ar zhOuys{qeio&*$Hr#_B$SiQ%tq!+-VIwO1c))3IpscD(y;GW*r}wRP&0jtqvq5dXTzJk9Qoz# z-nmcQ*hup5`ESbp{UunPq(nMV-vb{Yq!XjO!NTs zc~yJh-#@!uck_}Du2KH{Q)cr`9*vLt7A)UTF3Jgf3s SvjDIpV(@hJb6Mw<&;$VFlq$~v diff --git a/libraries/SdFat/html/class_soft_s_p_i-members.html b/libraries/SdFat/html/class_soft_s_p_i-members.html deleted file mode 100644 index 45ed42b..0000000 --- a/libraries/SdFat/html/class_soft_s_p_i-members.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SoftSPI< MisoPin, MosiPin, SckPin, Mode > Member List
-
- - - - - diff --git a/libraries/SdFat/html/class_soft_s_p_i.html b/libraries/SdFat/html/class_soft_s_p_i.html deleted file mode 100644 index 62efb5c..0000000 --- a/libraries/SdFat/html/class_soft_s_p_i.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -SdFat: SoftSPI< MisoPin, MosiPin, SckPin, Mode > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SoftSPI< MisoPin, MosiPin, SckPin, Mode > Class Template Reference
-
-
- -

Fast software SPI. - More...

- -

#include <SoftSPI.h>

- - - - - - - - - - -

-Public Member Functions

void begin ()
 
uint8_t receive ()
 
void send (uint8_t data)
 
uint8_t transfer (uint8_t txData)
 
-

Detailed Description

-

template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin, uint8_t Mode = 0>
-class SoftSPI< MisoPin, MosiPin, SckPin, Mode >

- -

Fast software SPI.

-

Member Function Documentation

- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin, uint8_t Mode = 0>
- - - - - -
- - - - - - - -
void SoftSPI< MisoPin, MosiPin, SckPin, Mode >::begin ()
-
-inline
-
-

Initialize SoftSPI pins.

- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin, uint8_t Mode = 0>
- - - - - -
- - - - - - - -
uint8_t SoftSPI< MisoPin, MosiPin, SckPin, Mode >::receive ()
-
-inline
-
-

Soft SPI receive byte.

Returns
Data byte received.
- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin, uint8_t Mode = 0>
- - - - - -
- - - - - - - - -
void SoftSPI< MisoPin, MosiPin, SckPin, Mode >::send (uint8_t data)
-
-inline
-
-

Soft SPI send byte.

Parameters
- - -
[in]dataData byte to send.
-
-
- -
-
- -
-
-
-template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin, uint8_t Mode = 0>
- - - - - -
- - - - - - - - -
uint8_t SoftSPI< MisoPin, MosiPin, SckPin, Mode >::transfer (uint8_t txData)
-
-inline
-
-

Soft SPI transfer byte.

Parameters
- - -
[in]txDataData byte to send.
-
-
-
Returns
Data byte received.
- -
-
-
The documentation for this class was generated from the following file:
    -
  • Arduino/libraries/SdFat/utility/SoftSPI.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_stdio_stream-members.html b/libraries/SdFat/html/class_stdio_stream-members.html deleted file mode 100644 index 7ed8c56..0000000 --- a/libraries/SdFat/html/class_stdio_stream-members.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -SdFat: Member List - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
-
-
-
StdioStream Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
available()FatFileinlineprivate
clearerr()StdioStreaminline
clearError()FatFileinlineprivate
clearWriteError()FatFileinlineprivate
close()FatFileprivate
contiguousRange(uint32_t *bgnBlock, uint32_t *endBlock)FatFileprivate
createContiguous(FatFile *dirFile, const char *path, uint32_t size)FatFileprivate
curCluster() const FatFileinlineprivate
curPosition() const FatFileinlineprivate
cwd()FatFileinlineprivatestatic
dateTimeCallback(void(*dateTime)(uint16_t *date, uint16_t *time))FatFileinlineprivatestatic
dateTimeCallbackCancel()FatFileinlineprivatestatic
dirEntry(dir_t *dir)FatFileprivate
dirIndex()FatFileinlineprivate
dirName(const dir_t *dir, char *name)FatFileprivatestatic
dirSize()FatFileprivate
dmpFile(print_t *pr, uint32_t pos, size_t n)FatFileprivate
exists(const char *path)FatFileinlineprivate
FatFile()FatFileinlineprivate
FatFile(const char *path, uint8_t oflag)FatFileinlineprivate
fclose()StdioStream
feof()StdioStreaminline
ferror()StdioStreaminline
fflush()StdioStream
fgetc()StdioStreaminline
fgets(char *str, size_t num, size_t *len=0)StdioStream
FatFile::fgets(char *str, int16_t num, char *delim=0)FatFileprivate
fileAttr() const FatFileinlineprivate
fileSize() const FatFileinlineprivate
firstCluster() const FatFileinlineprivate
fopen(const char *path, 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
getError()FatFileinlineprivate
getName(char *name, size_t size)FatFileprivate
getpos(FatPos_t *pos)FatFileprivate
getSFN(char *name)FatFileprivate
getWriteError()FatFileinlineprivate
isDir() const FatFileinlineprivate
isFile() const FatFileinlineprivate
isHidden() const FatFileinlineprivate
isLFN() const FatFileinlineprivate
isOpen() const FatFileinlineprivate
isReadOnly() const FatFileinlineprivate
isRoot() const FatFileinlineprivate
isRoot32() const FatFileinlineprivate
isRootFixed() const FatFileinlineprivate
isSubDir() const FatFileinlineprivate
isSystem() const FatFileinlineprivate
legal83Char(uint8_t c)FatFileinlineprivatestatic
ls(uint8_t flags=0)FatFileinlineprivate
ls(print_t *pr, uint8_t flags=0, uint8_t indent=0)FatFileprivate
mkdir(FatFile *dir, const char *path, bool pFlag=true)FatFileprivate
open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFileprivate
open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFileprivate
open(FatFile *dirFile, const char *path, uint8_t oflag)FatFileprivate
open(const char *path, uint8_t oflag=O_READ)FatFileinlineprivate
openNext(FatFile *dirFile, uint8_t oflag=O_READ)FatFileprivate
openRoot(FatVolume *vol)FatFileprivate
peek()FatFileprivate
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_t *pr)FatFileprivate
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)FatFileinlineprivatestatic
printFatDate(print_t *pr, uint16_t fatDate)FatFileprivatestatic
printFatTime(uint16_t fatTime)FatFileinlineprivatestatic
printFatTime(print_t *pr, uint16_t fatTime)FatFileprivatestatic
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
FatFile::printField(int16_t value, char term)FatFileprivate
FatFile::printField(uint16_t value, char term)FatFileprivate
FatFile::printField(int32_t value, char term)FatFileprivate
FatFile::printField(uint32_t value, char term)FatFileprivate
printFileSize(print_t *pr)FatFileprivate
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_t *pr)FatFileprivate
printName()FatFileinlineprivate
printName(print_t *pr)FatFileprivate
printSFN(print_t *pr)FatFileprivate
putc(int c)StdioStreaminline
putCRLF()StdioStreaminline
read()FatFileinlineprivate
read(void *buf, size_t nbyte)FatFileprivate
readDir(dir_t *dir)FatFileprivate
remove()FatFileprivate
remove(FatFile *dirFile, const char *path)FatFileprivatestatic
rename(FatFile *dirFile, const char *newPath)FatFileprivate
rewind()StdioStream
rmdir()FatFileprivate
rmRfStar()FatFileprivate
seekCur(int32_t offset)FatFileinlineprivate
seekEnd(int32_t offset=0)FatFileinlineprivate
seekSet(uint32_t pos)FatFileprivate
setCwd(FatFile *dir)FatFileinlineprivatestatic
setpos(FatPos_t *pos)FatFileprivate
StdioStream()StdioStreaminline
sync()FatFileprivate
timestamp(FatFile *file)FatFileprivate
timestamp(uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)FatFileprivate
truncate(uint32_t length)FatFileprivate
ungetc(int c)StdioStream
volume() const FatFileinlineprivate
FatFile::write(const char *str)FatFileinlineprivate
FatFile::write(uint8_t b)FatFileinlineprivate
- - - - diff --git a/libraries/SdFat/html/class_stdio_stream.html b/libraries/SdFat/html/class_stdio_stream.html deleted file mode 100644 index 7681b35..0000000 --- a/libraries/SdFat/html/class_stdio_stream.html +++ /dev/null @@ -1,1801 +0,0 @@ - - - - - - -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, size_t num, size_t *len=0)
 
bool fopen (const char *path, 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 clearError ()
 
void clearWriteError ()
 
bool close ()
 
bool contiguousRange (uint32_t *bgnBlock, uint32_t *endBlock)
 
bool createContiguous (FatFile *dirFile, const char *path, uint32_t size)
 
uint32_t curCluster () const
 
uint32_t curPosition () const
 
bool dirEntry (dir_t *dir)
 
uint16_t dirIndex ()
 
uint32_t dirSize ()
 
void dmpFile (print_t *pr, uint32_t pos, size_t n)
 
bool exists (const char *path)
 
int16_t fgets (char *str, int16_t num, char *delim=0)
 
uint8_t fileAttr () const
 
uint32_t fileSize () const
 
uint32_t firstCluster () const
 
uint8_t getError ()
 
bool getName (char *name, size_t size)
 
void getpos (FatPos_t *pos)
 
bool getSFN (char *name)
 
bool getWriteError ()
 
bool isDir () const
 
bool isFile () const
 
bool isHidden () const
 
bool isLFN () const
 
bool isOpen () const
 
bool isReadOnly () const
 
bool isRoot () const
 
bool isRoot32 () const
 
bool isRootFixed () const
 
bool isSubDir () const
 
bool isSystem () const
 
void ls (uint8_t flags=0)
 
void ls (print_t *pr, uint8_t flags=0, uint8_t indent=0)
 
bool mkdir (FatFile *dir, const char *path, bool pFlag=true)
 
bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
bool open (const char *path, uint8_t oflag=O_READ)
 
bool openNext (FatFile *dirFile, uint8_t oflag=O_READ)
 
bool openRoot (FatVolume *vol)
 
int peek ()
 
bool printCreateDateTime (print_t *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_t *pr)
 
bool printModifyDateTime (print_t *pr)
 
size_t printName ()
 
size_t printName (print_t *pr)
 
size_t printSFN (print_t *pr)
 
int read ()
 
int read (void *buf, size_t nbyte)
 
int8_t readDir (dir_t *dir)
 
bool remove ()
 
bool rename (FatFile *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 (FatFile *file)
 
bool timestamp (uint8_t flags, uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
 
bool truncate (uint32_t length)
 
FatVolumevolume () const
 
int write (const char *str)
 
int write (uint8_t b)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Static Private Member Functions

static FatFilecwd ()
 
static void dateTimeCallback (void(*dateTime)(uint16_t *date, uint16_t *time))
 
static void dateTimeCallbackCancel ()
 
static uint8_t dirName (const dir_t *dir, char *name)
 
static bool legal83Char (uint8_t c)
 
static void printFatDate (uint16_t fatDate)
 
static void printFatDate (print_t *pr, uint16_t fatDate)
 
static void printFatTime (uint16_t fatTime)
 
static void printFatTime (print_t *pr, uint16_t fatTime)
 
static bool remove (FatFile *dirFile, const char *path)
 
static bool setCwd (FatFile *dir)
 
-

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,
size_t 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 * path,
const char * mode 
)
-
-

Open a stream.

-

Open a file and associates the stream with it.

-
Parameters
- - - -
[in]pathfile 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 end-of-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 occurred. 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 in-line 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 in-line 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 push-back 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/utility/StdioStream.h
  • -
  • Arduino/libraries/SdFat/utility/StdioStream.cpp
  • -
-
- - - - diff --git a/libraries/SdFat/html/class_stdio_stream__coll__graph.png b/libraries/SdFat/html/class_stdio_stream__coll__graph.png deleted file mode 100644 index 1cc13e49bd51fa84f20b9934d1173c8ca73a4e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^89-dX!3HEh%`^=MQfx`y?k)`fL2$v|<&zm0SkgUR z978JRyq)8pFYPLEZ2s3g)nz4_>hu z+&?MKQ8v%BoN`LbD|LZumjwgoxpxH_y1CmoZ`(ZYZsoDcx=Etd*Xo|%{rPs!X6gTo zEdov)iaIW)NB+niXg58=+c=-G=B-hJY!gqze1=E)sJ0 z(`fQ}H!Yu8ul()C7dyAv?KvFusH<5>blXii_i4GOlXPFz2hP8jAo!%{?gEL3@C_VM zZo;YUtG1lwbeypE&lSd}XSkoLB>DxrTb|9~N@P3h&(`(*`HqMS-G!NH!p#dp*_5Lm z{?poct#YlnlXhV^AE%Og(}{@+MJgRKVCKr#RxgAZ@~?@^p4wldzCnxsaBmDPEM|` zeZEak+OT<($zEB;w?7|qWTagSbe^j)v-9wP0q) z={w}t$L}}vo}}r;w}r!Fa(DMVasT=ME*4~+xyChbRtXi(I;Pg= z|H=4-#AUVyjjnS=xtY_J9enrP?c;*mwiOrN%KbQZST%9IV>knPup`9)CCoYD`|e8~ z|EQliYu|h2nWdG#Z+(`R{+Vm`d5)*)Ba6Bz%U-hoG`lTcaQ56eKDK5@=S)rp3p=}G z4<9N96eRsEdYfQypui$WL3bn1TE{1_B>VV@xP{x|i`u!5KmG_>Ki}TIe*e2V=Y(9x zROYDC3;N2(Q}?e~ab#lf>;-=U=lr)$H<60;4!QX`=ltHB{i(U#MH_QZAK!Si=;STc zJR7Ukyo?!(7c0Mc|DKsuU8@l8FJ+h)zgn%h|2{c8 zd-cbZbwZ;pf1i*doyQ!9HT!mJ8VliafwVh{4m< K&t;ucLK6UMq%Qja diff --git a/libraries/SdFat/html/class_stdio_stream__inherit__graph.png b/libraries/SdFat/html/class_stdio_stream__inherit__graph.png deleted file mode 100644 index 1cc13e49bd51fa84f20b9934d1173c8ca73a4e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^89-dX!3HEh%`^=MQfx`y?k)`fL2$v|<&zm0SkgUR z978JRyq)8pFYPLEZ2s3g)nz4_>hu z+&?MKQ8v%BoN`LbD|LZumjwgoxpxH_y1CmoZ`(ZYZsoDcx=Etd*Xo|%{rPs!X6gTo zEdov)iaIW)NB+niXg58=+c=-G=B-hJY!gqze1=E)sJ0 z(`fQ}H!Yu8ul()C7dyAv?KvFusH<5>blXii_i4GOlXPFz2hP8jAo!%{?gEL3@C_VM zZo;YUtG1lwbeypE&lSd}XSkoLB>DxrTb|9~N@P3h&(`(*`HqMS-G!NH!p#dp*_5Lm z{?poct#YlnlXhV^AE%Og(}{@+MJgRKVCKr#RxgAZ@~?@^p4wldzCnxsaBmDPEM|` zeZEak+OT<($zEB;w?7|qWTagSbe^j)v-9wP0q) z={w}t$L}}vo}}r;w}r!Fa(DMVasT=ME*4~+xyChbRtXi(I;Pg= z|H=4-#AUVyjjnS=xtY_J9enrP?c;*mwiOrN%KbQZST%9IV>knPup`9)CCoYD`|e8~ z|EQliYu|h2nWdG#Z+(`R{+Vm`d5)*)Ba6Bz%U-hoG`lTcaQ56eKDK5@=S)rp3p=}G z4<9N96eRsEdYfQypui$WL3bn1TE{1_B>VV@xP{x|i`u!5KmG_>Ki}TIe*e2V=Y(9x zROYDC3;N2(Q}?e~ab#lf>;-=U=lr)$H<60;4!QX`=ltHB{i(U#MH_QZAK!Si=;STc zJR7Ukyo?!(7c0Mc|DKsuU8@l8FJ+h)zgn%h|2{c8 zd-cbZbwZ;pf1i*doyQ!9HT!mJ8VliafwVh{4m< K&t;ucLK6UMq%Qja diff --git a/libraries/SdFat/html/classes.html b/libraries/SdFat/html/classes.html deleted file mode 100644 index 84cf755..0000000 --- a/libraries/SdFat/html/classes.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -SdFat: Class Index - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - -
- - - - -
- -
- -
-
-
Class Index
-
-
-
A | C | D | F | I | L | M | O | P | S
- - - - - - - - - - - - - - - - - -
  A  
-
File   SdFile   
  f  
-
  l  
-
  M  
-
SdSpi   
ArduinoInStream   SdSpiBase   fat32_boot   longDirectoryEntry   
ArduinoOutStream   MinimumSerial   SdSpiCard   fat32_fsinfo   
  m  
-
  D  
-
  P  
-
SdSpiLib   fat_boot   
SdSpiSoft   fname_t   masterBootRecord   
DigitalPin   PrintFile   SdVolume   fstream   
  o  
-
  F  
-
  S  
-
SoftSPI   
  i  
-
StdioStream   obufstream   
FatCache   Sd2Card   
  c  
-
ibufstream   ofstream   
FatFile   SdBaseFile   ifstream   ostream   
FatFileSystem   SdFat   cache_t   ios   
  p  
-
FatPos_t   SdFatBase   
  d  
-
ios_base   
FatStreamBase   SdFatLibSpi   iostream   partitionTable   
FatVolume   SdFatSoftSpi   directoryEntry   istream   pgm   
-
A | C | D | F | I | L | M | O | P | S
-
- - - - diff --git a/libraries/SdFat/html/classfstream-members.html b/libraries/SdFat/html/classfstream-members.html deleted file mode 100644 index 19b9c72..0000000 --- a/libraries/SdFat/html/classfstream-members.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -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
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)fstreaminline
close()fstreaminline
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
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
getline(char *str, streamsize n, 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
is_open()fstreaminline
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
open(const char *path, openmode mode=in|out)fstreaminline
FatStreamBase::open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFileprivate
FatStreamBase::open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFileprivate
FatStreamBase::open(FatFile *dirFile, const char *path, uint8_t oflag)FatFileprivate
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
iostream::peek()istream
FatStreamBase::peek()FatFileprivate
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/libraries/SdFat/html/classfstream.html b/libraries/SdFat/html/classfstream.html deleted file mode 100644 index 1af3b4d..0000000 --- a/libraries/SdFat/html/classfstream.html +++ /dev/null @@ -1,3470 +0,0 @@ - - - - - - -SdFat: fstream Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

file input/output stream. - More...

- -

#include <fstream.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 n, 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
 
- - - - - - - - - -

-Private Member Functions

bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
int peek ()
 
-

Detailed Description

-

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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 & ch)
-
-inherited
-
-

Extract a character if one is available.

-
Parameters
- - -
[out]chlocation 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:
    -
  • Arduino/libraries/SdFat/utility/fstream.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/classfstream__coll__graph.png b/libraries/SdFat/html/classfstream__coll__graph.png deleted file mode 100644 index 03e937fc44834fdcbed4ffc5c28c10ef05b7d3cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10062 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 diff --git a/libraries/SdFat/html/classfstream__inherit__graph.png b/libraries/SdFat/html/classfstream__inherit__graph.png deleted file mode 100644 index 03e937fc44834fdcbed4ffc5c28c10ef05b7d3cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10062 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 diff --git a/libraries/SdFat/html/classibufstream-members.html b/libraries/SdFat/html/classibufstream-members.html deleted file mode 100644 index 2d181a9..0000000 --- a/libraries/SdFat/html/classibufstream-members.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -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
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 n, 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/libraries/SdFat/html/classibufstream.html b/libraries/SdFat/html/classibufstream.html deleted file mode 100644 index 680d334..0000000 --- a/libraries/SdFat/html/classibufstream.html +++ /dev/null @@ -1,2578 +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]
- - - - - - - - - - - - - - - - -

-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 n, 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
 
-

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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 & ch)
-
-inherited
-
-

Extract a character if one is available.

-
Parameters
- - -
[out]chlocation 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/libraries/SdFat/html/classibufstream__coll__graph.png b/libraries/SdFat/html/classibufstream__coll__graph.png deleted file mode 100644 index 8678cc9bb4e16044c13bfc727e89b4dbf3689f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2488 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 diff --git a/libraries/SdFat/html/classibufstream__inherit__graph.png b/libraries/SdFat/html/classibufstream__inherit__graph.png deleted file mode 100644 index 5b2c2ed78266596e00e098c981d734277d803fa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3430 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 diff --git a/libraries/SdFat/html/classifstream-members.html b/libraries/SdFat/html/classifstream-members.html deleted file mode 100644 index 64a7aa9..0000000 --- a/libraries/SdFat/html/classifstream-members.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - -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
bad() const iosinline
badbitios_basestatic
basefieldios_basestatic
beg enum valueios_base
binaryios_basestatic
boolalphaios_basestatic
clear(iostate state=goodbit)iosinline
close()ifstreaminline
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
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 n, char delim= '\n')istream
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
istream() (defined in istream)istreaminline
leftios_basestatic
octios_basestatic
off_type typedefios_base
open(const char *path, openmode mode=in)ifstreaminline
FatStreamBase::open(FatFileSystem *fs, const char *path, uint8_t oflag)FatFileprivate
FatStreamBase::open(FatFile *dirFile, uint16_t index, uint8_t oflag)FatFileprivate
FatStreamBase::open(FatFile *dirFile, const char *path, uint8_t oflag)FatFileprivate
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
istream::peek()istream
FatStreamBase::peek()FatFileprivate
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/libraries/SdFat/html/classifstream.html b/libraries/SdFat/html/classifstream.html deleted file mode 100644 index 423bb34..0000000 --- a/libraries/SdFat/html/classifstream.html +++ /dev/null @@ -1,2639 +0,0 @@ - - - - - - -SdFat: ifstream Class Reference - - - - - - - - - -
-
- - - - - - -
-
SdFat -
-
-
- - - - - - - - - -
- -
- -
- -
- -

file input stream. - More...

- -

#include <fstream.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 n, 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
 
- - - - - - - - - -

-Private Member Functions

bool open (FatFileSystem *fs, const char *path, uint8_t oflag)
 
bool open (FatFile *dirFile, uint16_t index, uint8_t oflag)
 
bool open (FatFile *dirFile, const char *path, uint8_t oflag)
 
int peek ()
 
-

Detailed Description

-

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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 & ch)
-
-inherited
-
-

Extract a character if one is available.

-
Parameters
- - -
[out]chlocation 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:
    -
  • Arduino/libraries/SdFat/utility/fstream.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/classifstream__coll__graph.png b/libraries/SdFat/html/classifstream__coll__graph.png deleted file mode 100644 index 2e990d4c142650ae4cd0d097de79076f21161056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6572 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 a_r+`XwdpUv4b1inpsA`0tyQ*q`F{YXHD3|{ diff --git a/libraries/SdFat/html/classifstream__inherit__graph.png b/libraries/SdFat/html/classifstream__inherit__graph.png deleted file mode 100644 index 2e990d4c142650ae4cd0d097de79076f21161056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6572 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 a_r+`XwdpUv4b1inpsA`0tyQ*q`F{YXHD3|{ diff --git a/libraries/SdFat/html/classios-members.html b/libraries/SdFat/html/classios-members.html deleted file mode 100644 index 475108d..0000000 --- a/libraries/SdFat/html/classios-members.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -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
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/libraries/SdFat/html/classios.html b/libraries/SdFat/html/classios.html deleted file mode 100644 index 89f0aa2..0000000 --- a/libraries/SdFat/html/classios.html +++ /dev/null @@ -1,1489 +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]
- - - - - - - - - - - - - - - - -

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

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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/utility/ios.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/classios__base-members.html b/libraries/SdFat/html/classios__base-members.html deleted file mode 100644 index 732970e..0000000 --- a/libraries/SdFat/html/classios__base-members.html +++ /dev/null @@ -1,145 +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_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
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/libraries/SdFat/html/classios__base.html b/libraries/SdFat/html/classios__base.html deleted file mode 100644 index c7675a3..0000000 --- a/libraries/SdFat/html/classios__base.html +++ /dev/null @@ -1,1149 +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]
- - - - - - - - - - - - - - - - -

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

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
- -
-
- -
-
- - - - - -
- - - - - - - -
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/utility/ios.h
  • -
-
- - - - diff --git a/libraries/SdFat/html/classios__base__inherit__graph.png b/libraries/SdFat/html/classios__base__inherit__graph.png deleted file mode 100644 index 3d6625be74c8eb6c3d6c5d776986a78667da4d48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19521 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