2021-01-04 22:10:23 +00:00
|
|
|
#include <TimeLib.h>
|
2021-03-12 22:21:45 +00:00
|
|
|
#include <logger.h>
|
|
|
|
|
2021-01-04 22:10:23 +00:00
|
|
|
#include "Task.h"
|
2021-03-12 22:21:45 +00:00
|
|
|
#include "TaskAprsIs.h"
|
2021-05-09 19:19:13 +00:00
|
|
|
#include "TaskModem.h"
|
2021-03-12 22:21:45 +00:00
|
|
|
#include "project_configuration.h"
|
2021-01-03 21:43:35 +00:00
|
|
|
|
2021-05-15 21:10:24 +00:00
|
|
|
ModemTask::ModemTask(TaskQueue<std::shared_ptr<APRSMessage>> *const fromModem) : Task(TASK_MODEM, TaskModem), _fromModem(fromModem) {
|
2021-01-03 21:43:35 +00:00
|
|
|
}
|
|
|
|
|
2021-05-09 19:19:13 +00:00
|
|
|
ModemTask::~ModemTask() {
|
2021-01-03 21:43:35 +00:00
|
|
|
}
|
|
|
|
|
2021-05-09 19:19:13 +00:00
|
|
|
bool ModemTask::setup(std::shared_ptr<System> system) {
|
2021-03-21 21:29:31 +00:00
|
|
|
_lora_aprs = std::shared_ptr<LoRa_APRS>(new LoRa_APRS(system->getBoardConfig()));
|
2021-03-12 22:21:45 +00:00
|
|
|
if (!_lora_aprs->begin(_lora_aprs->getRxFrequency())) {
|
|
|
|
logPrintlnE("Starting LoRa failed!");
|
|
|
|
_stateInfo = "LoRa-Modem failed";
|
|
|
|
_state = Error;
|
|
|
|
while (true)
|
|
|
|
;
|
|
|
|
}
|
2021-03-21 21:29:31 +00:00
|
|
|
_lora_aprs->setRxFrequency(system->getUserConfig()->lora.frequencyRx);
|
|
|
|
_lora_aprs->setTxFrequency(system->getUserConfig()->lora.frequencyTx);
|
|
|
|
_lora_aprs->setTxPower(system->getUserConfig()->lora.power);
|
|
|
|
_lora_aprs->setSpreadingFactor(system->getUserConfig()->lora.spreadingFactor);
|
|
|
|
_lora_aprs->setSignalBandwidth(system->getUserConfig()->lora.signalBandwidth);
|
|
|
|
_lora_aprs->setCodingRate4(system->getUserConfig()->lora.codingRate4);
|
2021-03-12 22:21:45 +00:00
|
|
|
_lora_aprs->enableCrc();
|
2021-01-03 21:43:35 +00:00
|
|
|
|
2021-03-12 22:21:45 +00:00
|
|
|
_stateInfo = "";
|
|
|
|
return true;
|
2021-01-03 21:43:35 +00:00
|
|
|
}
|
|
|
|
|
2021-05-09 19:19:13 +00:00
|
|
|
bool ModemTask::loop(std::shared_ptr<System> system) {
|
2021-03-12 22:21:45 +00:00
|
|
|
if (_lora_aprs->checkMessage()) {
|
|
|
|
std::shared_ptr<APRSMessage> msg = _lora_aprs->getMessage();
|
|
|
|
// msg->getAPRSBody()->setData(msg->getAPRSBody()->getData() + " 123");
|
|
|
|
logPrintD("[" + timeString() + "] ");
|
|
|
|
logPrintD("Received packet '");
|
|
|
|
logPrintD(msg->toString());
|
|
|
|
logPrintD("' with RSSI ");
|
|
|
|
logPrintD(String(_lora_aprs->packetRssi()));
|
|
|
|
logPrintD(" and SNR ");
|
|
|
|
logPrintlnD(String(_lora_aprs->packetSnr()));
|
2021-04-09 19:50:59 +00:00
|
|
|
|
|
|
|
String path = msg->getPath();
|
|
|
|
if (path.indexOf("RFONLY") != -1 || path.indexOf("NOGATE") != -1 || path.indexOf("TCPIP") != -1) {
|
2021-04-09 20:42:40 +00:00
|
|
|
return true;
|
2021-04-09 19:50:59 +00:00
|
|
|
}
|
|
|
|
|
2021-04-09 20:40:26 +00:00
|
|
|
if (!path.isEmpty()) {
|
|
|
|
path += ",";
|
|
|
|
}
|
|
|
|
msg->setPath(path + "qAR," + system->getUserConfig()->callsign);
|
|
|
|
|
2021-05-15 20:58:15 +00:00
|
|
|
_fromModem->addElement(msg);
|
2021-03-21 21:29:31 +00:00
|
|
|
system->getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("LoRa", msg->toString())));
|
2021-03-12 22:21:45 +00:00
|
|
|
}
|
2021-01-05 22:57:59 +00:00
|
|
|
|
2021-03-12 22:21:45 +00:00
|
|
|
return true;
|
2021-01-03 21:43:35 +00:00
|
|
|
}
|