2025-01-12 18:08:57 +01:00
|
|
|
#include "comms/PacketClient.h"
|
|
|
|
|
#include "util/ILog.h"
|
|
|
|
|
#include "util/Packet.h"
|
|
|
|
|
#include "util/SharedQueue.h"
|
2024-04-17 20:21:48 +02:00
|
|
|
#include <assert.h>
|
|
|
|
|
|
2024-07-04 20:57:33 +02:00
|
|
|
const uint32_t max_packet_queue_size = 25;
|
2024-04-17 20:21:48 +02:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-22 18:07:39 +02:00
|
|
|
bool PacketClient::isStandalone(void)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-17 20:21:48 +02:00
|
|
|
int PacketClient::connect(SharedQueue *_queue)
|
|
|
|
|
{
|
|
|
|
|
if (!queue) {
|
|
|
|
|
queue = _queue;
|
|
|
|
|
} else if (_queue != queue) {
|
2024-10-17 09:06:42 +02:00
|
|
|
ILOG_WARN("Client already connected.");
|
2024-04-17 20:21:48 +02:00
|
|
|
}
|
|
|
|
|
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 {
|
2024-10-17 09:06:42 +02:00
|
|
|
ILOG_WARN("Cannot send DataPacket");
|
2024-04-17 20:21:48 +02:00
|
|
|
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;
|
|
|
|
|
}
|