2021-03-12 22:21:45 +00:00
# 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"
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-25 20:43:16 +00: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 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-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 ) ;
2021-09-19 19:36:51 +00:00
if ( ! _lora_aprs . begin ( system . getUserConfig ( ) - > lora . frequencyRx ) ) {
2022-03-19 21:08:54 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_ERROR , getName ( ) , " Starting LoRa failed! " ) ;
2021-03-12 22:21:45 +00:00
_stateInfo = " LoRa-Modem failed " ;
_state = Error ;
while ( true )
;
}
2021-09-19 19:36:51 +00:00
_lora_aprs . setRxFrequency ( system . getUserConfig ( ) - > lora . frequencyRx ) ;
2021-11-06 21:00:27 +00:00
_lora_aprs . setRxGain ( system . getUserConfig ( ) - > lora . gainRx ) ;
2021-09-19 19:36:51 +00: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 21:04:10 +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-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 ( ) ;
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_DEBUG , getName ( ) , " [%s] Received packet '%s' with RSSI %d and SNR %f " , timeString ( ) . c_str ( ) , msg - > toString ( ) . c_str ( ) , _lora_aprs . packetRssi ( ) , _lora_aprs . packetSnr ( ) ) ;
2021-05-16 01:52:28 +00:00
_fromModem . addElement ( msg ) ;
2022-03-20 09:56:06 +00:00
system . getDisplay ( ) . addFrame ( std : : shared_ptr < DisplayFrame > ( new TextFrame ( " LoRa " , msg - > toString ( ) . c_str ( ) ) ) ) ;
2021-03-12 22:21:45 +00:00
}
2021-01-05 22:57:59 +00:00
2021-05-24 13:12:31 +00:00
if ( ! _toModem . empty ( ) ) {
std : : shared_ptr < APRSMessage > msg = _toModem . getElement ( ) ;
2022-03-19 19:53:38 +00:00
if ( system . getUserConfig ( ) - > lora . tx_enable ) {
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_DEBUG , getName ( ) , " [%s] Transmitting packet '%s' " , timeString ( ) . c_str ( ) , msg - > toString ( ) . c_str ( ) ) ;
2022-03-18 13:33:36 +00:00
_lora_aprs . sendMessage ( msg ) ;
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_DEBUG , getName ( ) , " [%s] TX done " , timeString ( ) . c_str ( ) ) ;
2022-03-18 13:33:36 +00:00
} else {
2022-03-20 09:56:06 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_DEBUG , getName ( ) , " [%s] NOT transmitting packet as TX is not enabled '%s' " , timeString ( ) . c_str ( ) , msg - > toString ( ) . c_str ( ) ) ;
2022-03-18 13:33:36 +00:00
}
2021-05-24 13:12:31 +00:00
}
2021-03-12 22:21:45 +00:00
return true ;
2021-01-03 21:43:35 +00:00
}