Add toggleable per-packet signal reporting
This commit is contained in:
@@ -24,6 +24,7 @@ KissModem::KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& r
|
|||||||
_isSendCompleteCallback = nullptr;
|
_isSendCompleteCallback = nullptr;
|
||||||
_onSendFinishedCallback = nullptr;
|
_onSendFinishedCallback = nullptr;
|
||||||
_config = {0, 0, 0, 0, 0};
|
_config = {0, 0, 0, 0, 0};
|
||||||
|
_signal_report_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KissModem::begin() {
|
void KissModem::begin() {
|
||||||
@@ -239,6 +240,12 @@ void KissModem::handleHardwareCommand(uint8_t sub_cmd, const uint8_t* data, uint
|
|||||||
case HW_CMD_GET_DEVICE_NAME:
|
case HW_CMD_GET_DEVICE_NAME:
|
||||||
handleGetDeviceName();
|
handleGetDeviceName();
|
||||||
break;
|
break;
|
||||||
|
case HW_CMD_SET_SIGNAL_REPORT:
|
||||||
|
handleSetSignalReport(data, len);
|
||||||
|
break;
|
||||||
|
case HW_CMD_GET_SIGNAL_REPORT:
|
||||||
|
handleGetSignalReport();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
writeHardwareError(HW_ERR_UNKNOWN_CMD);
|
writeHardwareError(HW_ERR_UNKNOWN_CMD);
|
||||||
break;
|
break;
|
||||||
@@ -304,8 +311,10 @@ void KissModem::processTx() {
|
|||||||
|
|
||||||
void KissModem::onPacketReceived(int8_t snr, int8_t rssi, const uint8_t* packet, uint16_t len) {
|
void KissModem::onPacketReceived(int8_t snr, int8_t rssi, const uint8_t* packet, uint16_t len) {
|
||||||
writeFrame(KISS_CMD_DATA, packet, len);
|
writeFrame(KISS_CMD_DATA, packet, len);
|
||||||
uint8_t meta[2] = { (uint8_t)snr, (uint8_t)rssi };
|
if (_signal_report_enabled) {
|
||||||
writeHardwareFrame(HW_RESP_RX_META, meta, 2);
|
uint8_t meta[2] = { (uint8_t)snr, (uint8_t)rssi };
|
||||||
|
writeHardwareFrame(HW_RESP_RX_META, meta, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KissModem::handleGetIdentity() {
|
void KissModem::handleGetIdentity() {
|
||||||
@@ -572,3 +581,18 @@ void KissModem::handleGetDeviceName() {
|
|||||||
const char* name = _board.getManufacturerName();
|
const char* name = _board.getManufacturerName();
|
||||||
writeHardwareFrame(HW_RESP_DEVICE_NAME, (const uint8_t*)name, strlen(name));
|
writeHardwareFrame(HW_RESP_DEVICE_NAME, (const uint8_t*)name, strlen(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KissModem::handleSetSignalReport(const uint8_t* data, uint16_t len) {
|
||||||
|
if (len < 1) {
|
||||||
|
writeHardwareError(HW_ERR_INVALID_LENGTH);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_signal_report_enabled = (data[0] != 0x00);
|
||||||
|
uint8_t val = _signal_report_enabled ? 0x01 : 0x00;
|
||||||
|
writeHardwareFrame(HW_RESP_SIGNAL_REPORT, &val, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KissModem::handleGetSignalReport() {
|
||||||
|
uint8_t val = _signal_report_enabled ? 0x01 : 0x00;
|
||||||
|
writeHardwareFrame(HW_RESP_SIGNAL_REPORT, &val, 1);
|
||||||
|
}
|
||||||
|
|||||||
@@ -51,6 +51,8 @@
|
|||||||
#define HW_CMD_GET_DEVICE_NAME 0x16
|
#define HW_CMD_GET_DEVICE_NAME 0x16
|
||||||
#define HW_CMD_PING 0x17
|
#define HW_CMD_PING 0x17
|
||||||
#define HW_CMD_REBOOT 0x18
|
#define HW_CMD_REBOOT 0x18
|
||||||
|
#define HW_CMD_SET_SIGNAL_REPORT 0x19
|
||||||
|
#define HW_CMD_GET_SIGNAL_REPORT 0x1A
|
||||||
|
|
||||||
/* Response code = command code | 0x80. Generic / unsolicited use 0xF0+. */
|
/* Response code = command code | 0x80. Generic / unsolicited use 0xF0+. */
|
||||||
#define HW_RESP(cmd) ((cmd) | 0x80)
|
#define HW_RESP(cmd) ((cmd) | 0x80)
|
||||||
@@ -76,6 +78,7 @@
|
|||||||
#define HW_RESP_SENSORS HW_RESP(HW_CMD_GET_SENSORS) /* 0x95 */
|
#define HW_RESP_SENSORS HW_RESP(HW_CMD_GET_SENSORS) /* 0x95 */
|
||||||
#define HW_RESP_DEVICE_NAME HW_RESP(HW_CMD_GET_DEVICE_NAME) /* 0x96 */
|
#define HW_RESP_DEVICE_NAME HW_RESP(HW_CMD_GET_DEVICE_NAME) /* 0x96 */
|
||||||
#define HW_RESP_PONG HW_RESP(HW_CMD_PING) /* 0x97 */
|
#define HW_RESP_PONG HW_RESP(HW_CMD_PING) /* 0x97 */
|
||||||
|
#define HW_RESP_SIGNAL_REPORT HW_RESP(HW_CMD_GET_SIGNAL_REPORT) /* 0x9A */
|
||||||
|
|
||||||
/* Generic responses (shared by multiple commands) */
|
/* Generic responses (shared by multiple commands) */
|
||||||
#define HW_RESP_OK 0xF0
|
#define HW_RESP_OK 0xF0
|
||||||
@@ -153,6 +156,7 @@ class KissModem {
|
|||||||
OnSendFinishedCallback _onSendFinishedCallback;
|
OnSendFinishedCallback _onSendFinishedCallback;
|
||||||
|
|
||||||
RadioConfig _config;
|
RadioConfig _config;
|
||||||
|
bool _signal_report_enabled;
|
||||||
|
|
||||||
void writeByte(uint8_t b);
|
void writeByte(uint8_t b);
|
||||||
void writeFrame(uint8_t type, const uint8_t* data, uint16_t len);
|
void writeFrame(uint8_t type, const uint8_t* data, uint16_t len);
|
||||||
@@ -186,6 +190,8 @@ class KissModem {
|
|||||||
void handleGetMCUTemp();
|
void handleGetMCUTemp();
|
||||||
void handleReboot();
|
void handleReboot();
|
||||||
void handleGetDeviceName();
|
void handleGetDeviceName();
|
||||||
|
void handleSetSignalReport(const uint8_t* data, uint16_t len);
|
||||||
|
void handleGetSignalReport();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& rng,
|
KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& rng,
|
||||||
|
|||||||
Reference in New Issue
Block a user