@ -51,7 +51,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
file . read ( ( uint8_t * ) & _prefs - > tx_power_dbm , sizeof ( _prefs - > tx_power_dbm ) ) ; // 76
file . read ( ( uint8_t * ) & _prefs - > tx_power_dbm , sizeof ( _prefs - > tx_power_dbm ) ) ; // 76
file . read ( ( uint8_t * ) & _prefs - > disable_fwd , sizeof ( _prefs - > disable_fwd ) ) ; // 77
file . read ( ( uint8_t * ) & _prefs - > disable_fwd , sizeof ( _prefs - > disable_fwd ) ) ; // 77
file . read ( ( uint8_t * ) & _prefs - > advert_interval , sizeof ( _prefs - > advert_interval ) ) ; // 78
file . read ( ( uint8_t * ) & _prefs - > advert_interval , sizeof ( _prefs - > advert_interval ) ) ; // 78
file . read ( ( uint8_t * ) pad , 1 ) ; // 79 : 1 byte unused
file . read ( ( uint8_t * ) & _prefs - > sx126x_rx_boosted_gain , sizeof ( _prefs - > sx126x_rx_boosted_gain ) ) ; // 79
file . read ( ( uint8_t * ) & _prefs - > rx_delay_base , sizeof ( _prefs - > rx_delay_base ) ) ; // 80
file . read ( ( uint8_t * ) & _prefs - > rx_delay_base , sizeof ( _prefs - > rx_delay_base ) ) ; // 80
file . read ( ( uint8_t * ) & _prefs - > tx_delay_factor , sizeof ( _prefs - > tx_delay_factor ) ) ; // 84
file . read ( ( uint8_t * ) & _prefs - > tx_delay_factor , sizeof ( _prefs - > tx_delay_factor ) ) ; // 84
file . read ( ( uint8_t * ) & _prefs - > guest_password [ 0 ] , sizeof ( _prefs - > guest_password ) ) ; // 88
file . read ( ( uint8_t * ) & _prefs - > guest_password [ 0 ] , sizeof ( _prefs - > guest_password ) ) ; // 88
@ -63,9 +63,9 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
file . read ( ( uint8_t * ) & _prefs - > multi_acks , sizeof ( _prefs - > multi_acks ) ) ; // 115
file . read ( ( uint8_t * ) & _prefs - > multi_acks , sizeof ( _prefs - > multi_acks ) ) ; // 115
file . read ( ( uint8_t * ) & _prefs - > bw , sizeof ( _prefs - > bw ) ) ; // 116
file . read ( ( uint8_t * ) & _prefs - > bw , sizeof ( _prefs - > bw ) ) ; // 116
file . read ( ( uint8_t * ) & _prefs - > agc_reset_interval , sizeof ( _prefs - > agc_reset_interval ) ) ; // 120
file . read ( ( uint8_t * ) & _prefs - > agc_reset_interval , sizeof ( _prefs - > agc_reset_interval ) ) ; // 120
file . read ( ( uint8_t * ) & _prefs - > sx126x_rx_boosted_gain , sizeof ( _prefs - > sx126x_rx_boosted_gain ) ) ; // 121
file . read ( ( uint8_t * ) & _prefs - > path_hash_mode , sizeof ( _prefs - > path_hash_mode ) ) ; // 121
file . read ( ( uint8_t * ) & _prefs - > path _hash_mo de , sizeof ( _prefs - > path _hash_mo de ) ) ; // 122
file . read ( ( uint8_t * ) & _prefs - > loo p_detect , sizeof ( _prefs - > loo p_detect ) ) ; // 122
file . read ( pad , 1 ) ; // 123 : 1 byte unused
file . read ( pad , 1 ) ; // 123
file . read ( ( uint8_t * ) & _prefs - > flood_max , sizeof ( _prefs - > flood_max ) ) ; // 124
file . read ( ( uint8_t * ) & _prefs - > flood_max , sizeof ( _prefs - > flood_max ) ) ; // 124
file . read ( ( uint8_t * ) & _prefs - > flood_advert_interval , sizeof ( _prefs - > flood_advert_interval ) ) ; // 125
file . read ( ( uint8_t * ) & _prefs - > flood_advert_interval , sizeof ( _prefs - > flood_advert_interval ) ) ; // 125
file . read ( ( uint8_t * ) & _prefs - > interference_threshold , sizeof ( _prefs - > interference_threshold ) ) ; // 126
file . read ( ( uint8_t * ) & _prefs - > interference_threshold , sizeof ( _prefs - > interference_threshold ) ) ; // 126
@ -141,7 +141,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
file . write ( ( uint8_t * ) & _prefs - > tx_power_dbm , sizeof ( _prefs - > tx_power_dbm ) ) ; // 76
file . write ( ( uint8_t * ) & _prefs - > tx_power_dbm , sizeof ( _prefs - > tx_power_dbm ) ) ; // 76
file . write ( ( uint8_t * ) & _prefs - > disable_fwd , sizeof ( _prefs - > disable_fwd ) ) ; // 77
file . write ( ( uint8_t * ) & _prefs - > disable_fwd , sizeof ( _prefs - > disable_fwd ) ) ; // 77
file . write ( ( uint8_t * ) & _prefs - > advert_interval , sizeof ( _prefs - > advert_interval ) ) ; // 78
file . write ( ( uint8_t * ) & _prefs - > advert_interval , sizeof ( _prefs - > advert_interval ) ) ; // 78
file . write ( ( uint8_t * ) pad , 1 ) ; // 79 : 1 byte unused
file . write ( ( uint8_t * ) & _prefs - > sx126x_rx_boosted_gain , sizeof ( _prefs - > sx126x_rx_boosted_gain ) ) ; // 79
file . write ( ( uint8_t * ) & _prefs - > rx_delay_base , sizeof ( _prefs - > rx_delay_base ) ) ; // 80
file . write ( ( uint8_t * ) & _prefs - > rx_delay_base , sizeof ( _prefs - > rx_delay_base ) ) ; // 80
file . write ( ( uint8_t * ) & _prefs - > tx_delay_factor , sizeof ( _prefs - > tx_delay_factor ) ) ; // 84
file . write ( ( uint8_t * ) & _prefs - > tx_delay_factor , sizeof ( _prefs - > tx_delay_factor ) ) ; // 84
file . write ( ( uint8_t * ) & _prefs - > guest_password [ 0 ] , sizeof ( _prefs - > guest_password ) ) ; // 88
file . write ( ( uint8_t * ) & _prefs - > guest_password [ 0 ] , sizeof ( _prefs - > guest_password ) ) ; // 88
@ -153,9 +153,9 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
file . write ( ( uint8_t * ) & _prefs - > multi_acks , sizeof ( _prefs - > multi_acks ) ) ; // 115
file . write ( ( uint8_t * ) & _prefs - > multi_acks , sizeof ( _prefs - > multi_acks ) ) ; // 115
file . write ( ( uint8_t * ) & _prefs - > bw , sizeof ( _prefs - > bw ) ) ; // 116
file . write ( ( uint8_t * ) & _prefs - > bw , sizeof ( _prefs - > bw ) ) ; // 116
file . write ( ( uint8_t * ) & _prefs - > agc_reset_interval , sizeof ( _prefs - > agc_reset_interval ) ) ; // 120
file . write ( ( uint8_t * ) & _prefs - > agc_reset_interval , sizeof ( _prefs - > agc_reset_interval ) ) ; // 120
file . write ( ( uint8_t * ) & _prefs - > sx126x_rx_boosted_gain , sizeof ( _prefs - > sx126x_rx_boosted_gain ) ) ; // 121
file . write ( ( uint8_t * ) & _prefs - > path_hash_mode , sizeof ( _prefs - > path_hash_mode ) ) ; // 121
file . write ( ( uint8_t * ) & _prefs - > path _hash_mo de , sizeof ( _prefs - > path _hash_mo de ) ) ; // 122
file . write ( ( uint8_t * ) & _prefs - > loo p_detect , sizeof ( _prefs - > loo p_detect ) ) ; // 122
file . write ( pad , 1 ) ; // 123 : 1 byte unused
file . write ( pad , 1 ) ; // 123
file . write ( ( uint8_t * ) & _prefs - > flood_max , sizeof ( _prefs - > flood_max ) ) ; // 124
file . write ( ( uint8_t * ) & _prefs - > flood_max , sizeof ( _prefs - > flood_max ) ) ; // 124
file . write ( ( uint8_t * ) & _prefs - > flood_advert_interval , sizeof ( _prefs - > flood_advert_interval ) ) ; // 125
file . write ( ( uint8_t * ) & _prefs - > flood_advert_interval , sizeof ( _prefs - > flood_advert_interval ) ) ; // 125
file . write ( ( uint8_t * ) & _prefs - > interference_threshold , sizeof ( _prefs - > interference_threshold ) ) ; // 126
file . write ( ( uint8_t * ) & _prefs - > interference_threshold , sizeof ( _prefs - > interference_threshold ) ) ; // 126
@ -208,6 +208,10 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
// Reset clock
// Reset clock
getRTCClock ( ) - > setCurrentTime ( 1715770351 ) ; // 15 May 2024, 8:50pm
getRTCClock ( ) - > setCurrentTime ( 1715770351 ) ; // 15 May 2024, 8:50pm
_board - > reboot ( ) ; // doesn't return
_board - > reboot ( ) ; // doesn't return
} else if ( memcmp ( command , " advert.zerohop " , 14 ) = = 0 & & ( command [ 14 ] = = 0 | | command [ 14 ] = = ' ' ) ) {
// send zerohop advert
_callbacks - > sendSelfAdvertisement ( 1500 , false ) ; // longer delay, give CLI response time to be sent first
strcpy ( reply , " OK - zerohop advert sent " ) ;
} else if ( memcmp ( command , " advert " , 6 ) = = 0 ) {
} else if ( memcmp ( command , " advert " , 6 ) = = 0 ) {
// send flood advert
// send flood advert
_callbacks - > sendSelfAdvertisement ( 1500 , true ) ; // longer delay, give CLI response time to be sent first
_callbacks - > sendSelfAdvertisement ( 1500 , true ) ; // longer delay, give CLI response time to be sent first
@ -339,6 +343,16 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
* reply = 0 ; // set null terminator
* reply = 0 ; // set null terminator
} else if ( memcmp ( config , " path.hash.mode " , 14 ) = = 0 ) {
} else if ( memcmp ( config , " path.hash.mode " , 14 ) = = 0 ) {
sprintf ( reply , " > %d " , ( uint32_t ) _prefs - > path_hash_mode ) ;
sprintf ( reply , " > %d " , ( uint32_t ) _prefs - > path_hash_mode ) ;
} else if ( memcmp ( config , " loop.detect " , 11 ) = = 0 ) {
if ( _prefs - > loop_detect = = LOOP_DETECT_OFF ) {
strcpy ( reply , " > off " ) ;
} else if ( _prefs - > loop_detect = = LOOP_DETECT_MINIMAL ) {
strcpy ( reply , " > minimal " ) ;
} else if ( _prefs - > loop_detect = = LOOP_DETECT_MODERATE ) {
strcpy ( reply , " > moderate " ) ;
} else {
strcpy ( reply , " > strict " ) ;
}
} else if ( memcmp ( config , " tx " , 2 ) = = 0 & & ( config [ 2 ] = = 0 | | config [ 2 ] = = ' ' ) ) {
} else if ( memcmp ( config , " tx " , 2 ) = = 0 & & ( config [ 2 ] = = 0 | | config [ 2 ] = = ' ' ) ) {
sprintf ( reply , " > %d " , ( int32_t ) _prefs - > tx_power_dbm ) ;
sprintf ( reply , " > %d " , ( int32_t ) _prefs - > tx_power_dbm ) ;
} else if ( memcmp ( config , " freq " , 4 ) = = 0 ) {
} else if ( memcmp ( config , " freq " , 4 ) = = 0 ) {
@ -587,6 +601,26 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
} else {
} else {
strcpy ( reply , " Error, must be 0,1, or 2 " ) ;
strcpy ( reply , " Error, must be 0,1, or 2 " ) ;
}
}
} else if ( memcmp ( config , " loop.detect " , 12 ) = = 0 ) {
config + = 12 ;
uint8_t mode ;
if ( memcmp ( config , " off " , 3 ) = = 0 ) {
mode = LOOP_DETECT_OFF ;
} else if ( memcmp ( config , " minimal " , 7 ) = = 0 ) {
mode = LOOP_DETECT_MINIMAL ;
} else if ( memcmp ( config , " moderate " , 8 ) = = 0 ) {
mode = LOOP_DETECT_MODERATE ;
} else if ( memcmp ( config , " strict " , 6 ) = = 0 ) {
mode = LOOP_DETECT_STRICT ;
} else {
mode = 0xFF ;
strcpy ( reply , " Error, must be: off, minimal, moderate, or strict " ) ;
}
if ( mode ! = 0xFF ) {
_prefs - > loop_detect = mode ;
savePrefs ( ) ;
strcpy ( reply , " OK " ) ;
}
} else if ( memcmp ( config , " tx " , 3 ) = = 0 ) {
} else if ( memcmp ( config , " tx " , 3 ) = = 0 ) {
_prefs - > tx_power_dbm = atoi ( & config [ 3 ] ) ;
_prefs - > tx_power_dbm = atoi ( & config [ 3 ] ) ;
savePrefs ( ) ;
savePrefs ( ) ;
@ -733,6 +767,9 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
LocationProvider * l = _sensors - > getLocationProvider ( ) ;
LocationProvider * l = _sensors - > getLocationProvider ( ) ;
if ( l ! = NULL ) {
if ( l ! = NULL ) {
l - > syncTime ( ) ;
l - > syncTime ( ) ;
strcpy ( reply , " ok " ) ;
} else {
strcpy ( reply , " gps provider not found " ) ;
}
}
} else if ( memcmp ( command , " gps setloc " , 10 ) = = 0 ) {
} else if ( memcmp ( command , " gps setloc " , 10 ) = = 0 ) {
_prefs - > node_lat = _sensors - > node_lat ;
_prefs - > node_lat = _sensors - > node_lat ;
@ -762,7 +799,7 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
_prefs - > advert_loc_policy = ADVERT_LOC_SHARE ;
_prefs - > advert_loc_policy = ADVERT_LOC_SHARE ;
savePrefs ( ) ;
savePrefs ( ) ;
strcpy ( reply , " ok " ) ;
strcpy ( reply , " ok " ) ;
} else if ( memcmp ( command + 11 , " prefs " , 4 ) = = 0 ) {
} else if ( memcmp ( command + 11 , " prefs " , 5 ) = = 0 ) {
_prefs - > advert_loc_policy = ADVERT_LOC_PREFS ;
_prefs - > advert_loc_policy = ADVERT_LOC_PREFS ;
savePrefs ( ) ;
savePrefs ( ) ;
strcpy ( reply , " ok " ) ;
strcpy ( reply , " ok " ) ;