18 size_t readBytes(uint8_t *data,
size_t len) {
19 if (p_in ==
nullptr)
return 0;
21 int to_read = available();
24 if (to_read > len) to_read = len;
26 result = p_in->readBytes(data, to_read);
28 n_open_read -= result;
29 is_complete = n_open_read == 0;
31 if (is_complete) n_open_read = -1;
36 size_t write(
const uint8_t *data,
size_t len) {
37 if (p_out ==
nullptr)
return 0;
39 p_out->write((uint8_t *)&len,
sizeof(
size_t));
41 return p_out->write(data, len);
45 if (p_in ==
nullptr)
return 0;
46 if (n_open_read >= 0)
return n_open_read;
48 if (p_in->available() <
sizeof(
size_t))
return 0;
50 p_in->readBytes((uint8_t *)&n_open_read,
sizeof(
size_t));
55 virtual size_t write(uint8_t ch) {
return 0; }
57 int availableForWrite()
override {
58 if (max_object_size > 0)
return max_object_size;
59 if (p_out ==
nullptr)
return DEFAULT_BUFFER_SIZE;
60 return p_out->availableForWrite();
65 void setMaxObjectSize(
size_t size) { max_object_size = size; }
68 bool isObjectComplete() {
return is_complete; }
72 Print *p_out =
nullptr;
74 int max_object_size = 0;
75 bool is_complete =
true;