From e11d8ec8220d1fe40b5ce5e2e338465771472149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Thu, 29 May 2025 10:50:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=80=E6=AC=BE=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/user_sys.h | 8 +- bsp/inc/bsp_ml307.h | 282 ++++++++++++++++++++-------------------- 2 files changed, 143 insertions(+), 147 deletions(-) diff --git a/applications/user_sys.h b/applications/user_sys.h index c26fdef..80e49f9 100644 --- a/applications/user_sys.h +++ b/applications/user_sys.h @@ -30,12 +30,12 @@ // 正式平台链接 -// #define SYS_IOT_URL ("8.130.122.162") -// #define SYS_IOT_PORT ("7153") +#define SYS_IOT_URL ("8.130.122.162") +#define SYS_IOT_PORT ("7153") //测试平台链接 -#define SYS_IOT_URL ("8.130.105.38") -#define SYS_IOT_PORT ("7133") +// #define SYS_IOT_URL ("8.130.105.38") +// #define SYS_IOT_PORT ("7133") #define K (8 * 1000) diff --git a/bsp/inc/bsp_ml307.h b/bsp/inc/bsp_ml307.h index 9f8fed5..1a526b6 100644 --- a/bsp/inc/bsp_ml307.h +++ b/bsp/inc/bsp_ml307.h @@ -12,138 +12,135 @@ #include #include "drv_gpio.h" +#define MAX_VALVE_NUM 8 -#define MAX_VALVE_NUM 8 - - -#define ML307_ENABLE_3_8_V GET_PIN (B, 3) -#define ML307_PWR_PIN GET_PIN (B, 4) -#define ML307_RST_PIN GET_PIN (B, 5) -#define ML307_USIM_DECT_PIN GET_PIN (B, 6) +#define ML307_ENABLE_3_8_V GET_PIN(B, 3) +#define ML307_PWR_PIN GET_PIN(B, 4) +#define ML307_RST_PIN GET_PIN(B, 5) +#define ML307_USIM_DECT_PIN GET_PIN(B, 6) #define ML307_SAMPLE_DEIVCE_NAME "ml307" /*默认参数*/ -#define DEVICE_MANUFACTURE 0x4454 // DT +#define DEVICE_MANUFACTURE 0x4454 // DT /*命令集*/ -#define CMD_TYPE_DEVICE_DATA_REPORT 0x10 // 命令类型 - 设备数据上报 (设备->平台) -#define CMD_TYPE_DEVICE_EVENT_REPORT 0x11 // 命令类型 - 设备事件上报 (设备->平台) -#define CMD_TYPE_SERVER_REPLY 0x12 // 命令类型 - 服务器回复 (平台->设备) -#define CMD_TYPE_INSTRUCTION_DOWN 0x13 // 命令类型 - 指令下发 (平台->设备) -#define CMD_TYPE_INSTRUCTION_REPLY 0x14 // 命令类型 - 指令下发回复 (设备->平台) -#define CMD_TYPE_TIME_CALIBRATION 0x15 // 命令类型 - 时间校准 (设备->平台) +#define CMD_TYPE_DEVICE_DATA_REPORT 0x10 // 命令类型 - 设备数据上报 (设备->平台) +#define CMD_TYPE_DEVICE_EVENT_REPORT 0x11 // 命令类型 - 设备事件上报 (设备->平台) +#define CMD_TYPE_SERVER_REPLY 0x12 // 命令类型 - 服务器回复 (平台->设备) +#define CMD_TYPE_INSTRUCTION_DOWN 0x13 // 命令类型 - 指令下发 (平台->设备) +#define CMD_TYPE_INSTRUCTION_REPLY 0x14 // 命令类型 - 指令下发回复 (设备->平台) +#define CMD_TYPE_TIME_CALIBRATION 0x15 // 命令类型 - 时间校准 (设备->平台) -#define PROTOCOL_VERSION 0x11 /*协议版本*/ +#define PROTOCOL_VERSION 0x42 /*协议版本*/ /*数据序列号*/ -#define DATA_SERIAL_NUM 0x0001 // 1 +#define DATA_SERIAL_NUM 0x0001 // 1 /*设备类型*/ #define DEVICE_TYPE_ML307 0x21 /*事件类型*/ -#define EVENT_TYPE_HEARTBEAT 0x30 // 心跳事件 -#define EVENT_TYPE_SELF_CHECK 0x31 // 自检事件 -#define EVENT_TYPE_SILENCE 0x32 // 消音事件 -#define EVENT_TYPE_EXCEPTION 0x33 // 异常事件 -#define EVENT_TYPE_VALVE_STATUS 0x40 // 电磁阀状态改变事件 -#define EVENT_TYPE_FAN_STATUS 0x41 // 风机状态改变事件 -#define EVENT_TYPE_TEMP_ANOMALY 0x42 // 产品工作温度异常事件 -#define EVENT_TYPE_POWER_ON 0x43 // 上电事件 -#define EVENT_TYPE_POWER_OFF 0x44 // 掉电事件 -#define EVENT_TYPE_ALARM 0x45 // 报警事件 -#define EVENT_TYPE_ALARM_RECOVER 0x46 // 报警恢复事件 -#define EVENT_TYPE_FAULT 0x47 // 故障事件 -#define EVENT_TYPE_FAULT_RECOVER 0x48 // 故障恢复事件 -#define EVENT_TYPE_DEVICE_FAILURE 0x49 // 设备失效事件 -#define EVENT_TYPE_TIME_CALIBRATION 0x50 // 时间校准事件 +#define EVENT_TYPE_HEARTBEAT 0x30 // 心跳事件 +#define EVENT_TYPE_SELF_CHECK 0x31 // 自检事件 +#define EVENT_TYPE_SILENCE 0x32 // 消音事件 +#define EVENT_TYPE_EXCEPTION 0x33 // 异常事件 +#define EVENT_TYPE_VALVE_STATUS 0x40 // 电磁阀状态改变事件 +#define EVENT_TYPE_FAN_STATUS 0x41 // 风机状态改变事件 +#define EVENT_TYPE_TEMP_ANOMALY 0x42 // 产品工作温度异常事件 +#define EVENT_TYPE_POWER_ON 0x43 // 上电事件 +#define EVENT_TYPE_POWER_OFF 0x44 // 掉电事件 +#define EVENT_TYPE_ALARM 0x45 // 报警事件 +#define EVENT_TYPE_ALARM_RECOVER 0x46 // 报警恢复事件 +#define EVENT_TYPE_FAULT 0x47 // 故障事件 +#define EVENT_TYPE_FAULT_RECOVER 0x48 // 故障恢复事件 +#define EVENT_TYPE_DEVICE_FAILURE 0x49 // 设备失效事件 +#define EVENT_TYPE_TIME_CALIBRATION 0x50 // 时间校准事件 -#define EVENT_TYPE_VALVE_CONNECT 0x51 +#define EVENT_TYPE_VALVE_CONNECT 0x51 #define EVENT_TYPE_VALVE_DISCONNECT 0x52 /*调压器新增事件类型*/ /*指令下发*/ -#define INSTRUCTION_DOWN_SELF_CHECK 0x50 // 指令下发 - 自检 -#define INSTRUCTION_DOWN_MUTE 0x51 // 指令下发 - 消音 -#define INSTRUCTION_DOWN_CLOSE_VALVE 0x52 // 指令下发 - 关阀 -#define INSTRUCTION_DOWN_OPEN_VALVE 0x53 // 指令下发 - 开阀 -#define INSTRUCTION_DOWN_OPEN_RELAY 0x54 // 指令下发 - 开继电器 -#define INSTRUCTION_DOWN_CLOSE_RELAY 0x55 // 指令下发 - 关继电器 -#define INSTRUCTION_DOWN_QUERY_PARAMS 0x56 // 指令下发 - 查询系统参数 -#define INSTRUCTION_DOWN_CONFIG_PARAMS 0x57 // 指令下发 - 配置系统参数 -#define INSTRUCTION_DOWN_TIME_CALIBRATION 0x58 // 指令下发 - 时间校准 -#define INSTRUCTION_HEART_BEAT 0x59 // 心跳回复 -#define INSTRUCTION_DOWN_SEVER_ADDR 0x60 // 设置服务器地址和端口 +#define INSTRUCTION_DOWN_SELF_CHECK 0x50 // 指令下发 - 自检 +#define INSTRUCTION_DOWN_MUTE 0x51 // 指令下发 - 消音 +#define INSTRUCTION_DOWN_CLOSE_VALVE 0x52 // 指令下发 - 关阀 +#define INSTRUCTION_DOWN_OPEN_VALVE 0x53 // 指令下发 - 开阀 +#define INSTRUCTION_DOWN_OPEN_RELAY 0x54 // 指令下发 - 开继电器 +#define INSTRUCTION_DOWN_CLOSE_RELAY 0x55 // 指令下发 - 关继电器 +#define INSTRUCTION_DOWN_QUERY_PARAMS 0x56 // 指令下发 - 查询系统参数 +#define INSTRUCTION_DOWN_CONFIG_PARAMS 0x57 // 指令下发 - 配置系统参数 +#define INSTRUCTION_DOWN_TIME_CALIBRATION 0x58 // 指令下发 - 时间校准 +#define INSTRUCTION_HEART_BEAT 0x59 // 心跳回复 +#define INSTRUCTION_DOWN_SEVER_ADDR 0x60 // 设置服务器地址和端口 /**********************************调压器新增指令下发**********************************************************/ -#define INSTRUCTION_DOWN_VALVE_ADD 0x61 // 新增阀门设备 -#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 // 更换阀门设备 -#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63 // 移除阀门设备 - +#define INSTRUCTION_DOWN_VALVE_ADD 0x61 // 新增阀门设备 +#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 // 更换阀门设备 +#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63 // 移除阀门设备 /************************************************************************************************************/ -#define RESPONSE_CODE_SUCCESS 0x00 // 响应码 - 操作成功 -#define RESPONSE_CODE_CRC_FAIL 0x01 // 响应码 - CRC 校验失败 -#define RESPONSE_CODE_PARSE_FAIL 0x02 // 响应码 - 数据解析失败(命令错误或者其他指令错误) -#define RESPONSE_CODE_ACTION_FAILURE 0x03 // 响应码 - 动作执行失败 -#define RESPONSE_CODE_NO_FUNCTION 0xAF // 响应码 - 无此功能 -#define RESPONSE_CODE_OTHER_ERROR 0xFF // 响应码 - 其他错误 +#define RESPONSE_CODE_SUCCESS 0x00 // 响应码 - 操作成功 +#define RESPONSE_CODE_CRC_FAIL 0x01 // 响应码 - CRC 校验失败 +#define RESPONSE_CODE_PARSE_FAIL 0x02 // 响应码 - 数据解析失败(命令错误或者其他指令错误) +#define RESPONSE_CODE_ACTION_FAILURE 0x03 // 响应码 - 动作执行失败 +#define RESPONSE_CODE_NO_FUNCTION 0xAF // 响应码 - 无此功能 +#define RESPONSE_CODE_OTHER_ERROR 0xFF // 响应码 - 其他错误 -#define MAX_DATA_LEN 512 // 数据长度 +#define MAX_DATA_LEN 512 // 数据长度 -#define ML307_DEFIENE_DATA "000000000000000000000000000000" +#define ML307_DEFIENE_DATA "000000000000000000000000000000" -#define DEVICE_DEFINE 1 // 具备该设备功能 -#define DEVICE_NOT_DEFINE 0 // 不具备该功能 -#define DEVICE_CONNECTED 1 // 设备连接上 -#define DEVICE_DISCONNECTED 0 // 设备未连接 -#define DEVICE_OPEN 1 // 设备开启 -#define DEVICE_CLOSE 0 // 设备关闭 +#define DEVICE_DEFINE 1 // 具备该设备功能 +#define DEVICE_NOT_DEFINE 0 // 不具备该功能 +#define DEVICE_CONNECTED 1 // 设备连接上 +#define DEVICE_DISCONNECTED 0 // 设备未连接 +#define DEVICE_OPEN 1 // 设备开启 +#define DEVICE_CLOSE 0 // 设备关闭 typedef enum { /****************优先级最低***************** */ - kMl307HeartbeatEvent, // 定时心跳事件 - kMl307SilenceEvent, // 消音事件 - kMl307ExceptionEvent, // 异常事件 - kMl307ValveStatusEvent, // 电磁阀状态改变事件 - kMl307FanStatusEvent, // 风机状态改变事件 - kMl307TempAnomalyEvent, // 产品工作温度异常事件 - kMl307AlarmEvent, // 报警事件 - kMl307AlarmRcyEvent, // 报警恢复事件 - kMl307FaultEvent, // 故障事件 - kMl307FaultRcyEvent, // 故障恢复事件 - kMl307DeviceFailureEvent, // 设备失效事件 - kMl307TimeCalibrationEvent, // 时间校准事件 - kMl307ValveConnectEvent, // 阀门连接事件 - KMl307ValveDisconnectEvent, // 阀门断开事件 + kMl307HeartbeatEvent, // 定时心跳事件 + kMl307SilenceEvent, // 消音事件 + kMl307ExceptionEvent, // 异常事件 + kMl307ValveStatusEvent, // 电磁阀状态改变事件 + kMl307FanStatusEvent, // 风机状态改变事件 + kMl307TempAnomalyEvent, // 产品工作温度异常事件 + kMl307AlarmEvent, // 报警事件 + kMl307AlarmRcyEvent, // 报警恢复事件 + kMl307FaultEvent, // 故障事件 + kMl307FaultRcyEvent, // 故障恢复事件 + kMl307DeviceFailureEvent, // 设备失效事件 + kMl307TimeCalibrationEvent, // 时间校准事件 + kMl307ValveConnectEvent, // 阀门连接事件 + KMl307ValveDisconnectEvent, // 阀门断开事件 /**********************优先级第三************************* */ - kMl307SelfCheckEvent, // 自检事件 - /**********************优先级第二************************* */ - kMl307PowerDownEvent, // 掉电事件 - /**********************优先级第一************************* */ - kMl307PowerOnEvent, // 上电事件 + kMl307SelfCheckEvent, // 自检事件 + /**********************优先级第二************************* */ + kMl307PowerDownEvent, // 掉电事件 + /**********************优先级第一************************* */ + kMl307PowerOnEvent, // 上电事件 - kMl307MaxEventcnt // 最大事件计数 -} Ml307Event; // 当前所处的事件类型 + kMl307MaxEventcnt // 最大事件计数 +} Ml307Event; // 当前所处的事件类型 typedef enum { - kHeartbeatStatus, // 定时心跳状态 - kConcentrationHighStatus, // 浓度异常状态 - kSelfCheckStatus, // 自检触发状态 - kAlarmStatus, // 报警触发状态 - kAlarmClearedStatus, // 报警解除状态 - kSensorFaultStatus, // 传感器故障触发状态 - kSensorRecoveredStatus, // 传感器故障解除状态 - kPowerDownStatus, // 掉电状态 -} Ml307Status; // 当前所处的上报状态 + kHeartbeatStatus, // 定时心跳状态 + kConcentrationHighStatus, // 浓度异常状态 + kSelfCheckStatus, // 自检触发状态 + kAlarmStatus, // 报警触发状态 + kAlarmClearedStatus, // 报警解除状态 + kSensorFaultStatus, // 传感器故障触发状态 + kSensorRecoveredStatus, // 传感器故障解除状态 + kPowerDownStatus, // 掉电状态 +} Ml307Status; // 当前所处的上报状态 typedef struct { - Ml307Event current_event; // 当前事件 - Ml307Event last_event; // 上次事件 + Ml307Event current_event; // 当前事件 + Ml307Event last_event; // 上次事件 } Ml307EventIndex; /* @@ -158,7 +155,7 @@ typedef struct */ typedef struct valve_t valve_data; -struct __attribute__ ((packed)) valve_t +struct __attribute__((packed)) valve_t { uint8_t valve_id; uint8_t valve_mac[6]; @@ -168,61 +165,61 @@ struct __attribute__ ((packed)) valve_t uint32_t valve_in_pressure; uint32_t valve_out_pressure; uint32_t valve_atm_pressure; - uint8_t valve_voltage;//阀门电池电压 + uint8_t valve_voltage; // 阀门电池电压 }; -struct __attribute__ ((packed)) DataBody +struct __attribute__((packed)) DataBody { - uint8_t device_type; // 设备类型 - uint8_t event_type; // 事件类型 - uint8_t hw; // 硬件版本 - uint8_t sw; // 软件版本 - uint8_t imei[15]; // 设备编号(IMEI) - uint8_t iccid[20]; // ICCID - uint8_t imsi[15]; // IMSI - uint8_t rssi; // RSSI - uint8_t rsrp; // RSRP - uint16_t gas_voltage; // 传感器电压 - uint8_t product_work_temperature; // 产品工作温度 - uint16_t work_duration; // 工作时长 - uint8_t device_status; // 设备失效状态 - rt_uint8_t valve_num; // 阀门数量 + uint8_t device_type; // 设备类型 + uint8_t event_type; // 事件类型 + uint8_t hw; // 硬件版本 + uint8_t sw; // 软件版本 + uint8_t imei[15]; // 设备编号(IMEI) + uint8_t iccid[20]; // ICCID + uint8_t imsi[15]; // IMSI + uint8_t rssi; // RSSI + uint8_t rsrp; // RSRP + uint16_t gas_voltage; // 传感器电压 + uint8_t product_work_temperature; // 产品工作温度 + uint16_t work_duration; // 工作时长 + uint8_t device_status; // 设备失效状态 + rt_uint8_t valve_num; // 阀门数量 struct valve_t valve_data[MAX_VALVE_NUM]; }; // 定义数据帧结构体 -struct __attribute__ ((packed)) Ml307DataFrame +struct __attribute__((packed)) Ml307DataFrame { - uint8_t header[3]; // 帧头 - uint8_t version; // 协议版本 - uint16_t manufacture; // 厂商标识 - uint16_t datanumber; // 数据序列号 - uint8_t cmd; // 命令位 - uint16_t datalen; // 数据长度 - struct DataBody data; // 数据体 - uint16_t crc16; // 校验位 - uint8_t tail[3]; // 帧尾 + uint8_t header[3]; // 帧头 + uint8_t version; // 协议版本 + uint16_t manufacture; // 厂商标识 + uint16_t datanumber; // 数据序列号 + uint8_t cmd; // 命令位 + uint16_t datalen; // 数据长度 + struct DataBody data; // 数据体 + uint16_t crc16; // 校验位 + uint8_t tail[3]; // 帧尾 }; -struct __attribute__ ((packed)) Ml307Data +struct __attribute__((packed)) Ml307Data { - rt_uint8_t device_type; // 设备类型 - rt_uint8_t event_type; // 事件类型 - rt_uint8_t res_data[15]; // + rt_uint8_t device_type; // 设备类型 + rt_uint8_t event_type; // 事件类型 + rt_uint8_t res_data[15]; // rt_uint8_t res_num; }; -struct __attribute__ ((packed)) Ml307RecvData +struct __attribute__((packed)) Ml307RecvData { - rt_uint8_t header[3]; // 帧头 - rt_uint8_t version; // 协议版本 - rt_uint16_t manufacture; // 厂商标识 - rt_uint16_t datanumber; // 数据序列号 - rt_uint8_t cmd; // 命令位 - rt_uint16_t datalen; // 数据长度 - struct Ml307Data recv_data; // 接收数据体 - rt_uint16_t crc16; // 校验位 - rt_uint8_t tail[3]; // 帧尾 + rt_uint8_t header[3]; // 帧头 + rt_uint8_t version; // 协议版本 + rt_uint16_t manufacture; // 厂商标识 + rt_uint16_t datanumber; // 数据序列号 + rt_uint8_t cmd; // 命令位 + rt_uint16_t datalen; // 数据长度 + struct Ml307Data recv_data; // 接收数据体 + rt_uint16_t crc16; // 校验位 + rt_uint8_t tail[3]; // 帧尾 }; struct Ml307_Ops @@ -230,11 +227,11 @@ struct Ml307_Ops struct DataBody *body; struct Ml307DataFrame *frame; struct Ml307RecvData *recv; - int (*init) (struct Ml307_Ops *ops, rt_uint8_t version); - int (*update_data) (struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t cmd); - int (*send) (struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type); - int (*Resp) (struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res); - int (*Recv) (struct Ml307_Ops *ops, char *data); // 解析数据 + int (*init)(struct Ml307_Ops *ops, rt_uint8_t version); + int (*update_data)(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t cmd); + int (*send)(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type); + int (*Resp)(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type, char *data, rt_uint8_t res); + int (*Recv)(struct Ml307_Ops *ops, char *data); // 解析数据 }; extern struct Ml307_Ops ml307_ops; @@ -249,7 +246,6 @@ extern rt_uint8_t ml307_disconnect_pdp_flag; extern rt_uint8_t power_on_send_flag; extern rt_uint8_t ml307_power_down_flag; - -void Ml307_Send_Event (Ml307Event event_type); -int ml307_device_register (void); -int BSP_Ml307_Thread_Init (void); +void Ml307_Send_Event(Ml307Event event_type); +int ml307_device_register(void); +int BSP_Ml307_Thread_Init(void);