From 12c22c7cd24cd6217026710905e21b6e45e310f3 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Tue, 5 Mar 2024 09:10:13 +0100 Subject: [PATCH] update Packet classes --- src/concurrency/PacketQueue.h | 2 +- src/mesh/api/PacketAPI.cpp | 13 ++++++++----- src/mesh/sharedMem/MeshPacketClient.cpp | 17 +++++++++-------- src/mesh/sharedMem/PacketClient.cpp | 3 +++ src/mesh/sharedMem/PacketClient.h | 2 +- src/mesh/sharedMem/PacketServer.cpp | 13 ++----------- src/mesh/sharedMem/PacketServer.h | 4 +++- variants/portduino/platformio.ini | 2 +- variants/t-deck/platformio.ini | 4 ++-- 9 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/concurrency/PacketQueue.h b/src/concurrency/PacketQueue.h index 312dac5e5..7c909e682 100644 --- a/src/concurrency/PacketQueue.h +++ b/src/concurrency/PacketQueue.h @@ -52,7 +52,7 @@ template class PacketQueue { std::lock_guard lock(mutex); if (queue.empty()) - return {nullptr}; // std::move(T()); + return {nullptr}; auto packet = queue.front()->move(); queue.pop(); return packet; diff --git a/src/mesh/api/PacketAPI.cpp b/src/mesh/api/PacketAPI.cpp index d5507c98a..9b38db7a6 100644 --- a/src/mesh/api/PacketAPI.cpp +++ b/src/mesh/api/PacketAPI.cpp @@ -18,8 +18,10 @@ int32_t PacketAPI::runOnce() bool PacketAPI::receivePacket(void) { - if (server->hasData()) { + bool data_received = false; + while (server->hasData()) { isConnected = true; + data_received = true; // TODO: think about redesign or drop class MeshPacketServer meshtastic_ToRadio *mr; @@ -51,9 +53,8 @@ bool PacketAPI::receivePacket(void) LOG_ERROR("Error: unhandled meshtastic_ToRadio variant: %d\n", mr->which_payload_variant); break; } - return true; - } else - return false; + } + return data_received; } bool PacketAPI::sendPacket(void) @@ -61,11 +62,13 @@ bool PacketAPI::sendPacket(void) // fill dummy buffer; we don't use it, we directly send the fromRadio structure uint32_t len = getFromRadio(txBuf); if (len != 0) { + static uint32_t id = 0; + fromRadioScratch.id = ++id; // TODO: think about redesign or drop class MeshPacketServer // if (typeid(*server) == typeid(MeshPacketServer)) // return dynamic_cast(server)->sendPacket(fromRadioScratch); // else - return server->sendPacket(DataPacket(fromRadioScratch.id, fromRadioScratch)); + return server->sendPacket(DataPacket(id, fromRadioScratch)); } else return false; } diff --git a/src/mesh/sharedMem/MeshPacketClient.cpp b/src/mesh/sharedMem/MeshPacketClient.cpp index 7560a1604..67a5350d2 100644 --- a/src/mesh/sharedMem/MeshPacketClient.cpp +++ b/src/mesh/sharedMem/MeshPacketClient.cpp @@ -9,12 +9,12 @@ MeshPacketClient::MeshPacketClient() {} bool MeshPacketClient::connect(void) { - PacketClient::connect(); + return PacketClient::connect(); } bool MeshPacketClient::disconnect(void) { - PacketClient::disconnect(); + return PacketClient::disconnect(); } bool MeshPacketClient::isConnected(void) @@ -25,15 +25,16 @@ bool MeshPacketClient::isConnected(void) bool MeshPacketClient::send(meshtastic_ToRadio &&to) { static uint32_t id = 0; - PacketClient::sendPacket(DataPacket(++id, to)); + return PacketClient::sendPacket(DataPacket(++id, to)); } meshtastic_FromRadio MeshPacketClient::receive(void) { - auto p = receivePacket()->move(); - if (p) { - return static_cast *>(p.get())->getData(); - } else { - return meshtastic_FromRadio(); + if (hasData()) { + auto p = receivePacket(); + if (p) { + return static_cast *>(p->move().get())->getData(); + } } + return meshtastic_FromRadio(); } diff --git a/src/mesh/sharedMem/PacketClient.cpp b/src/mesh/sharedMem/PacketClient.cpp index 2a819d155..221345d94 100644 --- a/src/mesh/sharedMem/PacketClient.cpp +++ b/src/mesh/sharedMem/PacketClient.cpp @@ -16,11 +16,13 @@ PacketClient::PacketClient() : queue(nullptr) {} bool PacketClient::connect(void) { is_connected = true; + return is_connected; } bool PacketClient::disconnect(void) { is_connected = false; + return is_connected; } bool PacketClient::isConnected(void) @@ -35,6 +37,7 @@ int PacketClient::connect(SharedQueue *_queue) } else if (_queue != queue) { LOG_WARN("Client already connected."); } + is_connected = true; return queue->serverQueueSize(); } diff --git a/src/mesh/sharedMem/PacketClient.h b/src/mesh/sharedMem/PacketClient.h index 3a8654d03..a930472d6 100644 --- a/src/mesh/sharedMem/PacketClient.h +++ b/src/mesh/sharedMem/PacketClient.h @@ -31,6 +31,6 @@ class PacketClient : public IClientBase virtual int connect(SharedQueue *_queue); private: - bool is_connected = false; + volatile bool is_connected = false; SharedQueue *queue; }; diff --git a/src/mesh/sharedMem/PacketServer.cpp b/src/mesh/sharedMem/PacketServer.cpp index 5c9d692ad..628592cc7 100644 --- a/src/mesh/sharedMem/PacketServer.cpp +++ b/src/mesh/sharedMem/PacketServer.cpp @@ -11,7 +11,6 @@ void PacketServer::begin(SharedQueue *_queue) queue = _queue; } -#if 1 Packet::PacketPtr PacketServer::receivePacket(void) { assert(queue); @@ -19,21 +18,13 @@ Packet::PacketPtr PacketServer::receivePacket(void) return {nullptr}; return queue->serverReceive(); } -#else // template variant with typed return values -template <> Packet::PacketPtr PacketServer::receivePacket() -{ - assert(queue); - if (queue->clientQueueSize() == 0) - return {nullptr}; - return queue->serverReceive(); -} -#endif bool PacketServer::sendPacket(Packet &&p) { assert(queue); - if (queue->serverQueueSize() >= max_packet_queue_size) + if (queue->serverQueueSize() >= max_packet_queue_size) { return false; + } queue->serverSend(std::move(p)); return true; } diff --git a/src/mesh/sharedMem/PacketServer.h b/src/mesh/sharedMem/PacketServer.h index 34152ff14..44044aa91 100644 --- a/src/mesh/sharedMem/PacketServer.h +++ b/src/mesh/sharedMem/PacketServer.h @@ -15,7 +15,9 @@ class PacketServer PacketServer(); virtual void begin(SharedQueue *_queue); virtual bool sendPacket(Packet &&p); - virtual Packet::PacketPtr receivePacket(); + virtual Packet::PacketPtr receivePacket(void); + // template variant with typed return values + // template<> Packet::PacketPtr receivePacket() // template T receivePacket(); virtual bool hasData() const; virtual bool available() const; diff --git a/variants/portduino/platformio.ini b/variants/portduino/platformio.ini index c7ebe2b74..9d970b726 100644 --- a/variants/portduino/platformio.ini +++ b/variants/portduino/platformio.ini @@ -10,7 +10,7 @@ build_src_filter = ${portduino_base.build_src_filter} [env:native-x11-320x240] extends = portduino_base -build_flags = ${portduino_base.build_flags} -O0 -lX11 +build_flags = ${portduino_base.build_flags} -O0 -fno-omit-frame-pointer -fsanitize=address -lX11 -I variants/portduino -D DEBUG_HEAP -D USE_X11=1 diff --git a/variants/t-deck/platformio.ini b/variants/t-deck/platformio.ini index 21acca9f2..c1157e78f 100644 --- a/variants/t-deck/platformio.ini +++ b/variants/t-deck/platformio.ini @@ -4,7 +4,7 @@ extends = esp32s3_base board = t-deck board_build.partitions = default_16MB.csv ; just for test upload_protocol = esp-builtin -build_flags = ${esp32_base.build_flags} +build_flags = ${esp32_base.build_flags} -fno-omit-frame-pointer -D T_DECK -D HAS_SCREEN=0 -D HAS_TFT=1 @@ -19,7 +19,7 @@ build_flags = ${esp32_base.build_flags} -D VIEW_320x240 -D VIEW_CLASS=TFTView_320x240 -D VIEW_CLASS_INC=\"TFTView_320x240.h\" - -D USE_DOUBLE_BUFFER +; -D USE_DOUBLE_BUFFER -I lib/device-ui/generated/ui_320x240 -I variants/t-deck build_src_filter = ${esp32_base.build_src_filter} +