BLE_TYQ_BJQ_CH32V303/bsp/inc/bsp_mb26.h

220 lines
8.9 KiB
C
Raw Permalink Normal View History

2024-12-01 13:49:43 +08:00
/***
* @Author: mbw
* @Date: 2024-10-09 08:42:14
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-10-17 09:26:13
* @FilePath: \JT-DT-YD4N02A_RTT_MRS\bsp\inc\bsp_mb26.h
* @Description:
* @
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
/***
* @Author: mbw
* @Date: 2024-10-09 08:42:14
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-10-16 09:03:41
* @FilePath: \JT-DT-YD4N02A_RTT_MRS\bsp\inc\bsp_mb26.h
* @Description:
* @
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
#include <at_device_mb26.h>
#include "drv_gpio.h"
#define MB26_PWR_EN_PIN GET_PIN(B, 3)
#define MB26_RST_PIN GET_PIN(A, 11)
#define MB26_WKP_PIN GET_PIN(C, 7)
#define MB26_SAMPLE_DEIVCE_NAME "mb26"
/*默认参数*/
#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 PROTOCOL_VERSION 0x40 /*协议版本*/
/*数据序列号*/
#define DATA_SERIAL_NUM 0x0001 // 1
/*设备类型*/
#define DEVICE_TYPE_MB26 0x20
/*事件类型*/
#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 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 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 256 // 数据长度
#define MB26_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 //设备关闭
typedef enum
{
/****************优先级最低***************** */
kMb26HeartbeatEvent, // 定时心跳事件
kMb26SilenceEvent, // 消音事件
kMb26ExceptionEvent, // 异常事件
kMb26ValveStatusEvent, // 电磁阀状态改变事件
kMb26FanStatusEvent, // 风机状态改变事件
kMb26TempAnomalyEvent, // 产品工作温度异常事件
kMb26AlarmEvent, // 报警事件
kMb26AlarmRcyEvent, // 报警恢复事件
kMb26FaultEvent, // 故障事件
kMb26FaultRcyEvent, // 故障恢复事件
kMb26DeviceFailureEvent, // 设备失效事件
kMb26TimeCalibrationEvent, // 时间校准事件
/**********************优先级第三************************* */
kMb26SelfCheckEvent, // 自检事件
/**********************优先级第二************************* */
kMb26PowerDownEvent, // 掉电事件
/**********************优先级第一************************* */
kMb26PowerOnEvent, // 上电事件
kMb26MaxEventcnt // 最大事件计数
} Mb26Event; // 当前所处的事件类型
typedef enum
{
kHeartbeatStatus, // 定时心跳状态
kConcentrationHighStatus, // 浓度异常状态
kSelfCheckStatus, // 自检触发状态
kAlarmStatus, // 报警触发状态
kAlarmClearedStatus, // 报警解除状态
kSensorFaultStatus, // 传感器故障触发状态
kSensorRecoveredStatus, // 传感器故障解除状态
kPowerDownStatus, // 掉电状态
} Mb26Status; // 当前所处的上报状态
typedef struct
{
Mb26Event current_event;//当前事件
Mb26Event last_event;//上次事件
}Mb26EventIndex;
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
uint8_t rsrq; // RSRQ
uint16_t pci; // PCI
int8_t snr; // SNR
float product_work_temperature; // 产品工作温度
uint16_t work_duration; // 工作时长
float lel; // 气体浓度
float temp; // 环境温度
float laser_temp; // 激光器温度
float signal_strength; // 激光光强度
float gain; // 放大系数
uint8_t fault_code; // 故障码
uint8_t device_status; // 设备失效状态
uint8_t emv_status; // 电磁阀状态
uint8_t relay_status; // 继电器状态
};
// 定义数据帧结构体
struct __attribute__((packed)) Mb26DataFrame
{
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)) Mb26Data
{
rt_uint8_t device_type; // 设备类型
rt_uint8_t event_type; // 事件类型
rt_uint8_t res_data[15];//
rt_uint8_t res_num;
};
struct __attribute__((packed)) Mb26RecvData
{
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 Mb26Data recv_data; // 接收数据体
rt_uint16_t crc16; // 校验位
rt_uint8_t tail[3]; // 帧尾
};
struct Mb26_Ops
{
struct DataBody *body;
struct Mb26DataFrame *frame;
struct Mb26RecvData *recv;
int (*init)(struct Mb26_Ops *ops, rt_uint8_t version);
int (*update_data)(struct Mb26_Ops *ops, rt_uint8_t device_type, rt_uint8_t cmd);
int (*send)(struct Mb26_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type);
int (*Resp)(struct Mb26_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 Mb26_Ops *ops, char *data); // 解析数据
};
extern struct Mb26_Ops mb26_ops;
extern rt_sem_t mb26_recv_sem;
extern rt_uint8_t mb26_conncet_tcp_flag;
void Mb26_Send_Event(Mb26Event event_type);