From e045e862e840cb0c2ea20de5809a7632f56f5c97 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/PacketClient.cpp | 57 ----------------------------- src/mesh/sharedMem/PacketClient.h | 27 -------------- src/mesh/sharedMem/PacketServer.cpp | 13 +------ src/mesh/sharedMem/PacketServer.h | 4 +- variants/t-deck/platformio.ini | 3 +- 7 files changed, 15 insertions(+), 104 deletions(-) delete mode 100644 src/mesh/sharedMem/PacketClient.cpp delete mode 100644 src/mesh/sharedMem/PacketClient.h 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/PacketClient.cpp b/src/mesh/sharedMem/PacketClient.cpp deleted file mode 100644 index 82eb4f67e..000000000 --- a/src/mesh/sharedMem/PacketClient.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "sharedMem/PacketClient.h" -#include "DebugConfiguration.h" -#include "sharedMem/SharedQueue.h" -#include - -const uint32_t max_packet_queue_size = 10; - -PacketClient *packetClient = nullptr; - -void PacketClient::init(void) -{ - // for now we hard-code (only) one client task, but in principle one could - // create as many PacketServer/PacketClient pairs as desired. - packetClient = new PacketClient(); - packetClient->connect(sharedQueue); -} - -PacketClient::PacketClient() : queue(nullptr) {} - -int PacketClient::connect(SharedQueue *_queue) -{ - if (!queue) { - queue = _queue; - } else if (_queue != queue) { - LOG_WARN("Client already connected."); - } - return queue->serverQueueSize(); -} - -Packet::PacketPtr PacketClient::receivePacket() -{ - assert(queue); - if (queue->serverQueueSize() == 0) - return {nullptr}; - return queue->clientReceive(); -} - -bool PacketClient::sendPacket(Packet &&p) -{ - assert(queue); - if (queue->clientQueueSize() >= max_packet_queue_size) - return false; - queue->clientSend(std::move(p)); - return true; -} - -bool PacketClient::hasData() const -{ - assert(queue); - return queue->serverQueueSize() > 0; -} - -bool PacketClient::available() const -{ - assert(queue); - return queue->clientQueueSize() < max_packet_queue_size; -} diff --git a/src/mesh/sharedMem/PacketClient.h b/src/mesh/sharedMem/PacketClient.h deleted file mode 100644 index 4da3c34ec..000000000 --- a/src/mesh/sharedMem/PacketClient.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "Packet.h" - -class SharedQueue; - -/** - * @brief Generic client implementation to receive from and - * send packets to the shared queue - * - */ -class PacketClient -{ - public: - PacketClient(); - static void init(void); - virtual int connect(SharedQueue *_queue); - virtual bool sendPacket(Packet &&p); - virtual Packet::PacketPtr receivePacket(); - virtual bool hasData() const; - virtual bool available() const; - - private: - SharedQueue *queue; -}; - -extern PacketClient *packetClient; 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/t-deck/platformio.ini b/variants/t-deck/platformio.ini index 59714521a..f79173842 100644 --- a/variants/t-deck/platformio.ini +++ b/variants/t-deck/platformio.ini @@ -6,7 +6,6 @@ board_check = true upload_protocol = esptool #upload_port = COM29 -build_src_filter = ${esp32_base.build_src_filter} + build_flags = ${esp32_base.build_flags} -DT_DECK -DBOARD_HAS_PSRAM @@ -17,4 +16,4 @@ build_flags = ${esp32_base.build_flags} lib_deps = ${esp32s3_base.lib_deps} lovyan03/LovyanGFX@^1.1.9 earlephilhower/ESP8266Audio@^1.9.9 - earlephilhower/ESP8266SAM@^1.0.1 \ No newline at end of file + earlephilhower/ESP8266SAM@^1.0.1