Files
zh_nrf24_config/zh_rf_config.h
T

115 lines
3.0 KiB
C

#pragma once
#include "stdint.h"
#ifdef __cplusplus
extern "C"
{
#endif
typedef enum
{
OPEN = 1,
CLOSE = 0,
ALARM = 1,
DRY = 0
} zh_rf_sensor_status_type_t;
typedef struct
{
int16_t id;
int16_t type;
int16_t battery;
int16_t value_1;
int16_t value_2;
int16_t value_3;
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;
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 \
DF(ZH_RF_SENSOR_NONE, "", 0) \
DF(ZH_RF_SENSOR_BME280, "bme280", 12) \
DF(ZH_RF_SENSOR_BMP280, "bmp280", 10) \
DF(ZH_RF_SENSOR_BME680, "bme680", 14) \
DF(ZH_RF_SENSOR_TOUCH_SWITCH, "touch_switch", 6) \
DF(ZH_RF_SENSOR_WATER_LEAKAGE, "water_leakage", 8) \
DF(ZH_RF_SENSOR_PLANT_HUMIDITY, "plant_humidity", 8) \
DF(ZH_RF_SENSOR_OPEN_CLOSE, "open_close", 8) \
DF(ZH_RF_SENSOR_MAX, "", 0)
typedef enum
{
#define DF(_value, _name, _size) _value,
ZH_RF_SENSOR_TYPE
#undef DF
} zh_rf_sensor_type_t;
static inline const char *zh_get_rf_sensor_type_name(zh_rf_sensor_type_t value)
{
switch (value)
{
#define DF(_value, _name, _size) \
case _value: \
return _name;
ZH_RF_SENSOR_TYPE
#undef DF
break;
default:
break;
}
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
}
#endif