@@ -59,7 +59,11 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
5959 file.read ((uint8_t *)&_prefs->flood_advert_interval , sizeof (_prefs->flood_advert_interval )); // 125
6060 file.read ((uint8_t *)&_prefs->interference_threshold , sizeof (_prefs->interference_threshold )); // 126
6161 file.read ((uint8_t *)&_prefs->bridge_enabled , sizeof (_prefs->bridge_enabled )); // 127
62- file.read ((uint8_t *)&_prefs->bridge_channel , sizeof (_prefs->bridge_channel )); // 128
62+ file.read ((uint8_t *)&_prefs->bridge_delay , sizeof (_prefs->bridge_delay )); // 128
63+ file.read ((uint8_t *)&_prefs->bridge_pkt_src , sizeof (_prefs->bridge_pkt_src )); // 130
64+ file.read ((uint8_t *)&_prefs->bridge_baud , sizeof (_prefs->bridge_baud )); // 131
65+ file.read ((uint8_t *)&_prefs->bridge_channel , sizeof (_prefs->bridge_channel )); // 132
66+ file.read ((uint8_t *)&_prefs->bridge_secret , sizeof (_prefs->bridge_secret )); // 133
6367
6468 // sanitise bad pref values
6569 _prefs->rx_delay_base = constrain (_prefs->rx_delay_base , 0 , 20 .0f );
@@ -72,7 +76,12 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
7276 _prefs->cr = constrain (_prefs->cr , 5 , 8 );
7377 _prefs->tx_power_dbm = constrain (_prefs->tx_power_dbm , 1 , 30 );
7478 _prefs->multi_acks = constrain (_prefs->multi_acks , 0 , 1 );
79+
80+ // sanitise bad bridge pref values
7581 _prefs->bridge_enabled = constrain (_prefs->bridge_enabled , 0 , 1 );
82+ _prefs->bridge_delay = constrain (_prefs->bridge_delay , 0 , 10000 );
83+ _prefs->bridge_pkt_src = constrain (_prefs->bridge_pkt_src , 0 , 1 );
84+ _prefs->bridge_baud = constrain (_prefs->bridge_baud , 9600 , 115200 );
7685 _prefs->bridge_channel = constrain (_prefs->bridge_channel , 0 , 14 );
7786
7887 file.close ();
@@ -119,7 +128,11 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
119128 file.write ((uint8_t *)&_prefs->flood_advert_interval , sizeof (_prefs->flood_advert_interval )); // 125
120129 file.write ((uint8_t *)&_prefs->interference_threshold , sizeof (_prefs->interference_threshold )); // 126
121130 file.write ((uint8_t *)&_prefs->bridge_enabled , sizeof (_prefs->bridge_enabled )); // 127
122- file.write ((uint8_t *)&_prefs->bridge_channel , sizeof (_prefs->bridge_channel )); // 128
131+ file.write ((uint8_t *)&_prefs->bridge_delay , sizeof (_prefs->bridge_delay )); // 128
132+ file.write ((uint8_t *)&_prefs->bridge_pkt_src , sizeof (_prefs->bridge_pkt_src )); // 130
133+ file.write ((uint8_t *)&_prefs->bridge_baud , sizeof (_prefs->bridge_baud )); // 131
134+ file.write ((uint8_t *)&_prefs->bridge_channel , sizeof (_prefs->bridge_channel )); // 132
135+ file.write ((uint8_t *)&_prefs->bridge_secret , sizeof (_prefs->bridge_secret )); // 133
123136
124137 file.close ();
125138 }
@@ -205,6 +218,9 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
205218 } else if (memcmp (command, " clear stats" , 11 ) == 0 ) {
206219 _callbacks->clearStats ();
207220 strcpy (reply, " (OK - stats reset)" );
221+ /*
222+ * GET commands
223+ */
208224 } else if (memcmp (command, " get " , 4 ) == 0 ) {
209225 const char * config = &command[4 ];
210226 if (memcmp (config, " af" , 2 ) == 0 ) {
@@ -261,38 +277,29 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
261277#ifdef WITH_BRIDGE
262278 } else if (memcmp (config, " bridge.enabled" , 14 ) == 0 ) {
263279 sprintf (reply, " > %s" , _prefs->bridge_enabled ? " on" : " off" );
280+ } else if (memcmp (config, " bridge.delay" , 12 ) == 0 ) {
281+ sprintf (reply, " > %d" , (uint32_t )_prefs->bridge_delay );
282+ } else if (memcmp (config, " bridge.source" , 13 ) == 0 ) {
283+ sprintf (reply, " > %s" , _prefs->bridge_pkt_src ? " logRx" : " logTx" );
284+ #endif
285+ #ifdef WITH_RS232_BRIDGE
286+ } else if (memcmp (config, " bridge.baud" , 11 ) == 0 ) {
287+ sprintf (reply, " > %d" , (uint32_t )_prefs->bridge_baud );
288+ #endif
264289#ifdef WITH_ESPNOW_BRIDGE
265290 } else if (memcmp (config, " bridge.channel" , 14 ) == 0 ) {
266291 sprintf (reply, " > %d" , (uint32_t )_prefs->bridge_channel );
267- #endif
292+ } else if (memcmp (config, " bridge.secret" , 13 ) == 0 ) {
293+ sprintf (reply, " > %s" , _prefs->bridge_secret );
268294#endif
269295 } else {
270296 sprintf (reply, " ??: %s" , config);
271297 }
298+ /*
299+ * SET commands
300+ */
272301 } else if (memcmp (command, " set " , 4 ) == 0 ) {
273302 const char * config = &command[4 ];
274- #ifdef WITH_BRIDGE
275- if (memcmp (config, " bridge.enabled " , 15 ) == 0 ) {
276- _prefs->bridge_enabled = memcmp (&config[15 ], " on" , 2 ) == 0 ;
277- _callbacks->setBridgeState (_prefs->bridge_enabled );
278- savePrefs ();
279- strcpy (reply, " OK" );
280- }
281- else
282- #ifdef WITH_ESPNOW_BRIDGE
283- if (memcmp (config, " bridge.channel " , 15 ) == 0 ) {
284- int ch = atoi (&config[15 ]);
285- if (ch > 0 && ch < 15 ) {
286- _prefs->bridge_channel = (uint8_t )ch;
287- _callbacks->updateBridgeChannel (ch);
288- savePrefs ();
289- strcpy (reply, " OK" );
290- } else {
291- strcpy (reply, " Error: channel must be 0 (AUTO) or 1-14" );
292- }
293- } else
294- #endif
295- #endif
296303 if (memcmp (config, " af " , 3 ) == 0 ) {
297304 _prefs->airtime_factor = atof (&config[3 ]);
298305 savePrefs ();
@@ -428,6 +435,55 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
428435 _prefs->freq = atof (&config[5 ]);
429436 savePrefs ();
430437 strcpy (reply, " OK - reboot to apply" );
438+ #ifdef WITH_BRIDGE
439+ } else if (memcmp (config, " bridge.enabled " , 15 ) == 0 ) {
440+ _prefs->bridge_enabled = memcmp (&config[15 ], " on" , 2 ) == 0 ;
441+ _callbacks->setBridgeState (_prefs->bridge_enabled );
442+ savePrefs ();
443+ strcpy (reply, " OK" );
444+ } else if (memcmp (config, " bridge.delay " , 13 ) == 0 ) {
445+ int delay = _atoi (&config[13 ]);
446+ if (delay >= 0 && delay <= 10000 ) {
447+ _prefs->bridge_delay = (uint16_t )delay;
448+ savePrefs ();
449+ strcpy (reply, " OK" );
450+ } else {
451+ strcpy (reply, " Error: delay must be between 0-10000 ms" );
452+ }
453+ } else if (memcmp (config, " bridge.source " , 14 ) == 0 ) {
454+ _prefs->bridge_pkt_src = memcmp (&config[14 ], " rx" , 2 ) == 0 ;
455+ savePrefs ();
456+ strcpy (reply, " OK" );
457+ #endif
458+ #ifdef WITH_RS232_BRIDGE
459+ } else if (memcmp (config, " bridge.baud " , 12 ) == 0 ) {
460+ uint32_t baud = atoi (&config[12 ]);
461+ if (baud >= 9600 && baud <= 115200 ) {
462+ _prefs->bridge_baud = (uint32_t )baud;
463+ _callbacks->restartBridge ();
464+ savePrefs ();
465+ strcpy (reply, " OK" );
466+ } else {
467+ strcpy (reply, " Error: baud rate must be between 9600-115200" );
468+ }
469+ #endif
470+ #ifdef WITH_ESPNOW_BRIDGE
471+ } else if (memcmp (config, " bridge.channel " , 15 ) == 0 ) {
472+ int ch = atoi (&config[15 ]);
473+ if (ch > 0 && ch < 15 ) {
474+ _prefs->bridge_channel = (uint8_t )ch;
475+ _callbacks->restartBridge ();
476+ savePrefs ();
477+ strcpy (reply, " OK" );
478+ } else {
479+ strcpy (reply, " Error: channel must be between 1-14" );
480+ }
481+ } else if (memcmp (config, " bridge.secret " , 14 ) == 0 ) {
482+ StrHelper::strncpy (_prefs->bridge_secret , &config[14 ], sizeof (_prefs->bridge_secret ));
483+ _callbacks->restartBridge ();
484+ savePrefs ();
485+ strcpy (reply, " OK" );
486+ #endif
431487 } else {
432488 sprintf (reply, " unknown config: %s" , config);
433489 }
0 commit comments