feat: added support transmitted data dynamic size

This commit is contained in:
aZholtikov committed 2026-10-23 13:10:26 +03:00
1 parent 46229540bb
commit 905e3fdfc0
1 file changed
+63 -13
+63 -13
View File
@@ -19,36 +19,70 @@ extern "C"
{ {
int16_t id; int16_t id;
int16_t type; int16_t type;
int16_t battery_voltage; int16_t battery;
int16_t value_1; int16_t value_1;
int16_t value_2; int16_t value_2;
int16_t value_3; int16_t value_3;
int16_t value_4; int16_t value_4;
int16_t value_5;
int16_t value_6;
int16_t value_7;
int16_t value_8;
int16_t value_9;
int16_t value_10;
} zh_rf_sensor_transmitted_data_t; } zh_rf_sensor_transmitted_data_t;
typedef struct
{
uint8_t type;
uint8_t magic;
uint8_t token_hi;
uint8_t token_lo;
uint8_t id;
} zh_rf_sensor_pairing_data_t;
#define ZH_RF_PAIRING_PACKET_SIZE 5
#define ZH_RF_PAIRING_REQ_MAGIC 0xA5
#define ZH_RF_PAIRING_ACK_MAGIC 0x5A
/**
* @brief Sensor types description.
*
* DF(value, name, payload size (in bytes))
*
* - BME280 12 — {id, type, battery, humidity, temperature, pressure}
* - BMP280 10 — {id, type, battery, temperature, pressure}
* - BME680 14 — {id, type, battery, humidity, temperature, pressure, quality}
* - TOUCH_SWITCH 6 — {id, type, battery}
* - WATER_LEAKAGE 8 — {id, type, battery, status}
* - PLANT_HUMIDITY 8 — {id, type, battery, humidity}
* - OPEN_CLOSE 8 — {id, type, battery, status}
*
* @note payload size - FULL packet size, including the header (id + type + battery).
*/
#define ZH_RF_SENSOR_TYPE \ #define ZH_RF_SENSOR_TYPE \
DF(ZH_RF_SENSOR_NONE, "") \ DF(ZH_RF_SENSOR_NONE, "", 0) \
DF(ZH_RF_SENSOR_BME280, "bme280") /* {id, ZH_RF_SENSOR_BME280, battery_voltage, humidity, temperature, pressure, 0} */ \ DF(ZH_RF_SENSOR_BME280, "bme280", 12) \
DF(ZH_RF_SENSOR_BMP280, "bmp280") /* {id, ZH_RF_SENSOR_BMP280, battery_voltage, temperature, pressure, 0, 0} */ \ DF(ZH_RF_SENSOR_BMP280, "bmp280", 10) \
DF(ZH_RF_SENSOR_BME680, "bme680") /* {id, ZH_RF_SENSOR_BME680, battery_voltage, humidity, temperature, pressure, quality} */ \ DF(ZH_RF_SENSOR_BME680, "bme680", 14) \
DF(ZH_RF_SENSOR_TOUCH_SWITCH, "touch_switch") /* {id, ZH_RF_SENSOR_TOUCH_SWITCH, battery_voltage, 0, 0, 0, 0} */ \ DF(ZH_RF_SENSOR_TOUCH_SWITCH, "touch_switch", 6) \
DF(ZH_RF_SENSOR_WATER_LEAKAGE, "water_leakage") /* {id, ZH_RF_SENSOR_WATER_LEAKAGE, battery_voltage, status (ALARM/DRY), 0, 0, 0} */ \ DF(ZH_RF_SENSOR_WATER_LEAKAGE, "water_leakage", 8) \
DF(ZH_RF_SENSOR_PLANT_HUMIDITY, "plant_humidity") /* {id, ZH_RF_SENSOR_PLANT_HUMIDITY, battery_voltage, humidity, 0, 0, 0} */ \ DF(ZH_RF_SENSOR_PLANT_HUMIDITY, "plant_humidity", 8) \
DF(ZH_RF_SENSOR_OPEN_CLOSE, "open_close") /* {id, ZH_RF_SENSOR_OPEN_CLOSE, battery_voltage, status (OPEN/CLOSE), 0, 0, 0} */ \ DF(ZH_RF_SENSOR_OPEN_CLOSE, "open_close", 8) \
DF(ZH_RF_SENSOR_MAX, "") DF(ZH_RF_SENSOR_MAX, "", 0)
typedef enum typedef enum
{ {
#define DF(_value, _name) _value, #define DF(_value, _name, _size) _value,
ZH_RF_SENSOR_TYPE ZH_RF_SENSOR_TYPE
#undef DF #undef DF
} zh_rf_sensor_type_t; } zh_rf_sensor_type_t;
const char *get_zh_rf_sensor_type_name(zh_rf_sensor_type_t value) static inline const char *zh_get_rf_sensor_type_name(zh_rf_sensor_type_t value)
{ {
switch (value) switch (value)
{ {
#define DF(_value, _name) \ #define DF(_value, _name, _size) \
case _value: \ case _value: \
return _name; return _name;
ZH_RF_SENSOR_TYPE ZH_RF_SENSOR_TYPE
@@ -60,6 +94,22 @@ extern "C"
return ""; return "";
} }
static inline uint8_t zh_get_rf_sensor_payload_size(int16_t type)
{
switch (type)
{
#define DF(_value, _name, _size) \
case _value: \
return (uint8_t)(_size);
ZH_RF_SENSOR_TYPE
#undef DF
break;
default:
break;
}
return 0;
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif