Reorganise KISS protocol to close gaps.

This commit is contained in:
ViezeVingertjes 2026-02-06 11:43:59 +01:00
parent 203d86f87d
commit 02ddc05c30
3 changed files with 116 additions and 52 deletions

View file

@ -225,6 +225,15 @@ void KissModem::handleHardwareCommand(uint8_t sub_cmd, const uint8_t* data, uint
case HW_CMD_GET_SENSORS:
handleGetSensors(data, len);
break;
case HW_CMD_GET_MCU_TEMP:
handleGetMCUTemp();
break;
case HW_CMD_REBOOT:
handleReboot();
break;
case HW_CMD_GET_DEVICE_NAME:
handleGetDeviceName();
break;
default:
writeHardwareError(HW_ERR_UNKNOWN_CMD);
break;
@ -536,3 +545,25 @@ void KissModem::handleGetSensors(const uint8_t* data, uint16_t len) {
writeHardwareFrame(HW_RESP_SENSORS, nullptr, 0);
}
}
void KissModem::handleGetMCUTemp() {
float temp = _board.getMCUTemperature();
if (isnan(temp)) {
writeHardwareError(HW_ERR_NO_CALLBACK);
return;
}
int16_t temp_tenths = (int16_t)(temp * 10.0f);
writeHardwareFrame(HW_RESP_MCU_TEMP, (uint8_t*)&temp_tenths, 2);
}
void KissModem::handleReboot() {
writeHardwareFrame(HW_RESP_OK, nullptr, 0);
_serial.flush();
delay(50);
_board.reboot();
}
void KissModem::handleGetDeviceName() {
const char* name = _board.getManufacturerName();
writeHardwareFrame(HW_RESP_DEVICE_NAME, (const uint8_t*)name, strlen(name));
}

View file

@ -37,17 +37,20 @@
#define HW_CMD_HASH 0x08
#define HW_CMD_SET_RADIO 0x09
#define HW_CMD_SET_TX_POWER 0x0A
#define HW_CMD_GET_RADIO 0x0C
#define HW_CMD_GET_TX_POWER 0x0D
#define HW_CMD_GET_VERSION 0x0F
#define HW_CMD_GET_CURRENT_RSSI 0x10
#define HW_CMD_IS_CHANNEL_BUSY 0x11
#define HW_CMD_GET_AIRTIME 0x12
#define HW_CMD_GET_NOISE_FLOOR 0x13
#define HW_CMD_GET_STATS 0x14
#define HW_CMD_GET_BATTERY 0x15
#define HW_CMD_PING 0x16
#define HW_CMD_GET_SENSORS 0x17
#define HW_CMD_GET_RADIO 0x0B
#define HW_CMD_GET_TX_POWER 0x0C
#define HW_CMD_GET_CURRENT_RSSI 0x0D
#define HW_CMD_IS_CHANNEL_BUSY 0x0E
#define HW_CMD_GET_AIRTIME 0x0F
#define HW_CMD_GET_NOISE_FLOOR 0x10
#define HW_CMD_GET_VERSION 0x11
#define HW_CMD_GET_STATS 0x12
#define HW_CMD_GET_BATTERY 0x13
#define HW_CMD_GET_MCU_TEMP 0x14
#define HW_CMD_GET_SENSORS 0x15
#define HW_CMD_GET_DEVICE_NAME 0x16
#define HW_CMD_PING 0x17
#define HW_CMD_REBOOT 0x18
#define HW_RESP_IDENTITY 0x21
#define HW_RESP_RANDOM 0x22
@ -58,20 +61,22 @@
#define HW_RESP_SHARED_SECRET 0x27
#define HW_RESP_HASH 0x28
#define HW_RESP_OK 0x29
#define HW_RESP_RADIO 0x2A
#define HW_RESP_TX_POWER 0x2B
#define HW_RESP_VERSION 0x2D
#define HW_RESP_ERROR 0x2E
#define HW_RESP_TX_DONE 0x2F
#define HW_RESP_CURRENT_RSSI 0x30
#define HW_RESP_CHANNEL_BUSY 0x31
#define HW_RESP_AIRTIME 0x32
#define HW_RESP_NOISE_FLOOR 0x33
#define HW_RESP_STATS 0x34
#define HW_RESP_BATTERY 0x35
#define HW_RESP_PONG 0x36
#define HW_RESP_SENSORS 0x37
#define HW_RESP_RX_META 0x38
#define HW_RESP_ERROR 0x2A
#define HW_RESP_RADIO 0x2B
#define HW_RESP_TX_POWER 0x2C
#define HW_RESP_CURRENT_RSSI 0x2D
#define HW_RESP_CHANNEL_BUSY 0x2E
#define HW_RESP_AIRTIME 0x2F
#define HW_RESP_NOISE_FLOOR 0x30
#define HW_RESP_VERSION 0x31
#define HW_RESP_STATS 0x32
#define HW_RESP_BATTERY 0x33
#define HW_RESP_MCU_TEMP 0x34
#define HW_RESP_SENSORS 0x35
#define HW_RESP_DEVICE_NAME 0x36
#define HW_RESP_PONG 0x37
#define HW_RESP_TX_DONE 0x38
#define HW_RESP_RX_META 0x39
#define HW_ERR_INVALID_LENGTH 0x01
#define HW_ERR_INVALID_PARAM 0x02
@ -171,6 +176,9 @@ class KissModem {
void handleGetBattery();
void handlePing();
void handleGetSensors(const uint8_t* data, uint16_t len);
void handleGetMCUTemp();
void handleReboot();
void handleGetDeviceName();
public:
KissModem(Stream& serial, mesh::LocalIdentity& identity, mesh::RNG& rng,