加了蓝牙状态显示得代码
This commit is contained in:
parent
f31113434f
commit
dcce7887ca
|
@ -74,6 +74,8 @@
|
|||
"drv_log.h": "c",
|
||||
"drv_usart.h": "c",
|
||||
"signal.h": "c",
|
||||
"xtr1common": "c"
|
||||
"xtr1common": "c",
|
||||
"stddef.h": "c",
|
||||
"netdev_ipaddr.h": "c"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-10-23 17:14:16
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2025-04-08 14:36:58
|
||||
* @LastEditTime: 2025-04-13 16:02:06
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
||||
* @Descrt_thread_
|
||||
*
|
||||
|
@ -168,7 +168,7 @@ int APP_Calibration_Handle(void)
|
|||
gas_calibration_voltage = Get_Gas_VoltageAdcInt1000x();
|
||||
LOG_D("ticks[%d] gas_calibration_voltage = %d", ticks++, gas_calibration_voltage);
|
||||
|
||||
if (ticks > TIMEOUT_MS)
|
||||
if (ticks > (TIMEOUT_MS / 1000))
|
||||
{
|
||||
ticks = 0; // 加这个的原因是,如果刚开始没标定,但是时间到了,此时刚通气开始标定,可能直接就读到值了,所以加这个判断
|
||||
if (gas_calibration_voltage > (MQ_VOLTAGE_ALARM_DEFAULT - 1500) && gas_calibration_voltage < (MQ_VOLTAGE_ALARM_DEFAULT + 1000))
|
||||
|
@ -294,29 +294,6 @@ void APP_Handle(void)
|
|||
Send_Laser_Alarm_Event(kFaultEvent);
|
||||
}
|
||||
}
|
||||
// if (SysControl.last_status == kSelfCheckEvent)
|
||||
// {
|
||||
// rt_thread_mdelay(5000);
|
||||
// // 第5s关闭电磁阀
|
||||
// LOG_I("自检机械手动作");
|
||||
// EMV_FORWARD_ON(50);
|
||||
// rt_thread_mdelay(10);
|
||||
// EMV_BACKWARD_ON(50);
|
||||
// if (Flash_Get_Valve_Num())
|
||||
// {
|
||||
// rt_uint8_t mac_addr[6] = {0};
|
||||
// Flash_Get_Mac_Addr(mac_addr, 1);
|
||||
// Bt_Valve_Handler(kValveCmdCtr, 1, mac_addr);
|
||||
// if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
|
||||
// {
|
||||
// LOG_D("电磁阀动作完成");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// LOG_E("电磁阀动作失败");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常
|
||||
{
|
||||
|
@ -431,17 +408,13 @@ void APP_Handle(void)
|
|||
GAS_POWER_CLOSE;
|
||||
// 写入掉电记录
|
||||
Flash_Write_Record(kRecordPowerDown);
|
||||
|
||||
Flash_Set_WorkDuration(work_duration); // 写入工作时长
|
||||
#if (IOT_MODULE_SWITCH == 1)
|
||||
Ml307_Send_Event(kMl307PowerDownEvent);
|
||||
#endif
|
||||
if (Flash_Get_Valve_Num())
|
||||
{
|
||||
rt_uint8_t mac_addr[6];
|
||||
Flash_Get_Mac_Addr(mac_addr, 1);
|
||||
Bt_Valve_Handler(kValveCmdCtr, 1, mac_addr);
|
||||
if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
|
||||
if (rt_sem_take(&bt_ctr_sem, 5000) == RT_EOK)
|
||||
{
|
||||
LOG_D("电磁阀动作完成");
|
||||
}
|
||||
|
@ -450,8 +423,11 @@ void APP_Handle(void)
|
|||
LOG_E("电磁阀动作失败");
|
||||
}
|
||||
}
|
||||
#if (IOT_MODULE_SWITCH == 1)
|
||||
Ml307_Send_Event(kMl307PowerDownEvent);
|
||||
#endif
|
||||
rt_uint8_t cnt = 0;
|
||||
while ((ml307_power_down_flag == 0) && (cnt < 30)) // 等待接收到物联网模组关机完成
|
||||
while ((ml307_power_down_flag == 0) && (cnt < 60)) // 等待接收到物联网模组关机完成
|
||||
{
|
||||
rt_thread_mdelay(1000);
|
||||
LOG_D("cnt = %d", cnt);
|
||||
|
@ -510,7 +486,9 @@ void APP_Handle(void)
|
|||
{
|
||||
Flash_Write_Record(kRecordSensoEndOfLife);
|
||||
}
|
||||
LED_Y_END_OF_LIFE;
|
||||
Ml307_Send_Event(kMl307DeviceFailureEvent);//发送一个失效事件
|
||||
Send_Laser_Alarm_Event(kNormalDetectionEvents);///再返回正常模式继续检测
|
||||
// LED_Y_END_OF_LIFE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#define SYS_IOT_UPLOAD_CYCLE_MIN (0X003CU) // 高位在后,低位在前
|
||||
#define SYS_IOT_RETRY (0X03U)
|
||||
#define SYS_TEMP_ALARM_THRESHOLD (0X32U)
|
||||
#define SYS_ALARM_VALVE (0x0640U)//1600
|
||||
#define SYS_ALARM_VALVE (0x06D6U)//1750
|
||||
#define SYS_EMV_SWITCH (0X04U)
|
||||
#define SYS_RELAY_SWITCH (0X04U)
|
||||
#define SYS_ALARM_VALVE_MAX (0X30U)
|
||||
|
@ -31,7 +31,11 @@
|
|||
#define SYS_IOT_URL ("8.130.122.162")
|
||||
#define SYS_IOT_PORT ("7153")
|
||||
|
||||
#define K (5 * 1000)
|
||||
// #define SYS_IOT_URL ("8.130.105.38")
|
||||
// #define SYS_IOT_PORT ("7133")
|
||||
|
||||
|
||||
#define K (8 * 1000)
|
||||
|
||||
// 定义宏来打印编译时间和日期
|
||||
#define COMPILE_TIME \
|
||||
|
|
|
@ -50,8 +50,8 @@ typedef enum
|
|||
kValveEventRem,//阀门移除
|
||||
kValveEventRep,//阀门更换
|
||||
kValveEventRemAll,//移除所有,此时不看阀门是否对应,直接删除全部
|
||||
kValveEventStatus,
|
||||
kValveEventConnect,//阀门连接状态发生改变,未实现
|
||||
kValveEventStatus,//阀门主动上报信息
|
||||
kValveEventConnect,//阀门连接状态上报,未实现
|
||||
kValveEventMax
|
||||
}ValveEventType;
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/***
|
||||
/***
|
||||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2025-02-21 09:18:33
|
||||
* @LastEditTime: 2025-04-22 09:36:02
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h
|
||||
* @Description:
|
||||
* @Description:
|
||||
* @
|
||||
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <at_device_ml307.h>
|
||||
|
@ -16,126 +16,132 @@
|
|||
#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 0x41 /*协议版本*/
|
||||
#define PROTOCOL_VERSION 0x41 /*协议版本*/
|
||||
/*数据序列号*/
|
||||
#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_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, // 时间校准事件
|
||||
/**********************优先级第三************************* */
|
||||
kMl307SelfCheckEvent, // 自检事件
|
||||
/**********************优先级第二************************* */
|
||||
kMl307PowerDownEvent, // 掉电事件
|
||||
/**********************优先级第一************************* */
|
||||
kMl307PowerOnEvent, // 上电事件
|
||||
kMl307HeartbeatEvent, // 定时心跳事件
|
||||
kMl307SilenceEvent, // 消音事件
|
||||
kMl307ExceptionEvent, // 异常事件
|
||||
kMl307ValveStatusEvent, // 电磁阀状态改变事件
|
||||
kMl307FanStatusEvent, // 风机状态改变事件
|
||||
kMl307TempAnomalyEvent, // 产品工作温度异常事件
|
||||
kMl307AlarmEvent, // 报警事件
|
||||
kMl307AlarmRcyEvent, // 报警恢复事件
|
||||
kMl307FaultEvent, // 故障事件
|
||||
kMl307FaultRcyEvent, // 故障恢复事件
|
||||
kMl307DeviceFailureEvent, // 设备失效事件
|
||||
kMl307TimeCalibrationEvent, // 时间校准事件
|
||||
kMl307ValveConnectEvent, // 阀门连接事件
|
||||
KMl307ValveDisconnectEvent, // 阀门断开事件
|
||||
/**********************优先级第三************************* */
|
||||
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;
|
||||
|
||||
/*
|
||||
|
@ -149,7 +155,8 @@ 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];
|
||||
|
@ -161,59 +168,58 @@ struct __attribute__((packed)) valve_t
|
|||
uint32_t valve_atm_pressure;
|
||||
};
|
||||
|
||||
|
||||
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
|
||||
|
@ -221,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;
|
||||
|
@ -237,12 +243,10 @@ extern rt_sem_t ml307_disconnect_sem;
|
|||
extern rt_uint8_t ml307_conncet_tcp_flag;
|
||||
extern rt_uint8_t ml307_connect_sever_flag;
|
||||
extern rt_uint8_t ml307_disconnect_pdp_flag;
|
||||
extern rt_uint8_t power_on_send_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);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2025-02-25 10:48:30
|
||||
* @LastEditTime: 2025-04-16 10:10:33
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c
|
||||
* @Description:
|
||||
*
|
||||
|
@ -164,17 +164,7 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s
|
|||
rt_memset(ml307_ops.recv, 0, sizeof(struct Ml307RecvData)); // 清空结构体
|
||||
rt_memcpy(ml307_ops.recv, recv_byte_buf, sizeof(struct Ml307RecvData));
|
||||
ml307_connect_sever_flag = 1;
|
||||
if ((ml307_ops.recv->recv_data.event_type == INSTRUCTION_HEART_BEAT) ||
|
||||
(ml307_ops.recv->recv_data.event_type == EVENT_TYPE_POWER_ON)) // 加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量
|
||||
|
||||
{
|
||||
rt_sem_release(ml307_recv_msg_sem); // 接收到的是心跳包
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_sem_release(ml307_recv_sem);
|
||||
rt_sem_release(ml307_recv_msg_sem); // 接收到的是心跳包
|
||||
}
|
||||
rt_sem_release(ml307_recv_sem);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -256,13 +246,14 @@ void urc_sim_remove(struct at_client *client, const char *data, rt_size_t size)
|
|||
LOG_D("SIM removed");
|
||||
ml307_conncet_tcp_flag = 0;
|
||||
}
|
||||
|
||||
static const struct at_urc urc_table[] = {
|
||||
{"REBOOTING", "\r\n", urc_device_reset}, // 这个是软件复位时,
|
||||
{"+MIPOPEN:", "\r\n", urc_tcp_connect_state},
|
||||
{"+MIPURC: \"disconn\"", "\r\n", urc_tcp_disconnect},
|
||||
{"+MIPURC: \"rtcp\"", "\r\n", urc_tcp_recv},
|
||||
{"+MATREADY", "\r\n", urc_device_reset},
|
||||
{"+CPIN: SIM REMOVED", "\r\n", urc_sim_remove},
|
||||
// {"+CPIN: SIM REMOVED", "\r\n", urc_sim_remove},
|
||||
};
|
||||
|
||||
void show_resp_info(at_response_t resp)
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-03 10:31:45
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2025-04-08 16:04:01
|
||||
* @LastEditTime: 2025-04-22 14:50:43
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
|
||||
*/
|
||||
#include "bsp_bt.h"
|
||||
#include "bsp_ml307.h"
|
||||
|
@ -280,7 +280,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
|||
{
|
||||
index++;
|
||||
}
|
||||
for (size_t i = 0; i < len - 3; i++)//发现了一种情况,会出现两个AA,用这种方法排除一下
|
||||
for (size_t i = 0; i < (len - 3); i++)//发现了一种情况,会出现两个AA,用这种方法排除一下
|
||||
{
|
||||
if (data[index + i + 1] == 0XAA)
|
||||
{
|
||||
|
@ -354,7 +354,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
|||
LOG_E("阀门更换失败");
|
||||
}
|
||||
break;
|
||||
case kValveEventRemAll:
|
||||
case kValveEventRemAll:
|
||||
LOG_I("接收到移除所有阀门信息回应");
|
||||
LOG_HEX("bt_rx_data:", 16, data_buf, fram_len);
|
||||
if (data_buf[fram_len - 3] == RT_TRUE) // 移除成功
|
||||
|
@ -372,7 +372,21 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
|||
|
||||
break;
|
||||
case kValveEventConnect:
|
||||
|
||||
LOG_I("接收到阀门连接状态数据");
|
||||
LOG_HEX("bt_rx_data:", 16, data_buf, fram_len);
|
||||
|
||||
rt_memcpy(&valve[data_buf[3] - 1], &data_buf[3], sizeof(struct valve_t) - 14);//只要前面的一部分数据,后面的不要
|
||||
LOG_HEX("valve_data:", 16, (rt_uint8_t *)&valve[data_buf[3] - 1], sizeof(struct valve_t));
|
||||
if(valve[data_buf[3] - 1].valve_connct_status == 1)
|
||||
{
|
||||
LOG_D("阀门连接");
|
||||
Ml307_Send_Event(kMl307ValveConnectEvent);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_D("阀门断开");
|
||||
Ml307_Send_Event(KMl307ValveDisconnectEvent);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG_W("unknow cmd: %02X", data[index + 2]);
|
||||
|
|
|
@ -62,12 +62,13 @@ static void _CommonBtnEvtCb(void *arg)
|
|||
}
|
||||
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK)
|
||||
{
|
||||
if (Sensor_device.detection_flag == kSensorAlarm)
|
||||
if (SysControl.status == kAlarmEvent)
|
||||
{
|
||||
Send_Laser_Alarm_Event(KMuteEvent);
|
||||
}
|
||||
}
|
||||
else if ((flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_REPEAT_CLICK) && (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_LONG_HOLD))
|
||||
// else if ((flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_REPEAT_CLICK) && (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_LONG_HOLD))
|
||||
else if (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_LONG_HOLD)
|
||||
{
|
||||
LOG_I("本地清除阀门信息");
|
||||
rt_uint8_t mac_addr[6] = {0};
|
||||
|
|
|
@ -155,7 +155,7 @@ int Get_IotImei(char *buf, rt_size_t len)
|
|||
{
|
||||
rt_memcpy(buf, (char *)FLASH_IOT_IMEI_ADDR, len);
|
||||
|
||||
LOG_D("NB IMEI: %s", buf);
|
||||
LOG_D("IMEI: %s", buf);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
|
@ -165,7 +165,7 @@ int Get_IotImei(char *buf, rt_size_t len)
|
|||
{
|
||||
buf[i] = '0';
|
||||
}
|
||||
LOG_D("NB IMSI: %s", buf);
|
||||
LOG_D("IMSI: %s", buf);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ int Get_IotImsi(char *buf, rt_size_t len)
|
|||
{
|
||||
rt_memcpy(buf, (char *)FLASH_IOT_IMSI_ADDR, len);
|
||||
|
||||
LOG_D("NB IMSI: %s", buf);
|
||||
LOG_D("IMSI: %s", buf);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
|
@ -186,7 +186,7 @@ int Get_IotImsi(char *buf, rt_size_t len)
|
|||
{
|
||||
buf[i] = '0';
|
||||
}
|
||||
LOG_D("NB IMSI: %s", buf);
|
||||
LOG_D("IMSI: %s", buf);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ int Get_IotIccid(char *buf, rt_size_t len)
|
|||
{
|
||||
rt_memcpy(buf, (char *)FLASH_IOT_ICCID_ADDR, len);
|
||||
|
||||
LOG_D("NB ICCID: %s", buf);
|
||||
LOG_D("ICCID: %s", buf);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
|
@ -207,7 +207,7 @@ int Get_IotIccid(char *buf, rt_size_t len)
|
|||
{
|
||||
buf[i] = '0';
|
||||
}
|
||||
LOG_D("NB ICCID: %s", buf);
|
||||
LOG_D("ICCID: %s", buf);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -894,7 +894,7 @@ int BSP_Flash_Init (void)
|
|||
|
||||
Flash_SetProductTimeLimit (2025, 2, 10, 13, 50, 20, kFactoryTimeId);
|
||||
Set_ExpirationTime (MAX_EXPIRATION_DAYS);
|
||||
Flash_Set_Calibration_State(kNotCalibrated); // 标定状态
|
||||
Flash_Set_Calibration_State(kSysGasCalibStatus); // 标定状态
|
||||
Flash_Set_Valve_Num(0);
|
||||
sci.hw_ver = SYS_HW_VERSION;
|
||||
sci.sw_ver = SYS_SW_VERSION;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2025-02-22 15:59:21
|
||||
* @LastEditTime: 2025-04-25 08:41:52
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
||||
* @Description:
|
||||
*
|
||||
|
@ -700,6 +700,29 @@ int Ml307_Send_Temp_Anomaly(struct at_device *device, void *param)
|
|||
return RT_EOK;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理上电事件
|
||||
* @param device 设备结构体指针
|
||||
* @param param 操作结构体指针
|
||||
* @return 操作结果
|
||||
*/
|
||||
int Ml307_Send_Power_On(struct at_device *device, void *param)
|
||||
{
|
||||
struct Ml307_Ops *ml307_ops = (struct Ml307_Ops *)param;
|
||||
if ((device == RT_NULL) || (ml307_ops == RT_NULL))
|
||||
{
|
||||
LOG_E("ml307 param error\n");
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
if (ml307_ops->send(ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_ON))
|
||||
{
|
||||
LOG_E("ml307 send cmd[%X] failed\n", EVENT_TYPE_POWER_ON);
|
||||
return -RT_ERROR;
|
||||
}
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理断电事件
|
||||
* @param device 设备结构体指针
|
||||
|
@ -724,12 +747,12 @@ int Ml307_Send_Power_Off(struct at_device *device, void *param)
|
|||
}
|
||||
|
||||
/**
|
||||
* 处理断电事件
|
||||
* 处理阀门连接事件
|
||||
* @param device 设备结构体指针
|
||||
* @param param 操作结构体指针
|
||||
* @return 操作结果
|
||||
*/
|
||||
int Ml307_Send_Power_On(struct at_device *device, void *param)
|
||||
int Ml307_Send_Valve_Connect(struct at_device *device, void *param)
|
||||
{
|
||||
struct Ml307_Ops *ml307_ops = (struct Ml307_Ops *)param;
|
||||
if ((device == RT_NULL) || (ml307_ops == RT_NULL))
|
||||
|
@ -738,9 +761,32 @@ int Ml307_Send_Power_On(struct at_device *device, void *param)
|
|||
return RT_ERROR;
|
||||
}
|
||||
|
||||
if (ml307_ops->send(ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_POWER_ON))
|
||||
if (ml307_ops->send(ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_CONNECT))
|
||||
{
|
||||
LOG_E("ml307 send cmd[%X] failed\n", EVENT_TYPE_POWER_ON);
|
||||
LOG_E("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_CONNECT);
|
||||
return -RT_ERROR;
|
||||
}
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理阀门断开事件
|
||||
* @param device 设备结构体指针
|
||||
* @param param 操作结构体指针
|
||||
* @return 操作结果
|
||||
*/
|
||||
int Ml307_Send_Valve_Disconnect(struct at_device *device, void *param)
|
||||
{
|
||||
struct Ml307_Ops *ml307_ops = (struct Ml307_Ops *)param;
|
||||
if ((device == RT_NULL) || (ml307_ops == RT_NULL))
|
||||
{
|
||||
LOG_E("ml307 param error\n");
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
if (ml307_ops->send(ml307_ops, DATA_SERIAL_NUM, CMD_TYPE_DEVICE_EVENT_REPORT, DEVICE_TYPE_ML307, EVENT_TYPE_VALVE_DISCONNECT))
|
||||
{
|
||||
LOG_E("ml307 send cmd[%X] failed\n", EVENT_TYPE_VALVE_DISCONNECT);
|
||||
return -RT_ERROR;
|
||||
}
|
||||
return RT_EOK;
|
||||
|
@ -775,6 +821,8 @@ int Ml307_Send_Device_Failure(struct at_device *device, void *param)
|
|||
const Ml307EventInfo ml307_event_info[] = {
|
||||
{kMl307PowerOnEvent, kMl307PriorityHighest, "上电心跳事件", Ml307_Send_Power_On},
|
||||
{kMl307PowerDownEvent, kMl307PriorityHigh, "掉电事件", Ml307_Send_Power_Off},
|
||||
{kMl307ValveConnectEvent, kMl307PriorityMedium, "阀门连接事件", Ml307_Send_Valve_Connect},
|
||||
{KMl307ValveDisconnectEvent, kMl307PriorityMedium, "阀门断开事件", Ml307_Send_Valve_Disconnect},
|
||||
{kMl307SelfCheckEvent, kMl307PriorityMedium, "自检事件", Ml307_Send_Self_Check},
|
||||
{kMl307HeartbeatEvent, kMl307PriorityLowest, "定时心跳事件", Ml307_Send_Heartbeat},
|
||||
{kMl307TempAnomalyEvent, kMl307PriorityLowest, "温度异常事件", Ml307_Send_Temp_Anomaly},
|
||||
|
@ -827,20 +875,19 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device,
|
|||
if (event) // 处理该事件
|
||||
{
|
||||
// 打印事件的名称
|
||||
LOG_D("%s上报\n", event->event_name);
|
||||
|
||||
ml307_current_evnet = event->event_flag;
|
||||
for (size_t i = 0; i < max_retry_count; i++)
|
||||
{
|
||||
if (ml307_conncet_tcp_flag)
|
||||
{
|
||||
// 如果事件有关联的发送函数,则调用该发送函数
|
||||
rt_thread_mdelay(IMEI_Delay());
|
||||
if (event->send_func)
|
||||
{
|
||||
#ifdef TEST_ENABLE
|
||||
RTC_ShowTime(); // 每次发送打印下时间,容易定位问题
|
||||
#endif
|
||||
LOG_D("send data cnt :%d", cnt);
|
||||
LOG_D("%s上报, cnt :%d", event->event_name, cnt);
|
||||
|
||||
int result = event->send_func(device, ml307_ops);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
|
@ -850,7 +897,7 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (rt_sem_take(ml307_recv_msg_sem, 5000) == RT_EOK)
|
||||
if (rt_sem_take(ml307_recv_msg_sem, 8000) == RT_EOK)
|
||||
{
|
||||
LOG_D("收到回复\n");
|
||||
ml307_connect_sever_flag = 1;
|
||||
|
@ -869,7 +916,6 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device,
|
|||
{
|
||||
ret = RT_ERROR;
|
||||
}
|
||||
rt_thread_mdelay(3000);
|
||||
if (event->priority < Get_Event_Priority(ml307_latest_evnet)) // 查看当前事件和新传入的事件的优先级哪个高,如果有高的直接退出处理高优先级的
|
||||
{
|
||||
LOG_W("有更高优先级的事件进入,退出当前处理\n");
|
||||
|
@ -886,12 +932,11 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device,
|
|||
{
|
||||
LOG_D("关闭TCP");
|
||||
}
|
||||
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_OFF, RT_NULL) == RT_EOK)
|
||||
{
|
||||
LOG_D("关闭模组");
|
||||
ml307_power_down_flag = 1;
|
||||
ret = RT_EOK;
|
||||
}
|
||||
|
||||
rt_pin_write(_dev.pwr_en_pin, PIN_LOW); // 断开3_8v供电
|
||||
LOG_D("关闭模组");
|
||||
ml307_power_down_flag = 1;
|
||||
ret = RT_EOK;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -946,9 +991,29 @@ int Compare_HeaderToTail(struct Ml307_Ops *ops)
|
|||
|
||||
void Handle_Server_Reply(struct Ml307_Ops *ops)
|
||||
{
|
||||
if ((ops->recv->recv_data.event_type == INSTRUCTION_HEART_BEAT) || (ops->recv->recv_data.event_type == EVENT_TYPE_POWER_ON))
|
||||
if ((ops->recv->recv_data.event_type == INSTRUCTION_HEART_BEAT) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_SELF_CHECK) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_SILENCE) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_EXCEPTION) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_VALVE_STATUS) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_FAN_STATUS) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_TEMP_ANOMALY) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_POWER_ON) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_POWER_OFF) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_ALARM) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_ALARM_RECOVER) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_FAULT) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_FAULT_RECOVER) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_DEVICE_FAILURE) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_VALVE_CONNECT) ||
|
||||
(ops->recv->recv_data.event_type == EVENT_TYPE_VALVE_DISCONNECT))
|
||||
{
|
||||
LOG_D("服务器响应成功,响应码:[%02X]\n", ops->recv->recv_data.event_type);
|
||||
rt_sem_release(ml307_recv_msg_sem);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_E("服务器响应失败,响应码:[%02X]\n", ops->recv->recv_data.event_type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1591,7 +1656,9 @@ static void Ml307_Send_Thread_Entry(void *param)
|
|||
Ml307_Get_Event_Flag(kMl307FaultEvent) |
|
||||
Ml307_Get_Event_Flag(kMl307FaultRcyEvent) |
|
||||
Ml307_Get_Event_Flag(kMl307DeviceFailureEvent) |
|
||||
Ml307_Get_Event_Flag(kMl307TimeCalibrationEvent),
|
||||
Ml307_Get_Event_Flag(kMl307TimeCalibrationEvent) |
|
||||
Ml307_Get_Event_Flag(kMl307ValveConnectEvent) |
|
||||
Ml307_Get_Event_Flag(KMl307ValveDisconnectEvent),
|
||||
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
|
||||
RT_WAITING_FOREVER, &ml307_recv_event); // 这个事件一般是设备端发生了变化,发送到服务器时调用
|
||||
|
||||
|
@ -1632,6 +1699,22 @@ static void Ml307_Send_Thread_Entry(void *param)
|
|||
LOG_E("ml307 send data failed result = [%d]\n", result);
|
||||
}
|
||||
}
|
||||
else if (ml307_recv_event & Ml307_Get_Event_Flag(kMl307ValveConnectEvent))
|
||||
{
|
||||
result = Ml307_Process_Events(kMl307ValveConnectEvent, device, ops);
|
||||
if (result)
|
||||
{
|
||||
LOG_E("ml307 send data failed result = [%d]\n", result);
|
||||
}
|
||||
}
|
||||
else if (ml307_recv_event & Ml307_Get_Event_Flag(KMl307ValveDisconnectEvent))
|
||||
{
|
||||
result = Ml307_Process_Events(KMl307ValveDisconnectEvent, device, ops);
|
||||
if (result)
|
||||
{
|
||||
LOG_E("ml307 send data failed result = [%d]\n", result);
|
||||
}
|
||||
}
|
||||
else if (ml307_recv_event & Ml307_Get_Event_Flag(kMl307TimeCalibrationEvent))
|
||||
{
|
||||
Time_Calibration(device);
|
||||
|
@ -1826,8 +1909,8 @@ static void Ml307_Life_Thread_Entry(void *parameter)
|
|||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
/* Define PDP Context */
|
||||
rt_uint8_t i = 0;
|
||||
/* Define PDP Context */
|
||||
rt_uint8_t i = 0;
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (at_obj_exec_cmd(device->client, resp, "AT+CGDCONT=1,\"IPV4V6\",\"cmnet\"") == RT_EOK)
|
||||
|
@ -1843,7 +1926,64 @@ static void Ml307_Life_Thread_Entry(void *parameter)
|
|||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
/* check SIM card */
|
||||
for (i = 0; i < 60; i++)
|
||||
{
|
||||
if (at_obj_exec_cmd(device->client, resp, "AT+CPIN?") == RT_EOK)
|
||||
{
|
||||
char code[8] = {0};
|
||||
if (at_resp_parse_line_args_by_kw(resp, "+CPIN:", "+CPIN: %s", code) > 0)
|
||||
{
|
||||
if (rt_strcmp(code, "READY") == 0)
|
||||
{
|
||||
LOG_D("%s device SIM card detection success.", device->name);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_E("%s device SIM card detection failed.", device->name);
|
||||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
rt_thread_mdelay(3000);
|
||||
}
|
||||
if (i == 60)
|
||||
{
|
||||
LOG_E("%s device SIM card detection failed.", device->name);
|
||||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
/* check the GPRS network is registered */
|
||||
for (i = 0; i < 60; i++)
|
||||
{
|
||||
if (at_obj_exec_cmd(device->client, resp, "AT+CEREG?") == RT_EOK)
|
||||
{
|
||||
int link_stat = 0;
|
||||
|
||||
if (at_resp_parse_line_args_by_kw(resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0)
|
||||
{
|
||||
if ((link_stat == 1) || (link_stat == 5))
|
||||
{
|
||||
LOG_D("%s device GPRS is registered", device->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
rt_thread_mdelay(1000);
|
||||
}
|
||||
if (i == 60)
|
||||
{
|
||||
LOG_E("%s device GPRS is register failed", device->name);
|
||||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
if (at_obj_exec_cmd(device->client, resp, "AT+MIPCALL=1,1") != RT_EOK)
|
||||
{
|
||||
result = -RT_ERROR;
|
||||
goto __exit;
|
||||
}
|
||||
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK)
|
||||
{
|
||||
LOG_D("重连网络成功\n");
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# 引脚占用
|
||||
|
||||
## NB通讯
|
||||
## 通讯
|
||||
|
||||
| 引脚 | 占用 | 占用方式 |
|
||||
| ----- | ----------- | ------------------- |
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
#define NETDEV_IPV4 1
|
||||
#define NETDEV_IPV6 0
|
||||
#define RT_USING_AT
|
||||
|
||||
// #define NETDEV_USING_PING//用来监测和平台之间的延时
|
||||
#ifdef ENABLE_LOG_ALL
|
||||
#define AT_DEBUG
|
||||
#endif
|
||||
|
@ -149,14 +149,14 @@
|
|||
#define AT_SW_VERSION_NUM 0x10301
|
||||
/* end of Network */
|
||||
|
||||
#define IOT_MODULE_SWITCH 1 // 开启NB物联网功能
|
||||
#define IOT_MODULE_SWITCH 1 // 开启物联网功能
|
||||
/* Utilities */
|
||||
|
||||
#define TEST_ENABLE //打开所有的终端测试程序
|
||||
|
||||
#define RT_USING_ULOG
|
||||
#define ULOG_OUTPUT_LVL_D
|
||||
#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0
|
||||
#define ULOG_OUTPUT_LVL 7
|
||||
#define ULOG_USING_ISR_LOG
|
||||
#define ULOG_ASSERT_ENABLE
|
||||
#define ULOG_LINE_BUF_SIZE 1024
|
||||
|
|
Loading…
Reference in New Issue