@@ -24,6 +24,7 @@ KissModem::KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& r
2424 _isSendCompleteCallback = nullptr ;
2525 _onSendFinishedCallback = nullptr ;
2626 _config = {0 , 0 , 0 , 0 , 0 };
27+ _signal_report_enabled = true ;
2728}
2829
2930void KissModem::begin () {
@@ -239,6 +240,12 @@ void KissModem::handleHardwareCommand(uint8_t sub_cmd, const uint8_t* data, uint
239240 case HW_CMD_GET_DEVICE_NAME :
240241 handleGetDeviceName ();
241242 break ;
243+ case HW_CMD_SET_SIGNAL_REPORT :
244+ handleSetSignalReport (data, len);
245+ break ;
246+ case HW_CMD_GET_SIGNAL_REPORT :
247+ handleGetSignalReport ();
248+ break ;
242249 default :
243250 writeHardwareError (HW_ERR_UNKNOWN_CMD );
244251 break ;
@@ -304,8 +311,10 @@ void KissModem::processTx() {
304311
305312void KissModem::onPacketReceived (int8_t snr, int8_t rssi, const uint8_t * packet, uint16_t len) {
306313 writeFrame (KISS_CMD_DATA , packet, len);
307- uint8_t meta[2 ] = { (uint8_t )snr, (uint8_t )rssi };
308- writeHardwareFrame (HW_RESP_RX_META , meta, 2 );
314+ if (_signal_report_enabled) {
315+ uint8_t meta[2 ] = { (uint8_t )snr, (uint8_t )rssi };
316+ writeHardwareFrame (HW_RESP_RX_META , meta, 2 );
317+ }
309318}
310319
311320void KissModem::handleGetIdentity () {
@@ -572,3 +581,18 @@ void KissModem::handleGetDeviceName() {
572581 const char * name = _board.getManufacturerName ();
573582 writeHardwareFrame (HW_RESP_DEVICE_NAME , (const uint8_t *)name, strlen (name));
574583}
584+
585+ void KissModem::handleSetSignalReport (const uint8_t * data, uint16_t len) {
586+ if (len < 1 ) {
587+ writeHardwareError (HW_ERR_INVALID_LENGTH );
588+ return ;
589+ }
590+ _signal_report_enabled = (data[0 ] != 0x00 );
591+ uint8_t val = _signal_report_enabled ? 0x01 : 0x00 ;
592+ writeHardwareFrame (HW_RESP_SIGNAL_REPORT , &val, 1 );
593+ }
594+
595+ void KissModem::handleGetSignalReport () {
596+ uint8_t val = _signal_report_enabled ? 0x01 : 0x00 ;
597+ writeHardwareFrame (HW_RESP_SIGNAL_REPORT , &val, 1 );
598+ }
0 commit comments