2021-03-12 23:21:45 +01:00
|
|
|
#include <logger.h>
|
|
|
|
|
|
2021-05-19 01:17:23 +02:00
|
|
|
#include <TimeLib.h>
|
|
|
|
|
|
2021-01-04 23:10:23 +01:00
|
|
|
#include "Task.h"
|
2021-03-12 23:21:45 +01:00
|
|
|
#include "TaskAprsIs.h"
|
2021-05-09 21:19:13 +02:00
|
|
|
#include "TaskModem.h"
|
2021-03-12 23:21:45 +01:00
|
|
|
#include "project_configuration.h"
|
2021-01-03 22:43:35 +01:00
|
|
|
|
2021-05-25 22:43:16 +02:00
|
|
|
ModemTask::ModemTask(TaskQueue<std::shared_ptr<APRSMessage>> &fromModem, TaskQueue<std::shared_ptr<APRSMessage>> &toModem) : Task(TASK_MODEM, TaskModem), _lora_aprs(), _fromModem(fromModem), _toModem(toModem) {
|
2021-01-03 22:43:35 +01:00
|
|
|
}
|
|
|
|
|
|
2021-05-09 21:19:13 +02:00
|
|
|
ModemTask::~ModemTask() {
|
2021-01-03 22:43:35 +01:00
|
|
|
}
|
|
|
|
|
|
2021-05-19 00:44:37 +02:00
|
|
|
bool ModemTask::setup(System &system) {
|
2021-05-21 23:04:10 +02:00
|
|
|
SPI.begin(system.getBoardConfig()->LoraSck, system.getBoardConfig()->LoraMiso, system.getBoardConfig()->LoraMosi, system.getBoardConfig()->LoraCS);
|
|
|
|
|
_lora_aprs.setPins(system.getBoardConfig()->LoraCS, system.getBoardConfig()->LoraReset, system.getBoardConfig()->LoraIRQ);
|
2021-09-19 21:36:51 +02:00
|
|
|
if (!_lora_aprs.begin(system.getUserConfig()->lora.frequencyRx)) {
|
2021-03-12 23:21:45 +01:00
|
|
|
logPrintlnE("Starting LoRa failed!");
|
|
|
|
|
_stateInfo = "LoRa-Modem failed";
|
|
|
|
|
_state = Error;
|
|
|
|
|
while (true)
|
|
|
|
|
;
|
|
|
|
|
}
|
2021-09-19 21:36:51 +02:00
|
|
|
_lora_aprs.setRxFrequency(system.getUserConfig()->lora.frequencyRx);
|
2021-11-06 22:00:27 +01:00
|
|
|
_lora_aprs.setRxGain(system.getUserConfig()->lora.gainRx);
|
2021-09-19 21:36:51 +02:00
|
|
|
_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-05-21 23:04:10 +02:00
|
|
|
_lora_aprs.enableCrc();
|
2021-01-03 22:43:35 +01:00
|
|
|
|
2021-03-12 23:21:45 +01:00
|
|
|
_stateInfo = "";
|
|
|
|
|
return true;
|
2021-01-03 22:43:35 +01:00
|
|
|
}
|
|
|
|
|
|
2021-05-19 00:44:37 +02:00
|
|
|
bool ModemTask::loop(System &system) {
|
2021-05-21 23:04:10 +02:00
|
|
|
if (_lora_aprs.checkMessage()) {
|
|
|
|
|
std::shared_ptr<APRSMessage> msg = _lora_aprs.getMessage();
|
2021-03-12 23:21:45 +01:00
|
|
|
// msg->getAPRSBody()->setData(msg->getAPRSBody()->getData() + " 123");
|
|
|
|
|
logPrintD("[" + timeString() + "] ");
|
|
|
|
|
logPrintD("Received packet '");
|
|
|
|
|
logPrintD(msg->toString());
|
|
|
|
|
logPrintD("' with RSSI ");
|
2021-05-21 23:04:10 +02:00
|
|
|
logPrintD(String(_lora_aprs.packetRssi()));
|
2021-03-12 23:21:45 +01:00
|
|
|
logPrintD(" and SNR ");
|
2021-05-21 23:04:10 +02:00
|
|
|
logPrintlnD(String(_lora_aprs.packetSnr()));
|
2021-04-09 21:50:59 +02:00
|
|
|
|
2021-05-16 03:52:28 +02:00
|
|
|
_fromModem.addElement(msg);
|
2021-05-19 00:44:37 +02:00
|
|
|
system.getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("LoRa", msg->toString())));
|
2021-03-12 23:21:45 +01:00
|
|
|
}
|
2021-01-05 23:57:59 +01:00
|
|
|
|
2021-05-24 15:12:31 +02:00
|
|
|
if (!_toModem.empty()) {
|
|
|
|
|
std::shared_ptr<APRSMessage> msg = _toModem.getElement();
|
2022-03-19 08:37:23 +01:00
|
|
|
logPrintD("[" + timeString() + "] ");
|
2022-03-18 14:33:36 +01:00
|
|
|
if (system.getUserConfig()->lora.txok) {
|
2022-03-18 14:50:09 +01:00
|
|
|
logPrintD("Transmitting packet '");
|
|
|
|
|
logPrintD(msg->toString());
|
2022-03-18 14:33:36 +01:00
|
|
|
_lora_aprs.sendMessage(msg);
|
2022-03-18 14:50:09 +01:00
|
|
|
logPrintlnD(String(" TXDone"));
|
2022-03-18 14:33:36 +01:00
|
|
|
} else {
|
2022-03-18 14:50:09 +01:00
|
|
|
logPrintD("NOT Transmitting packet '");
|
|
|
|
|
logPrintD(msg->toString());
|
|
|
|
|
logPrintlnD(String(" TXNG"));
|
2022-03-18 14:33:36 +01:00
|
|
|
}
|
2021-05-24 15:12:31 +02:00
|
|
|
}
|
|
|
|
|
|
2021-03-12 23:21:45 +01:00
|
|
|
return true;
|
2021-01-03 22:43:35 +01:00
|
|
|
}
|