diff --git a/src/bridge.h b/src/bridge.h index e0f2069..8cf89ab 100644 --- a/src/bridge.h +++ b/src/bridge.h @@ -16,6 +16,8 @@ #define RESET_METHOD "$/reset" #define BIND_METHOD "$/register" +#define GET_VERSION_METHOD "$/version" + //#define BRIDGE_ERROR "$/bridgeLog" #define UPDATE_THREAD_STACK_SIZE 500 @@ -157,6 +159,8 @@ class BridgeClass { bool started = false; + MsgPack::str_t router_ver; + public: explicit BridgeClass(HardwareSerial& serial) { @@ -203,6 +207,10 @@ class BridgeClass { return res; } + bool getRouterVersion(MsgPack::str_t& version) { + return call(GET_VERSION_METHOD).result(version); + } + template bool provide(const MsgPack::str_t& name, F&& func) { k_mutex_lock(&bridge_mutex, K_FOREVER); diff --git a/src/monitor.h b/src/monitor.h index 8470793..6290752 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -31,6 +31,7 @@ class BridgeMonitor: public Stream { RingBufferN temp_buffer; struct k_mutex monitor_mutex{}; bool _connected = false; + bool _compatibility_mode; public: explicit BridgeMonitor(BridgeClass& bridge): bridge(&bridge) {} @@ -52,6 +53,8 @@ class BridgeMonitor: public Stream { k_mutex_lock(&monitor_mutex, K_FOREVER); bool out = false; _connected = bridge->call(MON_CONNECTED_METHOD).result(out) && out; + MsgPack::str_t ver; + _compatibility_mode = !bridge->call(GET_VERSION_METHOD).result(ver); k_mutex_unlock(&monitor_mutex); return out; } @@ -114,10 +117,15 @@ class BridgeMonitor: public Stream { send_buffer += static_cast(buffer[i]); } - size_t written; - const bool ret = bridge->call(MON_WRITE_METHOD, send_buffer).result(written); + size_t written = 0; - return ret? written : 0; + if (_compatibility_mode) { + bridge->call(MON_WRITE_METHOD, send_buffer).result(written); + } else { + bridge->notify(MON_WRITE_METHOD, send_buffer); + } + + return written; } bool reset() {