diff --git a/libraries/ArduinoTestSuite/examples/ATS_SD_File/ATS_SD_File.pde b/libraries/ArduinoTestSuite/examples/ATS_SD_File/ATS_SD_File.pde index 95527fefd..c4894200f 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_SD_File/ATS_SD_File.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_SD_File/ATS_SD_File.pde @@ -15,11 +15,25 @@ void setup() ATS_PrintTestStatus("SD.begin()", b = SD.begin(4)); if (!b) goto done; - f = SD.open("test.txt", true, false); + f = SD.open("test.txt", SD_TRUNCATE); ATS_PrintTestStatus("SD.open()", f); if (!f) goto done; - f.print("abcdefgh"); + f.print("1234"); + f.close(); + + f = SD.open("test.txt", SD_TRUNCATE); + ATS_PrintTestStatus("SD.open()", f); + if (!f) goto done; + + f.print("abcde"); + f.close(); + + f = SD.open("test.txt", SD_APPEND); + ATS_PrintTestStatus("SD.open()", f); + if (!f) goto done; + + f.print("fgh"); f.close(); f = SD.open("test.txt"); @@ -57,7 +71,7 @@ void setup() f.close(); - f = SD.open("test2.txt", true, false); + f = SD.open("test2.txt", SD_TRUNCATE); ATS_PrintTestStatus("SD.open()", f); if (!f) goto done; diff --git a/libraries/ArduinoTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde b/libraries/ArduinoTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde index 50a7a741d..9bd842a8e 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_SD_Files/ATS_SD_Files.pde @@ -13,7 +13,7 @@ void setup() if (!b) goto done; ATS_PrintTestStatus("!SD.exists()", !SD.exists("asdf.txt")); - ATS_PrintTestStatus("SD.open()", f = SD.open("asdf.txt", true)); f.close(); + ATS_PrintTestStatus("SD.open()", f = SD.open("asdf.txt", SD_TRUNCATE)); 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")); @@ -48,13 +48,13 @@ void setup() ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y")); ATS_PrintTestStatus("!SD.exists()", !SD.exists("x/y/z")); - ATS_PrintTestStatus("!SD.open()", !(f = SD.open("asdf/asdf.txt", true))); f.close(); + ATS_PrintTestStatus("!SD.open()", !(f = SD.open("asdf/asdf.txt", SD_TRUNCATE))); 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 = SD.open("asdf/asdf.txt", true)); f.close(); + ATS_PrintTestStatus("SD.open()", f = SD.open("asdf/asdf.txt", SD_TRUNCATE)); 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")); diff --git a/libraries/SD/SD.cpp b/libraries/SD/SD.cpp index 2faade5aa..356a2986a 100644 --- a/libraries/SD/SD.cpp +++ b/libraries/SD/SD.cpp @@ -343,7 +343,7 @@ boolean SDClass::begin(uint8_t csPin) { } -File SDClass::open(char *filepath, boolean write, boolean append) { +File SDClass::open(char *filepath, uint8_t mode) { /* Open the supplied file path for reading or writing. @@ -369,18 +369,7 @@ File SDClass::open(char *filepath, boolean write, boolean append) { // TODO: Allow for read&write? (Possibly not, as it requires seek.) - uint8_t oflag = O_RDONLY; - - if (write) { - oflag = O_CREAT | O_WRITE; - if (append) { - oflag |= O_APPEND; - } else { - oflag |= O_TRUNC; - } - } - - fileOpenMode = oflag; + fileOpenMode = mode; walkPath(filepath, root, callback_openPath, this); return File(); diff --git a/libraries/SD/SD.h b/libraries/SD/SD.h index 774e3d968..6d81ee5c8 100644 --- a/libraries/SD/SD.h +++ b/libraries/SD/SD.h @@ -20,6 +20,10 @@ #include #include +#define SD_READ O_READ +#define SD_TRUNCATE (O_WRITE | O_CREAT | O_TRUNC) +#define SD_APPEND (O_WRITE | O_CREAT | O_APPEND) + class File : public Stream { public: virtual void write(uint8_t); @@ -49,7 +53,7 @@ public: // Open the specified file/directory with the supplied mode (e.g. read or // write, etc). Returns a File object for interacting with the file. // Note that currently only one file can be open at a time. - File open(char *filename, boolean write = false, boolean append = true); + File open(char *filename, uint8_t mode = SD_READ); // Methods to determine if the requested file path exists. boolean exists(char *filepath);