Skip to content

Commit 8b155f7

Browse files
committed
Merge remote-tracking branch 'origin/main' into wait_for_router_service
2 parents 8fbc248 + e7d2aee commit 8b155f7

File tree

9 files changed

+54
-22
lines changed

9 files changed

+54
-22
lines changed

examples/test_rpc_thread/test_rpc_thread.ino

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88

99
void rpc_thread_entry(void *p1, void *p2, void *p3) {
10+
(void)p3; // unused argument
11+
1012
RpcCall<MsgPack::str_t> *call = reinterpret_cast<RpcCall<MsgPack::str_t>*>(p1);
1113
struct k_mutex *mtx = reinterpret_cast<struct k_mutex*>(p2);
1214

extras/test/udp_echo/udp_echo.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515

1616
#include <Arduino.h>
17-
#include "src/Arduino_RouterBridge.h"
17+
#include "Arduino_RouterBridge.h"
1818

1919
// Configuration
2020
#define LOCAL_UDP_PORT 8888 // Local port to listen on
@@ -193,4 +193,4 @@ void printStatistics() {
193193
}
194194
Monitor.println("%)");
195195
Monitor.println("===========================================\n");
196-
}
196+
}

extras/test/udp_test/udp_test.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
#include <Arduino.h>
9-
#include "src/Arduino_RouterBridge.h"
9+
#include "Arduino_RouterBridge.h"
1010

1111
// Test configuration
1212
#define TEST_UDP_PORT 8888
@@ -372,4 +372,4 @@ void setup() {
372372
void loop() {
373373
// Test suite runs once in setup()
374374
delay(1000);
375-
}
375+
}

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"maintainer": true
1515
}
1616
],
17-
"version": "0.2.2",
17+
"version": "0.3.0",
1818
"license": "MPL2.0",
1919
"frameworks": "arduino",
2020
"platforms": "*",

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Arduino_RouterBridge
2-
version=0.2.2
2+
version=0.3.0
33
author=Arduino
44
maintainer=Arduino
55
sentence=A RPC bridge for Arduino UNO Q boards

src/bridge.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
#define RESET_METHOD "$/reset"
1818
#define BIND_METHOD "$/register"
19+
#define GET_VERSION_METHOD "$/version"
20+
1921
//#define BRIDGE_ERROR "$/bridgeLog"
2022

2123
#define UPDATE_THREAD_STACK_SIZE 500
@@ -231,6 +233,10 @@ class BridgeClass {
231233
return res;
232234
}
233235

236+
bool getRouterVersion(MsgPack::str_t& version) {
237+
return call(GET_VERSION_METHOD).result(version);
238+
}
239+
234240
template<typename F>
235241
bool provide(const MsgPack::str_t& name, F&& func) {
236242
k_mutex_lock(&bridge_mutex, K_FOREVER);

src/monitor.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,18 @@ class BridgeMonitor: public Stream {
3131
RingBufferN<BufferSize> temp_buffer;
3232
struct k_mutex monitor_mutex{};
3333
bool _connected = false;
34+
bool _compatibility_mode = true;
3435

3536
public:
3637
explicit BridgeMonitor(BridgeClass& bridge): bridge(&bridge) {}
3738

3839
using Print::write;
3940

4041
bool begin(unsigned long _legacy_baud=0, uint16_t _legacy_config=0) {
42+
// unused parameters for compatibility with Stream
43+
(void)_legacy_baud;
44+
(void)_legacy_config;
45+
4146
k_mutex_init(&monitor_mutex);
4247

4348
if (is_connected()) return true;
@@ -55,6 +60,8 @@ class BridgeMonitor: public Stream {
5560

5661
bool out = false;
5762
_connected = bridge->call(MON_CONNECTED_METHOD).result(out) && out;
63+
MsgPack::str_t ver;
64+
_compatibility_mode = !bridge->getRouterVersion(ver);
5865
k_mutex_unlock(&monitor_mutex);
5966
return out;
6067
}
@@ -71,19 +78,19 @@ class BridgeMonitor: public Stream {
7178
}
7279

7380
int read() override {
74-
uint8_t c;
81+
uint8_t c = 0;
7582
read(&c, 1);
7683
return c;
7784
}
7885

7986
int read(uint8_t* buffer, size_t size) {
8087
k_mutex_lock(&monitor_mutex, K_FOREVER);
81-
int i = 0;
88+
size_t i = 0;
8289
while (temp_buffer.available() && i < size) {
8390
buffer[i++] = temp_buffer.read_char();
8491
}
8592
k_mutex_unlock(&monitor_mutex);
86-
return i;
93+
return (int)i;
8794
}
8895

8996
int available() override {
@@ -117,10 +124,15 @@ class BridgeMonitor: public Stream {
117124
send_buffer += static_cast<char>(buffer[i]);
118125
}
119126

120-
size_t written;
121-
const bool ret = bridge->call(MON_WRITE_METHOD, send_buffer).result(written);
127+
size_t written = 0;
128+
129+
if (_compatibility_mode) {
130+
bridge->call(MON_WRITE_METHOD, send_buffer).result(written);
131+
} else {
132+
bridge->notify(MON_WRITE_METHOD, send_buffer);
133+
}
122134

123-
return ret? written : 0;
135+
return written;
124136
}
125137

126138
bool reset() {
@@ -167,4 +179,4 @@ extern BridgeClass Bridge;
167179

168180
inline BridgeMonitor<> Monitor(Bridge);
169181

170-
#endif // BRIDGE_MONITOR_H
182+
#endif // BRIDGE_MONITOR_H

src/tcp_client.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ class BridgeTCPClient : public Client {
132132

133133
int read(uint8_t *buf, size_t size) override {
134134
k_mutex_lock(&client_mutex, K_FOREVER);
135-
int i = 0;
135+
size_t i = 0;
136136
while (temp_buffer.available() && i < size) {
137137
buf[i++] = temp_buffer.read_char();
138138
}
139139
k_mutex_unlock(&client_mutex);
140-
return i;
140+
return (int)i;
141141
}
142142

143143
int peek() override {
@@ -193,16 +193,26 @@ class BridgeTCPClient : public Client {
193193
}
194194

195195
MsgPack::arr_t<uint8_t> message;
196-
RpcCall async_rpc = bridge->call(TCP_READ_METHOD, connection_id, size, read_timeout);
197-
const bool ret = async_rpc.result(message);
196+
bool ret;
197+
int err;
198+
199+
if (read_timeout > 0) {
200+
RpcCall async_rpc_timeout = bridge->call(TCP_READ_METHOD, connection_id, size, read_timeout);
201+
ret = async_rpc_timeout.result(message);
202+
err = async_rpc_timeout.getErrorCode();
203+
} else {
204+
RpcCall async_rpc = bridge->call(TCP_READ_METHOD, connection_id, size);
205+
ret = async_rpc.result(message);
206+
err = async_rpc.getErrorCode();
207+
}
198208

199209
if (ret) {
200210
for (size_t i = 0; i < message.size(); ++i) {
201211
temp_buffer.store_char(static_cast<char>(message[i]));
202212
}
203213
}
204214

205-
if (async_rpc.getErrorCode() > NO_ERR) {
215+
if (err > NO_ERR) {
206216
_connected = false;
207217
}
208218

src/udp_bridge.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ class BridgeUDP final: public UDP {
9696
}
9797

9898
uint8_t beginMulticast(IPAddress ip, uint16_t port) override {
99+
(void)ip; // unused argument
100+
99101
if (!init()) {
100102
return 0;
101103
}
@@ -246,7 +248,7 @@ class BridgeUDP final: public UDP {
246248
// reading stops when the UDP package has been read completely (_remaining = 0)
247249
int read(unsigned char *buffer, size_t len) override {
248250
k_mutex_lock(&udp_mutex, K_FOREVER);
249-
int i = 0;
251+
size_t i = 0;
250252
while (_remaining && i < len) {
251253
if (!temp_buffer.available() && !available()) {
252254
k_msleep(1);
@@ -256,12 +258,12 @@ class BridgeUDP final: public UDP {
256258
_remaining--;
257259
}
258260
k_mutex_unlock(&udp_mutex);
259-
return i;
261+
return (int)i;
260262
}
261263

262264
int read(char *buffer, size_t len) override {
263265
k_mutex_lock(&udp_mutex, K_FOREVER);
264-
int i = 0;
266+
size_t i = 0;
265267
while (_remaining && i < len) {
266268
if (!temp_buffer.available() && !available()) {
267269
k_msleep(1);
@@ -271,7 +273,7 @@ class BridgeUDP final: public UDP {
271273
_remaining--;
272274
}
273275
k_mutex_unlock(&udp_mutex);
274-
return i;
276+
return (int)i;
275277
}
276278

277279
int peek() override {

0 commit comments

Comments
 (0)