2020-05-01 04:42:11 +00:00
|
|
|
|
|
|
|
#include "RadioInterface.h"
|
2020-04-01 04:56:35 +00:00
|
|
|
#include "NodeDB.h"
|
|
|
|
#include "assert.h"
|
|
|
|
#include "configuration.h"
|
2020-04-17 16:48:54 +00:00
|
|
|
#include <assert.h>
|
2020-04-01 04:56:35 +00:00
|
|
|
#include <pb_decode.h>
|
|
|
|
#include <pb_encode.h>
|
|
|
|
|
2020-05-01 19:11:04 +00:00
|
|
|
#define RADIO_STACK_SIZE 4096
|
|
|
|
|
2020-04-30 16:44:16 +00:00
|
|
|
RadioInterface::RadioInterface() : txQueue(MAX_TX_QUEUE)
|
|
|
|
{
|
|
|
|
assert(sizeof(PacketHeader) == 4); // make sure the compiler did what we expected
|
|
|
|
}
|
2020-04-01 04:56:35 +00:00
|
|
|
|
2020-05-01 19:11:04 +00:00
|
|
|
bool RadioInterface::init()
|
|
|
|
{
|
|
|
|
start("radio", RADIO_STACK_SIZE); // Start our worker thread
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2020-04-01 04:56:35 +00:00
|
|
|
ErrorCode SimRadio::send(MeshPacket *p)
|
|
|
|
{
|
|
|
|
DEBUG_MSG("SimRadio.send\n");
|
2020-04-17 16:48:54 +00:00
|
|
|
packetPool.release(p);
|
2020-04-01 04:56:35 +00:00
|
|
|
return ERRNO_OK;
|
2020-04-17 16:48:54 +00:00
|
|
|
}
|
|
|
|
|
2020-04-18 21:22:24 +00:00
|
|
|
void RadioInterface::deliverToReceiver(MeshPacket *p)
|
2020-04-17 16:48:54 +00:00
|
|
|
{
|
|
|
|
assert(rxDest);
|
2020-04-18 21:22:24 +00:00
|
|
|
assert(rxDest->enqueue(p, 0)); // NOWAIT - fixme, if queue is full, delete older messages
|
2020-04-30 01:46:32 +00:00
|
|
|
}
|
|
|
|
|
2020-04-30 16:44:16 +00:00
|
|
|
/***
|
|
|
|
* given a packet set sendingPacket and decode the protobufs into radiobuf. Returns # of payload bytes to send
|
|
|
|
*/
|
|
|
|
size_t RadioInterface::beginSending(MeshPacket *p)
|
|
|
|
{
|
|
|
|
assert(!sendingPacket);
|
|
|
|
|
|
|
|
// DEBUG_MSG("sending queued packet on mesh (txGood=%d,rxGood=%d,rxBad=%d)\n", rf95.txGood(), rf95.rxGood(), rf95.rxBad());
|
|
|
|
assert(p->has_payload);
|
|
|
|
|
|
|
|
lastTxStart = millis();
|
|
|
|
|
|
|
|
PacketHeader *h = (PacketHeader *)radiobuf;
|
|
|
|
|
|
|
|
h->from = p->from;
|
|
|
|
h->to = p->to;
|
|
|
|
h->flags = 0;
|
|
|
|
h->id = p->id;
|
|
|
|
|
|
|
|
// if the sender nodenum is zero, that means uninitialized
|
|
|
|
assert(h->from);
|
|
|
|
|
2020-05-01 04:42:11 +00:00
|
|
|
size_t numbytes = pb_encode_to_bytes(radiobuf + sizeof(PacketHeader), sizeof(radiobuf), SubPacket_fields, &p->payload) +
|
|
|
|
sizeof(PacketHeader);
|
2020-04-30 16:44:16 +00:00
|
|
|
|
|
|
|
assert(numbytes <= MAX_RHPACKETLEN);
|
|
|
|
|
|
|
|
sendingPacket = p;
|
|
|
|
return numbytes;
|
|
|
|
}
|