Skip to content

Commit 36cc03a

Browse files
committed
feat: monitor Stream methods impl TBT
1 parent 931a179 commit 36cc03a

File tree

1 file changed

+59
-6
lines changed

1 file changed

+59
-6
lines changed

src/monitor.h

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class BridgeMonitor: public Stream {
1818

1919
private:
2020
BridgeClass& bridge;
21-
RingBufferN<BufferSize> buffer;
21+
RingBufferN<BufferSize> temp_buffer;
2222
bool is_connected = false;
2323

2424
public:
@@ -33,18 +33,53 @@ class BridgeMonitor: public Stream {
3333
}
3434

3535
int read() override {
36-
return 0;
36+
uint8_t c;
37+
read(&c, 1);
38+
return c;
39+
}
40+
41+
int read(uint8_t* buffer, size_t size) {
42+
int i = 0;
43+
while (temp_buffer.available() && i < size) {
44+
buffer[i++] = temp_buffer.read_char();
45+
}
46+
return i;
3747
}
3848

3949
int available() override {
40-
return 0;
50+
int size = temp_buffer.availableForStore();
51+
if (size > 0) _read(size);
52+
return temp_buffer.available();
4153
}
4254

4355
int peek() override {
44-
return 0;
56+
if (temp_buffer.available()) {
57+
return temp_buffer.peek();
58+
}
4559
}
4660

4761
size_t write(uint8_t c) override {
62+
return write(&c, 1);
63+
}
64+
65+
size_t write(const uint8_t* buffer, size_t size) override {
66+
67+
MsgPack::str_t send_buffer;
68+
69+
for (size_t i = 0; i < size; ++i) {
70+
#ifdef ARDUINO
71+
send_buffer += (char)buffer[i];
72+
#else
73+
send_buffer.push_back(static_cast<char>(buffer[i]));
74+
#endif
75+
}
76+
77+
size_t written;
78+
bool ret = bridge.call(MON_WRITE_METHOD, written, send_buffer);
79+
if (ret) {
80+
return written;
81+
}
82+
4883
return 0;
4984
}
5085

@@ -66,8 +101,26 @@ class BridgeMonitor: public Stream {
66101
return size;
67102
}
68103

69-
bool read(String& message, size_t size) {
70-
return bridge.call(MON_READ_METHOD, message, size);
104+
int _read(size_t size) {
105+
106+
if (size == 0) return 0;
107+
108+
MsgPack::str_t message;
109+
bool ret = bridge.call(MON_READ_METHOD, message, size);
110+
111+
if (ret) {
112+
for (size_t i = 0; i < message.length(); ++i) {
113+
temp_buffer.store_char(message[i]);
114+
}
115+
return message.length();
116+
}
117+
118+
// if (bridge.lastError.code > NO_ERR) {
119+
// is_connected = false;
120+
// }
121+
122+
return 0;
123+
71124
}
72125

73126

0 commit comments

Comments
 (0)