From 2e9a038f684740004b68a6a6b7e4e8ab3799a664 Mon Sep 17 00:00:00 2001 From: ficeto <ficeto@Hristos-Mac-mini-2.local> Date: Thu, 14 May 2015 12:41:24 +0300 Subject: [PATCH] add template methods for stream to stream writes to SD and FS --- cores/esp8266/FileSystem.h | 22 ++++++++++++++++++++++ libraries/SD/src/SD.h | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) 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<typename T> 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<typename T> 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; };