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"
# include "project_configuration.h"
2021-01-03 21:43:35 +00:00
2023-04-20 15:46:56 +00:00
AprsIsTask : : AprsIsTask ( TaskQueue < std : : shared_ptr < APRSMessage > > & toAprsIs , TaskQueue < std : : shared_ptr < APRSMessage > > & toModem ) : Task ( TASK_APRS_IS , TaskAprsIs ) , _toAprsIs ( toAprsIs ) , _toModem ( toModem ) {
2021-01-03 21:43:35 +00:00
}
2021-03-12 22:21:45 +00:00
AprsIsTask : : ~ AprsIsTask ( ) {
2021-01-03 21:43:35 +00:00
}
2021-05-18 22:44:37 +00:00
bool AprsIsTask : : setup ( System & system ) {
2021-05-21 20:41:30 +00:00
_aprs_is . setup ( system . getUserConfig ( ) - > callsign , system . getUserConfig ( ) - > aprs_is . passcode , " ESP32-APRS-IS " , " 0.2 " ) ;
2021-03-12 22:21:45 +00:00
return true ;
2021-01-03 21:43:35 +00:00
}
2021-05-18 22:44:37 +00:00
bool AprsIsTask : : loop ( System & system ) {
2022-06-28 19:26:53 +00:00
if ( ! system . isWifiOrEthConnected ( ) ) {
2021-03-27 21:02:43 +00:00
return false ;
}
2021-05-21 20:41:30 +00:00
if ( ! _aprs_is . connected ( ) ) {
2021-03-21 21:29:31 +00:00
if ( ! connect ( system ) ) {
2021-03-12 22:21:45 +00:00
_stateInfo = " not connected " ;
_state = Error ;
return false ;
}
_stateInfo = " connected " ;
_state = Okay ;
return false ;
}
2023-06-08 10:52:03 +00:00
{
std : : shared_ptr < APRSMessage > msg = _aprs_is . getAPRSMessage ( ) ;
if ( msg ) {
_toModem . addElement ( msg ) ;
}
2023-04-20 15:46:56 +00:00
}
2021-01-03 21:43:35 +00:00
2021-05-16 01:52:28 +00:00
if ( ! _toAprsIs . empty ( ) ) {
std : : shared_ptr < APRSMessage > msg = _toAprsIs . getElement ( ) ;
2021-05-21 20:41:30 +00:00
_aprs_is . sendMessage ( msg ) ;
2021-03-12 22:21:45 +00:00
}
2021-01-04 22:10:23 +00:00
2021-03-12 22:21:45 +00:00
return true ;
2021-01-03 21:43:35 +00:00
}
2022-03-19 20:57:09 +00:00
bool AprsIsTask : : connect ( System & system ) {
2023-06-08 10:51:49 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_INFO , getName ( ) , " connecting to APRS-IS server: %s on port: %d, with filter: '%s' " , system . getUserConfig ( ) - > aprs_is . server . c_str ( ) , system . getUserConfig ( ) - > aprs_is . port , system . getUserConfig ( ) - > aprs_is . filter . c_str ( ) ) ;
2023-04-20 15:55:30 +00:00
APRS_IS : : ConnectionStatus status = APRS_IS : : ConnectionStatus : : ERROR_CONNECTION ;
if ( system . getUserConfig ( ) - > aprs_is . filter . isEmpty ( ) ) {
status = _aprs_is . connect ( system . getUserConfig ( ) - > aprs_is . server , system . getUserConfig ( ) - > aprs_is . port ) ;
} else {
status = _aprs_is . connect ( system . getUserConfig ( ) - > aprs_is . server , system . getUserConfig ( ) - > aprs_is . port , system . getUserConfig ( ) - > aprs_is . filter ) ;
}
2022-03-19 22:51:18 +00:00
if ( status = = APRS_IS : : ERROR_CONNECTION ) {
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_ERROR , getName ( ) , " Something went wrong on connecting! Is the server reachable? " ) ;
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_ERROR , getName ( ) , " Connection failed. " ) ;
return false ;
} else if ( status = = APRS_IS : : ERROR_PASSCODE ) {
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_ERROR , getName ( ) , " User can not be verified with passcode! " ) ;
2022-03-19 20:57:09 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_ERROR , getName ( ) , " Connection failed. " ) ;
2021-03-12 22:21:45 +00:00
return false ;
}
2022-03-19 20:57:09 +00:00
system . getLogger ( ) . log ( logging : : LoggerLevel : : LOGGER_LEVEL_INFO , getName ( ) , " Connected to APRS-IS server! " ) ;
2021-03-12 22:21:45 +00:00
return true ;
2021-01-03 21:43:35 +00:00
}