mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-26 22:33:24 +00:00
refactoring part 3: move PacketClient/Server into lib
This commit is contained in:
parent
d369c5b89e
commit
c0a5304ed7
@ -11,7 +11,7 @@ build_flags =
|
|||||||
-Isrc/platform/nrf52
|
-Isrc/platform/nrf52
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/esp32/> -<platform/stm32wl> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<platform/rp2040> -<mesh/eth/> -<mesh/sharedMem> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/esp32/> -<platform/stm32wl> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<platform/rp2040> -<mesh/eth/> -<mesh/raspihttp>
|
||||||
|
|
||||||
lib_deps=
|
lib_deps=
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
|
@ -12,7 +12,7 @@ build_flags =
|
|||||||
-D__PLAT_RP2040__
|
-D__PLAT_RP2040__
|
||||||
# -D _POSIX_THREADS
|
# -D _POSIX_THREADS
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/esp32/> -<nimble/> -<modules/esp32> -<platform/nrf52/> -<platform/stm32wl> -<mesh/eth/> -<mesh/wifi/> -<mesh/http/> -<mesh/sharedMem> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/esp32/> -<nimble/> -<modules/esp32> -<platform/nrf52/> -<platform/stm32wl> -<mesh/eth/> -<mesh/wifi/> -<mesh/http/> -<mesh/raspihttp>
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
BluetoothOTA
|
BluetoothOTA
|
||||||
|
@ -106,8 +106,8 @@ AudioThread *audioThread;
|
|||||||
|
|
||||||
#if HAS_TFT
|
#if HAS_TFT
|
||||||
#include "DeviceScreen.h"
|
#include "DeviceScreen.h"
|
||||||
#include "sharedMem/PacketClient.h"
|
#include "PacketClient.h"
|
||||||
#include "sharedMem/PacketServer.h"
|
#include "PacketServer.h"
|
||||||
|
|
||||||
void tft_task_handler(void *);
|
void tft_task_handler(void *);
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "PacketServer.h"
|
||||||
#include "PhoneAPI.h"
|
#include "PhoneAPI.h"
|
||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
#include "sharedMem/PacketServer.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A version of the phone API used for inter task communication based on protobuf packets, e.g.
|
* A version of the phone API used for inter task communication based on protobuf packets, e.g.
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
#include "sharedMem/PacketClient.h"
|
|
||||||
#include "Packet.h"
|
|
||||||
#include "SharedQueue.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
const uint32_t max_packet_queue_size = 10;
|
|
||||||
|
|
||||||
void PacketClient::init(void)
|
|
||||||
{
|
|
||||||
// sharedQueue is currently defined external, it is not shared between processes
|
|
||||||
connect(sharedQueue);
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
return is_connected;
|
|
||||||
}
|
|
||||||
|
|
||||||
int PacketClient::connect(SharedQueue *_queue)
|
|
||||||
{
|
|
||||||
if (!queue) {
|
|
||||||
queue = _queue;
|
|
||||||
} else if (_queue != queue) {
|
|
||||||
LOG_WARN("Client already connected.");
|
|
||||||
}
|
|
||||||
is_connected = true;
|
|
||||||
return queue->serverQueueSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketClient::send(meshtastic_ToRadio &&to)
|
|
||||||
{
|
|
||||||
if (available()) {
|
|
||||||
static uint32_t id = 0;
|
|
||||||
return queue->clientSend(DataPacket<meshtastic_ToRadio>(++id, to));
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
meshtastic_FromRadio PacketClient::receive(void)
|
|
||||||
{
|
|
||||||
if (hasData()) {
|
|
||||||
auto p = queue->clientReceive();
|
|
||||||
if (p) {
|
|
||||||
return static_cast<DataPacket<meshtastic_FromRadio> *>(p->move().get())->getData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return meshtastic_FromRadio();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketClient::hasData() const
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
return queue->serverQueueSize() > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketClient::available() const
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
return queue->clientQueueSize() < max_packet_queue_size;
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "IClientBase.h"
|
|
||||||
|
|
||||||
class SharedQueue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Client implementation to receive packets from and
|
|
||||||
* send packets to the shared queue
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class PacketClient : public IClientBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PacketClient();
|
|
||||||
void init(void) override;
|
|
||||||
bool connect(void) override;
|
|
||||||
bool disconnect(void) override;
|
|
||||||
bool isConnected(void) override;
|
|
||||||
bool send(meshtastic_ToRadio &&to) override;
|
|
||||||
meshtastic_FromRadio receive(void) override;
|
|
||||||
|
|
||||||
virtual bool hasData() const;
|
|
||||||
virtual bool available() const;
|
|
||||||
|
|
||||||
virtual ~PacketClient() = default;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual int connect(SharedQueue *_queue);
|
|
||||||
|
|
||||||
private:
|
|
||||||
volatile bool is_connected = false;
|
|
||||||
SharedQueue *queue;
|
|
||||||
};
|
|
@ -1,55 +0,0 @@
|
|||||||
#include "sharedMem/PacketServer.h"
|
|
||||||
#include "SharedQueue.h"
|
|
||||||
#include "api/PacketAPI.h"
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
const uint32_t max_packet_queue_size = 50;
|
|
||||||
|
|
||||||
SharedQueue *sharedQueue = nullptr;
|
|
||||||
|
|
||||||
PacketServer *packetServer = nullptr;
|
|
||||||
|
|
||||||
PacketServer::PacketServer() : queue(nullptr) {}
|
|
||||||
|
|
||||||
void PacketServer::init(void)
|
|
||||||
{
|
|
||||||
packetServer = new PacketServer;
|
|
||||||
packetAPI = new PacketAPI(packetServer);
|
|
||||||
sharedQueue = new SharedQueue;
|
|
||||||
packetServer->begin(sharedQueue);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PacketServer::begin(SharedQueue *_queue)
|
|
||||||
{
|
|
||||||
queue = _queue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Packet::PacketPtr PacketServer::receivePacket(void)
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
if (queue->clientQueueSize() == 0)
|
|
||||||
return {nullptr};
|
|
||||||
return queue->serverReceive();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketServer::sendPacket(Packet &&p)
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
if (queue->serverQueueSize() >= max_packet_queue_size) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
queue->serverSend(std::move(p));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketServer::hasData() const
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
return queue->clientQueueSize() > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PacketServer::available() const
|
|
||||||
{
|
|
||||||
assert(queue);
|
|
||||||
return queue->serverQueueSize() < max_packet_queue_size;
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Packet.h"
|
|
||||||
#include "PacketQueue.h"
|
|
||||||
|
|
||||||
class SharedQueue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic server implementation (base class) for bidirectional task communication
|
|
||||||
* Uses a queue that is shared with the client
|
|
||||||
*/
|
|
||||||
class PacketServer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PacketServer();
|
|
||||||
static void init(void);
|
|
||||||
virtual void begin(SharedQueue *_queue);
|
|
||||||
virtual bool sendPacket(Packet &&p);
|
|
||||||
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;
|
|
||||||
|
|
||||||
private:
|
|
||||||
SharedQueue *queue;
|
|
||||||
};
|
|
@ -40,7 +40,6 @@ build_src_filter = ${portduino_base.build_src_filter}
|
|||||||
+<../lib/device-ui/generated/ui_320x240/fonts>
|
+<../lib/device-ui/generated/ui_320x240/fonts>
|
||||||
+<../lib/device-ui/resources>
|
+<../lib/device-ui/resources>
|
||||||
+<../lib/device-ui/source>
|
+<../lib/device-ui/source>
|
||||||
+<mesh/sharedMem/>
|
|
||||||
|
|
||||||
[env:native-x11-320x240]
|
[env:native-x11-320x240]
|
||||||
extends = portduino_base
|
extends = portduino_base
|
||||||
@ -74,4 +73,3 @@ build_src_filter = ${portduino_base.build_src_filter}
|
|||||||
+<../lib/device-ui/generated/ui_320x240/fonts>
|
+<../lib/device-ui/generated/ui_320x240/fonts>
|
||||||
+<../lib/device-ui/resources>
|
+<../lib/device-ui/resources>
|
||||||
+<../lib/device-ui/source>
|
+<../lib/device-ui/source>
|
||||||
+<mesh/sharedMem/>
|
|
||||||
|
Loading…
Reference in New Issue
Block a user