Skip to content

Commit 4ef84f6

Browse files
ficetoficeto
ficeto
authored and
ficeto
committed
add template methods for stream to stream writes to SD and FS
1 parent 1ff1914 commit 4ef84f6

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

hardware/esp8266com/esp8266/cores/esp8266/FileSystem.h

+22
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,28 @@ class FSFile : public Stream {
5454
operator bool(){ return _file > 0; }
5555
char * name();
5656
boolean isDirectory(void);
57+
58+
template<typename T> size_t write(T &src){
59+
uint8_t obuf[64];
60+
size_t doneLen = 0;
61+
size_t sentLen;
62+
int i;
63+
64+
while (src.available() > 64){
65+
src.read(obuf, 64);
66+
sentLen = write(obuf, 64);
67+
doneLen = doneLen + sentLen;
68+
if(sentLen != 64){
69+
return doneLen;
70+
}
71+
}
72+
73+
size_t leftLen = src.available();
74+
src.read(obuf, leftLen);
75+
sentLen = write(obuf, leftLen);
76+
doneLen = doneLen + sentLen;
77+
return doneLen;
78+
}
5779

5880
using Print::write;
5981
};

libraries/SD/src/SD.h

+22
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,28 @@ class File : public Stream {
4848
boolean isDirectory(void);
4949
File openNextFile(uint8_t mode = O_RDONLY);
5050
void rewindDirectory(void);
51+
52+
template<typename T> size_t write(T &src){
53+
uint8_t obuf[512];
54+
size_t doneLen = 0;
55+
size_t sentLen;
56+
int i;
57+
58+
while (src.available() > 512){
59+
src.read(obuf, 512);
60+
sentLen = write(obuf, 512);
61+
doneLen = doneLen + sentLen;
62+
if(sentLen != 512){
63+
return doneLen;
64+
}
65+
}
66+
67+
size_t leftLen = src.available();
68+
src.read(obuf, leftLen);
69+
sentLen = write(obuf, leftLen);
70+
doneLen = doneLen + sentLen;
71+
return doneLen;
72+
}
5173

5274
using Print::write;
5375
};

0 commit comments

Comments
 (0)