diff --git a/cores/esp8266/FileSystem.h b/cores/esp8266/FileSystem.h index f83a83d1a..8704f260c 100755 --- a/cores/esp8266/FileSystem.h +++ b/cores/esp8266/FileSystem.h @@ -54,6 +54,28 @@ public: operator bool(){ return _file > 0; } char * name(); boolean isDirectory(void); + + template size_t write(T &src){ + uint8_t obuf[64]; + size_t doneLen = 0; + size_t sentLen; + int i; + + while (src.available() > 64){ + src.read(obuf, 64); + sentLen = write(obuf, 64); + doneLen = doneLen + sentLen; + if(sentLen != 64){ + return doneLen; + } + } + + size_t leftLen = src.available(); + src.read(obuf, leftLen); + sentLen = write(obuf, leftLen); + doneLen = doneLen + sentLen; + return doneLen; + } using Print::write; }; diff --git a/libraries/SD/src/SD.h b/libraries/SD/src/SD.h index 449984219..93c79138b 100644 --- a/libraries/SD/src/SD.h +++ b/libraries/SD/src/SD.h @@ -48,6 +48,28 @@ public: boolean isDirectory(void); File openNextFile(uint8_t mode = O_RDONLY); void rewindDirectory(void); + + template size_t write(T &src){ + uint8_t obuf[512]; + size_t doneLen = 0; + size_t sentLen; + int i; + + while (src.available() > 512){ + src.read(obuf, 512); + sentLen = write(obuf, 512); + doneLen = doneLen + sentLen; + if(sentLen != 512){ + return doneLen; + } + } + + size_t leftLen = src.available(); + src.read(obuf, leftLen); + sentLen = write(obuf, leftLen); + doneLen = doneLen + sentLen; + return doneLen; + } using Print::write; };