/* * YM310 Protocol Handler - Header File * * 定义系统信息、设备信息、限制参数等结构体,并提供外部变量声明。 * * Version: 1.0.0 */ #ifndef __YM310_PROTECL_H__ #define __YM310_PROTECL_H__ /*********************↓ define ↓************************/ #ifdef __cplusplus extern "C" { #endif #define VALID 0x9D /*********************↑ define ↑************************/ /*********************↓ include ↓************************/ #include #include /*********************↑ include ↑************************/ /*********************↓ global variables ↓************************/ /* 第三方服务器配置结构体(用于持久化) */ typedef struct { char sub_topic[64]; /* 订阅主题 */ char pub_topic[64]; /* 发布主题 */ char host[64]; /* 服务器地址 */ uint16_t port; /* 端口 */ uint8_t qos; /* QoS */ char lastwill[64]; /* 遗嘱主题 */ char username[32]; /* 用户名 */ char password[32]; /* 密码 */ char client_id[32]; /* 客户端ID(默认IMEI) */ char enable; // 0x9D为开启 其余为关闭 } SERVER_CFG; /* 系统信息结构体(全局参数,持久化) */ typedef struct { char imei[16]; /* IMEI(模组唯一ID) */ char iccid[21]; /* SIM卡ICCID */ uint8_t csq; /* 信号强度 0-31 */ SERVER_CFG customer_cfg; /* 客户MQTT配置(可保存) */ char update_url[128]; // 升级路径 } SYS_INFO; typedef enum { work_state_IDLE = 0, work_state_WORK, work_state_CHG }work_state_DEF; typedef struct { uint8_t temp_protect; /* tps: 温控保护 */ uint8_t tilt_protect; /* dps: 倾倒保护 */ uint8_t rain_protect; /* rps: 雨控保护 */ uint8_t light_protect; /* lps: 光控保护 */ uint8_t undervolt_protect; /* vps: 欠压保护 */ uint8_t work_state; /* ws: 0待机,1工作,2充电 */ uint32_t hv_count; /* ct: 高压计数 */ uint16_t charge_voltage; /* cv: 充电电压(mV) */ uint16_t battery_voltage; /* bv: 电池电压(mV) */ int16_t board_temp; /* bt: 主板温度(0.1℃) */ uint8_t lamp_fault; /* voltval: 灯管故障检测(1故障) */ uint8_t idle_flag; /* cycle_off: 空闲标志位 */ uint16_t lamp_current; // 灯管电流 uint16_t hv_current; /* ct: 高压电流 */ uint16_t light_percent; // 光控值(百分比值 保留一位小数 ) } SYS_STATUS; /* 设备信息结构体(可配置工作参数,部分持久化) */ typedef struct { uint8_t power_state; /* ds: 0关机,1开机 */ uint16_t light_work_duration; /* tt: 光控工作时长(小时) */ uint8_t light_flag; /* : 光控切换标志位 0-太阳能板 1-光敏二极管 */ uint8_t time_ctrl_enable; /* ts: 时控开关 0-光控/1-时控 */ uint8_t time_start; /* st: 时控开始小时 */ uint8_t time_end; /* et: 时控结束小时 */ uint16_t data_interval; /* dat_f: 数据上报间隔(分钟) */ uint16_t clean_interval; /* clt_t: 清扫间隔(分钟) (暂时无需使用)*/ uint8_t clean_enable; /* clear_on: 自清虫标志 (暂时无需使用)*/ uint8_t GPS_MODE; /* gps: 0手动,1GPS */ char longitude[16]; /* 经度,字符串格式如 "113.3963165" */ char latitude[16]; /* 纬度,字符串格式如 "34.4861845" */ char longitude_FORCE[16]; /* 强制经度 */ char latitude_FORCE[16]; /* 强制纬度 */ } DEV_INFO; /* 限制参数结构体(电压阈值等配置,持久化) */ typedef struct { uint16_t vsunrise; /* 日出电压(mV) */ uint16_t vsunset; /* 日落电压(mV) */ uint16_t vcutof; /* 截止电压(mV) */ uint16_t vfloat; /* 浮充电压(mV) */ uint16_t vrecharge; /* 再次开启充电电压(mV) */ uint16_t uvstart; /* 开机电压(mV) */ uint16_t uvoff; /* 欠压恢复电压(mV) */ uint16_t uvon; /* 欠压保护电压(mV) */ uint16_t overtemp; /* 高温保护温度(0.1℃) */ int16_t lowtemp; /* 低温保护温度(0.1℃) */ uint16_t unovert; /* 高温恢复温度(0.1℃) */ int16_t unlowt; /* 低温恢复温度(0.1℃) */ uint8_t battype; /* 电池类型 */ } LIMIT; /* Sensor数据结构体 - 三合一简化结构 */ typedef struct { int16_t temp_plat; /* 平台下发温度,保留一位小数(如23.5°C存储235) */ int16_t humi_plat; /* 平台下发湿度,保留一位小数(如65.3%存储653) */ uint8_t valid_plat; /* 平台数据有效标志:0x9D有效 */ int16_t temp_sht; /* SHT30温度,保留一位小数(如23.5°C存储235) */ int16_t humi_sht; /* SHT30湿度,保留一位小数(如65.3%存储653) */ uint8_t valid_sht; /* SHT30数据有效标志:0x9D有效 */ int16_t temp_ntc; /* NTC温度,保留一位小数(如23.5°C存储235) */ uint8_t valid_ntc; /* NTC数据有效标志:0x9D有效 */ } sensor_t; extern SYS_INFO sys_info; extern DEV_INFO dev_info; extern LIMIT limit; extern sensor_t sensor; /*********************↑ global variables ↑************************/ /********************↓ declaration ↓***********************/ void ym310_protocol_process(rt_uint8_t client_idx, const char *topic, const char *payload, rt_uint16_t len); void report_now(void); /********************↑ declaration ↑***********************/ #ifdef __cplusplus } #endif #endif /* __YM310_PROTECL_H__ */