17 size_t readBytes(uint8_t *data,
size_t len) {
18 if (p_in ==
nullptr)
return 0;
20 int to_read = available();
23 if (to_read > len) to_read = len;
25 result = p_in->readBytes(data, to_read);
27 n_open_read -= result;
28 is_complete = n_open_read == 0;
30 if (is_complete) n_open_read = -1;
35 size_t write(
const uint8_t *data,
size_t len) {
36 if (p_out ==
nullptr)
return 0;
38 p_out->write((uint8_t *)&len,
sizeof(
size_t));
40 return p_out->write(data, len);
44 if (p_in ==
nullptr)
return 0;
45 if (n_open_read >= 0)
return n_open_read;
47 if (p_in->available() <
sizeof(
size_t))
return 0;
49 p_in->readBytes((uint8_t *)&n_open_read,
sizeof(
size_t));
54 virtual size_t write(uint8_t ch) {
return 0; }
56 int availableForWrite()
override {
57 if (max_object_size > 0)
return max_object_size;
58 if (p_out ==
nullptr)
return DEFAULT_BUFFER_SIZE;
59 return p_out->availableForWrite();
64 void setMaxObjectSize(
size_t size) { max_object_size = size; }
67 bool isObjectComplete() {
return is_complete; }
71 Print *p_out =
nullptr;
73 int max_object_size = 0;
74 bool is_complete =
true;