LoRa_APRS_iGate/src/TaskRouter.cpp

49 lines
1.6 KiB
C++
Raw Normal View History

2021-05-15 22:58:15 +02:00
#include <logger.h>
#include "Task.h"
#include "TaskRouter.h"
#include "project_configuration.h"
String create_lat_aprs(double lat);
String create_long_aprs(double lng);
RouterTask::RouterTask(TaskQueue<std::shared_ptr<APRSMessage>> * const fromModem, TaskQueue<std::shared_ptr<APRSMessage>> * const toAprsIs)
: Task(TASK_ROUTER, TaskRouter), _fromModem(fromModem), _toAprsIs(toAprsIs) {
}
RouterTask::~RouterTask() {
}
bool RouterTask::setup(std::shared_ptr<System> system) {
// setup beacon
_beacon_timer.setTimeout(system->getUserConfig()->beacon.timeout * 60 * 1000);
_beaconMsg = std::shared_ptr<APRSMessage>(new APRSMessage());
_beaconMsg->setSource(system->getUserConfig()->callsign);
_beaconMsg->setDestination("APLG01");
String lat = create_lat_aprs(system->getUserConfig()->beacon.positionLatitude);
String lng = create_long_aprs(system->getUserConfig()->beacon.positionLongitude);
_beaconMsg->getBody()->setData(String("=") + lat + "L" + lng + "&" + system->getUserConfig()->beacon.message);
return true;
}
bool RouterTask::loop(std::shared_ptr<System> system) {
// do routing
if(!_fromModem->empty())
{
_toAprsIs->addElement(_fromModem->getElement());
}
// check for beacon
if (_beacon_timer.check()) {
logPrintD("[" + timeString() + "] ");
logPrintlnD(_beaconMsg->encode());
_toAprsIs->addElement(_beaconMsg);
system->getDisplay().addFrame(std::shared_ptr<DisplayFrame>(new TextFrame("BEACON", _beaconMsg->toString())));
_beacon_timer.start();
}
time_t diff = _beacon_timer.getTriggerTimeInSec();
_stateInfo = "beacon " + String(diff / 60) + ":" + String(diff % 60);
return true;
}