From 545007f790ba57e7e1e36cb62ac6d83e4f2920e7 Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Mon, 28 Jul 2025 10:23:39 +0200 Subject: [PATCH 1/2] fix: decoder.send must ensure transport sends all the bytes --- src/SerialTransport.h | 2 +- src/decoder.h | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/SerialTransport.h b/src/SerialTransport.h index 1dd6443..982a655 100644 --- a/src/SerialTransport.h +++ b/src/SerialTransport.h @@ -21,7 +21,7 @@ class SerialTransport: public ITransport { size_t write(const uint8_t* data, size_t size) override { _stream->write(data, size); return size; - } + } size_t read(uint8_t* buffer, size_t size) override { _stream->setTimeout(0); diff --git a/src/decoder.h b/src/decoder.h index 3b91e38..89f76f3 100644 --- a/src/decoder.h +++ b/src/decoder.h @@ -163,8 +163,17 @@ class RpcDecoder { inline bool buffer_empty() const { return _bytes_stored == 0;} + // This is a blocking send, under the assumption _transport.write will always succeed eventually inline size_t send(const uint8_t* data, const size_t size) { - return _transport.write(data, size); + + size_t offset = 0; + + while (offset < size) { + size_t bytes_written = _transport.write(data + offset, size - offset); + offset += bytes_written; + } + + return offset; } size_t pop_packet(uint8_t* buffer, size_t buffer_size) { From eed75543c8105cc2ffc5f3d2315a9b681629bede Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Mon, 28 Jul 2025 18:15:05 +0200 Subject: [PATCH 2/2] ver 1.0.2 --- library.json | 2 +- library.properties | 2 +- src/client.h | 1 - src/server.h | 2 -- 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/library.json b/library.json index 87716a1..d368dc4 100644 --- a/library.json +++ b/library.json @@ -11,7 +11,7 @@ "url": "https://github.com/eigen-value", "maintainer": true }, - "version": "0.1.1", + "version": "0.1.2", "license": "MIT", "frameworks": "arduino", "platforms": "*", diff --git a/library.properties b/library.properties index 91ca62d..4fdd443 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Arduino_RPClite -version=0.1.1 +version=0.1.2 author=Lucio Rossi (eigen-value) maintainer=Lucio Rossi (eigen-value) sentence=A MessagePack RPC library for Arduino diff --git a/src/client.h b/src/client.h index b2e714b..b22d81a 100644 --- a/src/client.h +++ b/src/client.h @@ -37,7 +37,6 @@ class RPCClient { // blocking call while (!get_response(result)){ - //delay(1); } return (lastError.code == NO_ERR); diff --git a/src/server.h b/src/server.h index 4103141..26035f2 100644 --- a/src/server.h +++ b/src/server.h @@ -35,13 +35,11 @@ class RPCServer { get_rpc(); process_request(); send_response(); - //delay(1); } bool get_rpc() { decoder->decode(); if (_rpc_size > 0) return true; // Already have a request - // TODO USE A QUEUE _rpc_size = decoder->get_request(_rpc_buffer, RPC_BUFFER_SIZE); return _rpc_size > 0; }