LoRa_APRS_iGate/src/TaskModem.cpp

62 wiersze
2.2 KiB
C++
Czysty Zwykły widok Historia

#include <logger.h>
2021-05-18 23:17:23 +00:00
#include <TimeLib.h>
2021-01-04 22:10:23 +00:00
#include "Task.h"
#include "TaskAprsIs.h"
2021-05-09 19:19:13 +00:00
#include "TaskModem.h"
#include "project_configuration.h"
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-05-09 19:19:13 +00:00
ModemTask::~ModemTask() {
}
2021-05-18 22:44:37 +00:00
bool ModemTask::setup(System &system) {
2021-05-21 21:04:10 +00: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);
if (!_lora_aprs.begin(system.getUserConfig()->lora.frequencyRx)) {
logPrintlnE("Starting LoRa failed!");
_stateInfo = "LoRa-Modem failed";
_state = Error;
while (true)
;
}
_lora_aprs.setRxFrequency(system.getUserConfig()->lora.frequencyRx);
_lora_aprs.setRxGain(system.getUserConfig()->lora.gainRx);
_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 21:04:10 +00:00
_lora_aprs.enableCrc();
_stateInfo = "";
return true;
}
2021-05-18 22:44:37 +00:00
bool ModemTask::loop(System &system) {
2021-05-21 21:04:10 +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 ");
2021-05-21 21:04:10 +00:00
logPrintD(String(_lora_aprs.packetRssi()));
logPrintD(" and SNR ");
2021-05-21 21:04:10 +00:00
logPrintlnD(String(_lora_aprs.packetSnr()));
2021-04-09 19:50:59 +00:00
2021-05-16 01:52:28 +00:00
_fromModem.addElement(msg);
2021-05-18 22:44:37 +00:00
system.getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("LoRa", msg->toString())));
}
2021-05-24 13:12:31 +00:00
if (!_toModem.empty()) {
std::shared_ptr<APRSMessage> msg = _toModem.getElement();
_lora_aprs.sendMessage(msg);
}
return true;
}