update Packet classes

This commit is contained in:
mverch67 2024-03-05 09:10:13 +01:00
parent 7dfeedc0f5
commit 12c22c7cd2
9 changed files with 30 additions and 30 deletions

View File

@ -52,7 +52,7 @@ template <typename T> class PacketQueue
{ {
std::lock_guard<std::mutex> lock(mutex); std::lock_guard<std::mutex> lock(mutex);
if (queue.empty()) if (queue.empty())
return {nullptr}; // std::move(T()); return {nullptr};
auto packet = queue.front()->move(); auto packet = queue.front()->move();
queue.pop(); queue.pop();
return packet; return packet;

View File

@ -18,8 +18,10 @@ int32_t PacketAPI::runOnce()
bool PacketAPI::receivePacket(void) bool PacketAPI::receivePacket(void)
{ {
if (server->hasData()) { bool data_received = false;
while (server->hasData()) {
isConnected = true; isConnected = true;
data_received = true;
// TODO: think about redesign or drop class MeshPacketServer // TODO: think about redesign or drop class MeshPacketServer
meshtastic_ToRadio *mr; meshtastic_ToRadio *mr;
@ -51,9 +53,8 @@ bool PacketAPI::receivePacket(void)
LOG_ERROR("Error: unhandled meshtastic_ToRadio variant: %d\n", mr->which_payload_variant); LOG_ERROR("Error: unhandled meshtastic_ToRadio variant: %d\n", mr->which_payload_variant);
break; break;
} }
return true; }
} else return data_received;
return false;
} }
bool PacketAPI::sendPacket(void) 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 // fill dummy buffer; we don't use it, we directly send the fromRadio structure
uint32_t len = getFromRadio(txBuf); uint32_t len = getFromRadio(txBuf);
if (len != 0) { if (len != 0) {
static uint32_t id = 0;
fromRadioScratch.id = ++id;
// TODO: think about redesign or drop class MeshPacketServer // TODO: think about redesign or drop class MeshPacketServer
// if (typeid(*server) == typeid(MeshPacketServer)) // if (typeid(*server) == typeid(MeshPacketServer))
// return dynamic_cast<MeshPacketServer*>(server)->sendPacket(fromRadioScratch); // return dynamic_cast<MeshPacketServer*>(server)->sendPacket(fromRadioScratch);
// else // else
return server->sendPacket(DataPacket<meshtastic_FromRadio>(fromRadioScratch.id, fromRadioScratch)); return server->sendPacket(DataPacket<meshtastic_FromRadio>(id, fromRadioScratch));
} else } else
return false; return false;
} }

View File

@ -9,12 +9,12 @@ MeshPacketClient::MeshPacketClient() {}
bool MeshPacketClient::connect(void) bool MeshPacketClient::connect(void)
{ {
PacketClient::connect(); return PacketClient::connect();
} }
bool MeshPacketClient::disconnect(void) bool MeshPacketClient::disconnect(void)
{ {
PacketClient::disconnect(); return PacketClient::disconnect();
} }
bool MeshPacketClient::isConnected(void) bool MeshPacketClient::isConnected(void)
@ -25,15 +25,16 @@ bool MeshPacketClient::isConnected(void)
bool MeshPacketClient::send(meshtastic_ToRadio &&to) bool MeshPacketClient::send(meshtastic_ToRadio &&to)
{ {
static uint32_t id = 0; static uint32_t id = 0;
PacketClient::sendPacket(DataPacket<meshtastic_ToRadio>(++id, to)); return PacketClient::sendPacket(DataPacket<meshtastic_ToRadio>(++id, to));
} }
meshtastic_FromRadio MeshPacketClient::receive(void) meshtastic_FromRadio MeshPacketClient::receive(void)
{ {
auto p = receivePacket()->move(); if (hasData()) {
auto p = receivePacket();
if (p) { if (p) {
return static_cast<DataPacket<meshtastic_FromRadio> *>(p.get())->getData(); return static_cast<DataPacket<meshtastic_FromRadio> *>(p->move().get())->getData();
} else { }
}
return meshtastic_FromRadio(); return meshtastic_FromRadio();
} }
}

View File

@ -16,11 +16,13 @@ PacketClient::PacketClient() : queue(nullptr) {}
bool PacketClient::connect(void) bool PacketClient::connect(void)
{ {
is_connected = true; is_connected = true;
return is_connected;
} }
bool PacketClient::disconnect(void) bool PacketClient::disconnect(void)
{ {
is_connected = false; is_connected = false;
return is_connected;
} }
bool PacketClient::isConnected(void) bool PacketClient::isConnected(void)
@ -35,6 +37,7 @@ int PacketClient::connect(SharedQueue *_queue)
} else if (_queue != queue) { } else if (_queue != queue) {
LOG_WARN("Client already connected."); LOG_WARN("Client already connected.");
} }
is_connected = true;
return queue->serverQueueSize(); return queue->serverQueueSize();
} }

View File

@ -31,6 +31,6 @@ class PacketClient : public IClientBase
virtual int connect(SharedQueue *_queue); virtual int connect(SharedQueue *_queue);
private: private:
bool is_connected = false; volatile bool is_connected = false;
SharedQueue *queue; SharedQueue *queue;
}; };

View File

@ -11,7 +11,6 @@ void PacketServer::begin(SharedQueue *_queue)
queue = _queue; queue = _queue;
} }
#if 1
Packet::PacketPtr PacketServer::receivePacket(void) Packet::PacketPtr PacketServer::receivePacket(void)
{ {
assert(queue); assert(queue);
@ -19,21 +18,13 @@ Packet::PacketPtr PacketServer::receivePacket(void)
return {nullptr}; return {nullptr};
return queue->serverReceive(); return queue->serverReceive();
} }
#else // template variant with typed return values
template <> Packet::PacketPtr PacketServer::receivePacket<Packet::PacketPtr>()
{
assert(queue);
if (queue->clientQueueSize() == 0)
return {nullptr};
return queue->serverReceive();
}
#endif
bool PacketServer::sendPacket(Packet &&p) bool PacketServer::sendPacket(Packet &&p)
{ {
assert(queue); assert(queue);
if (queue->serverQueueSize() >= max_packet_queue_size) if (queue->serverQueueSize() >= max_packet_queue_size) {
return false; return false;
}
queue->serverSend(std::move(p)); queue->serverSend(std::move(p));
return true; return true;
} }

View File

@ -15,7 +15,9 @@ class PacketServer
PacketServer(); PacketServer();
virtual void begin(SharedQueue *_queue); virtual void begin(SharedQueue *_queue);
virtual bool sendPacket(Packet &&p); virtual bool sendPacket(Packet &&p);
virtual Packet::PacketPtr receivePacket(); virtual Packet::PacketPtr receivePacket(void);
// template variant with typed return values
// template<> Packet::PacketPtr receivePacket<Packet::PacketPtr>()
// template<typename T> T receivePacket(); // template<typename T> T receivePacket();
virtual bool hasData() const; virtual bool hasData() const;
virtual bool available() const; virtual bool available() const;

View File

@ -10,7 +10,7 @@ build_src_filter = ${portduino_base.build_src_filter}
[env:native-x11-320x240] [env:native-x11-320x240]
extends = portduino_base 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 -I variants/portduino
-D DEBUG_HEAP -D DEBUG_HEAP
-D USE_X11=1 -D USE_X11=1

View File

@ -4,7 +4,7 @@ extends = esp32s3_base
board = t-deck board = t-deck
board_build.partitions = default_16MB.csv ; just for test board_build.partitions = default_16MB.csv ; just for test
upload_protocol = esp-builtin upload_protocol = esp-builtin
build_flags = ${esp32_base.build_flags} build_flags = ${esp32_base.build_flags} -fno-omit-frame-pointer
-D T_DECK -D T_DECK
-D HAS_SCREEN=0 -D HAS_SCREEN=0
-D HAS_TFT=1 -D HAS_TFT=1
@ -19,7 +19,7 @@ build_flags = ${esp32_base.build_flags}
-D VIEW_320x240 -D VIEW_320x240
-D VIEW_CLASS=TFTView_320x240 -D VIEW_CLASS=TFTView_320x240
-D VIEW_CLASS_INC=\"TFTView_320x240.h\" -D VIEW_CLASS_INC=\"TFTView_320x240.h\"
-D USE_DOUBLE_BUFFER ; -D USE_DOUBLE_BUFFER
-I lib/device-ui/generated/ui_320x240 -I lib/device-ui/generated/ui_320x240
-I variants/t-deck -I variants/t-deck
build_src_filter = ${esp32_base.build_src_filter} +<mesh/sharedMem/> build_src_filter = ${esp32_base.build_src_filter} +<mesh/sharedMem/>