mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-04 20:54:42 +00:00
update Packet classes
This commit is contained in:
parent
7dfeedc0f5
commit
12c22c7cd2
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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/>
|
||||||
|
Loading…
Reference in New Issue
Block a user