Skip to content

Commit 5ccd99e

Browse files
Add toggleable per-packet signal reporting
1 parent 7982d1c commit 5ccd99e

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

examples/kiss_modem/KissModem.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2930
void 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

305312
void 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

311320
void 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+
}

examples/kiss_modem/KissModem.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
#define HW_CMD_GET_DEVICE_NAME 0x16
5252
#define HW_CMD_PING 0x17
5353
#define HW_CMD_REBOOT 0x18
54+
#define HW_CMD_SET_SIGNAL_REPORT 0x19
55+
#define HW_CMD_GET_SIGNAL_REPORT 0x1A
5456

5557
/* Response code = command code | 0x80. Generic / unsolicited use 0xF0+. */
5658
#define HW_RESP(cmd) ((cmd) | 0x80)
@@ -76,6 +78,7 @@
7678
#define HW_RESP_SENSORS HW_RESP(HW_CMD_GET_SENSORS) /* 0x95 */
7779
#define HW_RESP_DEVICE_NAME HW_RESP(HW_CMD_GET_DEVICE_NAME) /* 0x96 */
7880
#define HW_RESP_PONG HW_RESP(HW_CMD_PING) /* 0x97 */
81+
#define HW_RESP_SIGNAL_REPORT HW_RESP(HW_CMD_GET_SIGNAL_REPORT) /* 0x9A */
7982

8083
/* Generic responses (shared by multiple commands) */
8184
#define HW_RESP_OK 0xF0
@@ -153,6 +156,7 @@ class KissModem {
153156
OnSendFinishedCallback _onSendFinishedCallback;
154157

155158
RadioConfig _config;
159+
bool _signal_report_enabled;
156160

157161
void writeByte(uint8_t b);
158162
void writeFrame(uint8_t type, const uint8_t* data, uint16_t len);
@@ -186,6 +190,8 @@ class KissModem {
186190
void handleGetMCUTemp();
187191
void handleReboot();
188192
void handleGetDeviceName();
193+
void handleSetSignalReport(const uint8_t* data, uint16_t len);
194+
void handleGetSignalReport();
189195

190196
public:
191197
KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& rng,

0 commit comments

Comments
 (0)