Skip to content

Commit 545007f

Browse files
committed
fix: decoder.send must ensure transport sends all the bytes
1 parent 13c66b4 commit 545007f

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/SerialTransport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class SerialTransport: public ITransport {
2121
size_t write(const uint8_t* data, size_t size) override {
2222
_stream->write(data, size);
2323
return size;
24-
}
24+
}
2525

2626
size_t read(uint8_t* buffer, size_t size) override {
2727
_stream->setTimeout(0);

src/decoder.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,17 @@ class RpcDecoder {
163163

164164
inline bool buffer_empty() const { return _bytes_stored == 0;}
165165

166+
// This is a blocking send, under the assumption _transport.write will always succeed eventually
166167
inline size_t send(const uint8_t* data, const size_t size) {
167-
return _transport.write(data, size);
168+
169+
size_t offset = 0;
170+
171+
while (offset < size) {
172+
size_t bytes_written = _transport.write(data + offset, size - offset);
173+
offset += bytes_written;
174+
}
175+
176+
return offset;
168177
}
169178

170179
size_t pop_packet(uint8_t* buffer, size_t buffer_size) {

0 commit comments

Comments
 (0)