Skip to content

Commit 72b0eef

Browse files
authored
Merge pull request #24 from bcmi-labs/development
fix: decoder.send must ensure transport sends all the bytes
2 parents 13c66b4 + eed7554 commit 72b0eef

File tree

6 files changed

+13
-7
lines changed

6 files changed

+13
-7
lines changed

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"url": "https://github.com/eigen-value",
1212
"maintainer": true
1313
},
14-
"version": "0.1.1",
14+
"version": "0.1.2",
1515
"license": "MIT",
1616
"frameworks": "arduino",
1717
"platforms": "*",

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Arduino_RPClite
2-
version=0.1.1
2+
version=0.1.2
33
author=Lucio Rossi (eigen-value)
44
maintainer=Lucio Rossi (eigen-value)
55
sentence=A MessagePack RPC library for Arduino

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/client.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class RPCClient {
3737

3838
// blocking call
3939
while (!get_response(result)){
40-
//delay(1);
4140
}
4241

4342
return (lastError.code == NO_ERR);

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) {

src/server.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,11 @@ class RPCServer {
3535
get_rpc();
3636
process_request();
3737
send_response();
38-
//delay(1);
3938
}
4039

4140
bool get_rpc() {
4241
decoder->decode();
4342
if (_rpc_size > 0) return true; // Already have a request
44-
// TODO USE A QUEUE
4543
_rpc_size = decoder->get_request(_rpc_buffer, RPC_BUFFER_SIZE);
4644
return _rpc_size > 0;
4745
}

0 commit comments

Comments
 (0)