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);
if (queue.empty())
return {nullptr}; // std::move(T());
return {nullptr};
auto packet = queue.front()->move();
queue.pop();
return packet;

View File

@ -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<MeshPacketServer*>(server)->sendPacket(fromRadioScratch);
// else
return server->sendPacket(DataPacket<meshtastic_FromRadio>(fromRadioScratch.id, fromRadioScratch));
return server->sendPacket(DataPacket<meshtastic_FromRadio>(id, fromRadioScratch));
} else
return false;
}

View File

@ -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<meshtastic_ToRadio>(++id, to));
return PacketClient::sendPacket(DataPacket<meshtastic_ToRadio>(++id, to));
}
meshtastic_FromRadio MeshPacketClient::receive(void)
{
auto p = receivePacket()->move();
if (p) {
return static_cast<DataPacket<meshtastic_FromRadio> *>(p.get())->getData();
} else {
return meshtastic_FromRadio();
if (hasData()) {
auto p = receivePacket();
if (p) {
return static_cast<DataPacket<meshtastic_FromRadio> *>(p->move().get())->getData();
}
}
return meshtastic_FromRadio();
}

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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<Packet::PacketPtr>()
{
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;
}

View File

@ -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<Packet::PacketPtr>()
// template<typename T> T receivePacket();
virtual bool hasData() const;
virtual bool available() const;

View File

@ -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

View File

@ -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} +<mesh/sharedMem/>