这一版优化了报警和故障逻辑,以及截止日期的逻辑

This commit is contained in:
小马_666 2025-01-25 15:09:53 +08:00
parent e55496541d
commit da3123744e
6 changed files with 102 additions and 72 deletions

View File

@ -1,3 +1,13 @@
/***
* @Author: mbw
* @Date: 2024-12-30 11:45:44
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-25 15:00:21
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\at_device_nt26k.h
* @Description:
* @
* @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
*/
#ifndef __AT_DEVICE_NT26K_H__ #ifndef __AT_DEVICE_NT26K_H__
#define __AT_DEVICE_NT26K_H__ #define __AT_DEVICE_NT26K_H__
@ -64,6 +74,7 @@ typedef struct __attribute__((packed))
extern nt26k_sys_info nt26k; extern nt26k_sys_info nt26k;
extern rt_uint8_t nt26k_init_complate_flag; extern rt_uint8_t nt26k_init_complate_flag;
extern volatile rt_uint8_t ntp_flag;
extern struct rt_completion nt26k_init_complate; extern struct rt_completion nt26k_init_complate;
int at_send_data(struct at_device *device, const char *data, rt_size_t size); int at_send_data(struct at_device *device, const char *data, rt_size_t size);
rt_err_t Nt26k_Reset(struct at_device *device); rt_err_t Nt26k_Reset(struct at_device *device);

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2025-01-24 08:40:39 * @Date: 2025-01-24 08:40:39
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-25 14:14:51 * @LastEditTime: 2025-01-25 14:49:06
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h
* @Description: * @Description:
* @ * @
@ -76,7 +76,7 @@ typedef struct __attribute__((packed))
rt_uint8_t checksum; // 校验 rt_uint8_t checksum; // 校验
} TsH308Data; } TsH308Data;
typedef struct __attribute__((packed)) typedef struct
{ {
uint8_t end_of_life; // 寿命到期 uint8_t end_of_life; // 寿命到期
uint8_t last_life; // 上次状态 uint8_t last_life; // 上次状态

View File

@ -49,7 +49,7 @@ char data_buf[AT_CLIENT_RECV_BUFF_LEN] = {0};
nt26k_sys_info nt26k = {0}; nt26k_sys_info nt26k = {0};
struct rt_completion nt26k_init_complate; struct rt_completion nt26k_init_complate;
volatile rt_uint8_t socket_id = 0; volatile rt_uint8_t socket_id = 0;
volatile rt_uint8_t ntp_flag = 0;
// 将本地时间转换为对应时区时间 // 将本地时间转换为对应时区时间
void Time_Zone_Conversion(TsRtcDateTime *timeInfo) void Time_Zone_Conversion(TsRtcDateTime *timeInfo)
{ {
@ -230,12 +230,12 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s
(nt26k_ops.recv->recv_data.event_type == EVENT_TYPE_POWER_ON)) (nt26k_ops.recv->recv_data.event_type == EVENT_TYPE_POWER_ON))
// 加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量 // 加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量
{ {
rt_sem_release(nt26k_recv_msg_sem);// 接收到的是心跳包 rt_sem_release(nt26k_recv_msg_sem); // 接收到的是心跳包
} }
else else
{ {
rt_sem_release(nt26k_recv_sem); rt_sem_release(nt26k_recv_sem);
rt_sem_release(nt26k_recv_msg_sem);// 接收到的是响应包 rt_sem_release(nt26k_recv_msg_sem); // 接收到的是响应包
} }
} }
else else
@ -317,9 +317,9 @@ static int at_device_nt26k_connect_tcp(struct at_device *device)
if (nt26k_conncet_tcp_flag) if (nt26k_conncet_tcp_flag)
return RT_EOK; return RT_EOK;
ASSERT(device); ASSERT(device);
int err_code = 0; int err_code = 0;
flash_sever_info upload_sever_info = {0}; flash_sever_info upload_sever_info = {0};
at_response_t resp = at_create_resp(64, 4, AT_DEFAULT_TIMEOUT); at_response_t resp = at_create_resp(64, 4, AT_DEFAULT_TIMEOUT);
if (resp == RT_NULL) if (resp == RT_NULL)
{ {
LOG_E("No memory for response structure!"); LOG_E("No memory for response structure!");
@ -1059,7 +1059,9 @@ static void nt26k_init_thread_entry(void *parameter)
rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间
LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n",
rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second);
result = RT_EOK; // 网络时间同步标志
ntp_flag = 1;
result = RT_EOK;
} }
} }
/* initialize successfully */ /* initialize successfully */
@ -1410,8 +1412,17 @@ int Time_Calibration(struct at_device *device)
LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n",
rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second);
at_delete_resp(resp); at_delete_resp(resp);
ntp_flag = 1;
return RT_EOK; return RT_EOK;
} }
else
{
ntp_flag = 0;
}
}
else
{
ntp_flag = 0;
} }
at_delete_resp(resp); at_delete_resp(resp);
return RT_ERROR; return RT_ERROR;

View File

@ -136,8 +136,9 @@ int Get_IotImei (char *buf, rt_size_t len)
if ((*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0x39)) if ((*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0x39))
{ {
char imei_buf[FLASH_IOT_IMEI_LEN]={0}; char imei_buf[FLASH_IOT_IMEI_LEN + 1]={0};
Flash_Read(FLASH_IOT_IMEI_ADDR, (rt_uint8_t *)&imei_buf[0], len); Flash_Read(FLASH_IOT_IMEI_ADDR, (rt_uint8_t *)&imei_buf[0], len);
imei_buf[len] = '\0';
LOG_D ("read imei: %s", imei_buf); LOG_D ("read imei: %s", imei_buf);
rt_memcpy(buf, imei_buf, len); rt_memcpy(buf, imei_buf, len);
return 0; return 0;

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-11-14 10:21:04 * @Date: 2024-11-14 10:21:04
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-25 14:34:41 * @LastEditTime: 2025-01-25 15:07:34
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c
* @Description: * @Description:
* *
@ -36,7 +36,7 @@ static rt_sem_t uart4_rx_ok_sem;
static struct rt_timer uart4_rx_timer; static struct rt_timer uart4_rx_timer;
uint8_t sensor_rx_flag = 0; // 接收缓冲区中已经收到的数据包数量static rt_uint8_t alarm_flag = 0, fault_flag = 0; uint8_t sensor_rx_flag = 0; // 接收缓冲区中已经收到的数据包数量static rt_uint8_t alarm_flag = 0, fault_flag = 0;
rt_uint8_t alarm_flag = 0, fault_flag = 0; rt_uint8_t alarm_flag = 0, fault_flag = 0;
TsH308 H308 = {0}; TsH308 H308 = {0};
@ -94,14 +94,14 @@ uint8_t H308_GetFrameData(const char *p_src, const rt_uint8_t src_len, TsH308Dat
TsH308StrData _H308StrData = {0}; TsH308StrData _H308StrData = {0};
rt_uint8_t xor = 0; rt_uint8_t xor = 0;
uint8_t ret = RT_ERROR; uint8_t ret = RT_ERROR;
char *p_str = rt_strstr(p_src, "A+"); // 查找子字符串的位置 char *p_str = rt_strstr(p_src, "A+"); // 查找子字符串的位置
if (p_str != NULL && strlen(p_str) >= src_len) if (p_str != NULL && strlen(p_str) >= src_len)
{ {
if (sscanf(p_str, "A+%6s %6s %8s %6s B+%6s %2s %2s\r\n", if (sscanf(p_str, "A+%6s %6s %8s %6s B+%6s %2s %2s\r\n",
_H308StrData.vol, _H308StrData.temp, _H308StrData.laser_temp, _H308StrData.vol, _H308StrData.temp, _H308StrData.laser_temp,
_H308StrData.signal_strength, _H308StrData.gain, _H308StrData.signal_strength, _H308StrData.gain,
_H308StrData.fault_code, _H308StrData.checksum) == 7) _H308StrData.fault_code, _H308StrData.checksum) == 7)
{ {
pData->checksum = (rt_uint8_t)strtol(_H308StrData.checksum, NULL, 16); pData->checksum = (rt_uint8_t)strtol(_H308StrData.checksum, NULL, 16);
@ -172,20 +172,20 @@ static void H308_HandleAlarm(uint8_t count, uint8_t threshold)
{ {
if (H308.Data.lel > H308.alarm_value) if (H308.Data.lel > H308.alarm_value)
{ {
alarm_flag = 1; alarm_flag = 1;
H308.detection_flag = kH308Alarm; H308.detection_flag = kH308Alarm;
Send_Laser_Alarm_Event(kAlarmEvent); Send_Laser_Alarm_Event(kAlarmEvent);
} }
} }
else if (alarm_flag == 1 && count == 0) else if (alarm_flag == 1 && count == 0)
{ {
alarm_flag = 0; alarm_flag = 0;
H308.detection_flag = kH308Normal; H308.detection_flag = kH308Normal;
Send_Laser_Alarm_Event(kAlarmRcyEvent); Send_Laser_Alarm_Event(kAlarmRcyEvent);
} }
else if ((H308.Data.lel == 0) && (count == 0)) else if ((H308.Data.lel == 0) && (count == 0))
{ {
alarm_flag = 0; alarm_flag = 0;
H308.detection_flag = kH308Alarm; H308.detection_flag = kH308Alarm;
} }
} }
@ -194,21 +194,21 @@ static void H308_HandleFault(uint8_t count, uint8_t threshold)
{ {
if (count >= threshold && fault_flag != 1) if (count >= threshold && fault_flag != 1)
{ {
fault_flag = 1; fault_flag = 1;
H308.detection_flag = kH308Fault; H308.detection_flag = kH308Fault;
rt_thread_mdelay(1); rt_thread_mdelay(1);
Send_Laser_Alarm_Event(kFaultEvent); Send_Laser_Alarm_Event(kFaultEvent);
} }
else if (fault_flag == 1 && count == 0) else if (fault_flag == 1 && count == 0)
{ {
fault_flag = 0; fault_flag = 0;
H308.detection_flag = kH308Normal; H308.detection_flag = kH308Normal;
rt_thread_mdelay(1); rt_thread_mdelay(1);
Send_Laser_Alarm_Event(kFaultRcyEvent); Send_Laser_Alarm_Event(kFaultRcyEvent);
} }
else if (rt_pin_read(LED_Y_PIN) == PIN_HIGH && (count == 0)) else if (rt_pin_read(LED_Y_PIN) == PIN_HIGH && (count == 0))
{ {
fault_flag = 0; fault_flag = 0;
H308.detection_flag = kH308Normal; H308.detection_flag = kH308Normal;
} }
} }
@ -241,17 +241,27 @@ static uint8_t H308_CheckData(void)
// TODO: 寿命检测 // TODO: 寿命检测
uint8_t IS_H308_EndOfLife(void) uint8_t IS_H308_EndOfLife(void)
{ {
RTC_GetTime(); if (ntp_flag) // 是否同步网络时间
if (RtcDateTime.year >= 2035) // 至少大于2035年再检测
{ {
if (RTC_GetCounter() >= H308.expiration_seconds) ntp_flag = 0;
RTC_GetTime();
if (RtcDateTime.year >= 2035) &&(work_duration >= 6 * 365) // 至少大于2035年且实际使用时长超过6年
{ {
H308.end_of_life = 1; if (RTC_GetCounter() >= H308.expiration_seconds)
{
H308.end_of_life = 1;
}
else
{
H308.end_of_life = 0;
return 0;
}
} }
else else
{ {
H308.end_of_life = 0; H308.end_of_life = 0;
return 0; return 0;
} }
} }
else else
@ -317,7 +327,7 @@ static void h308_thread_entry(void *param)
{ {
alarm_value = 10; alarm_value = 10;
} }
H308.alarm_value = alarm_value; H308.alarm_value = alarm_value;
LOG_D("报警阈值:%d%LEL", H308.alarm_value); LOG_D("报警阈值:%d%LEL", H308.alarm_value);
@ -345,7 +355,7 @@ static void h308_thread_entry(void *param)
else else
{ {
h308_err_cnt++; h308_err_cnt++;
LOG_E("(len = %d) < 44, error data:[%s]", len, str); LOG_E("(len = %d) < 44, error data:[%s]", len, str);
if (h308_err_cnt >= 5) if (h308_err_cnt >= 5)
{ {
@ -378,7 +388,7 @@ static void h308_thread_entry(void *param)
fault_flag = 1; fault_flag = 1;
Send_Laser_Alarm_Event(kFaultEvent); Send_Laser_Alarm_Event(kFaultEvent);
} }
// 重置接收缓冲区和相关标志 // 重置接收缓冲区和相关标志
lwrb_reset(&uart4_rx_rb); lwrb_reset(&uart4_rx_rb);
sensor_rx_flag = 0; sensor_rx_flag = 0;
} }

View File

@ -45,7 +45,6 @@
#define NT26K_LIFE_THREAD_PRIORITY 26 #define NT26K_LIFE_THREAD_PRIORITY 26
#define NT26K_LIFE_THREAD_TICKS 10 #define NT26K_LIFE_THREAD_TICKS 10
// static rt_uint32_t nt26k_status = 0; // static rt_uint32_t nt26k_status = 0;
ALIGN(RT_ALIGN_SIZE) ALIGN(RT_ALIGN_SIZE)
static char nt26k_thread_stack[NT26K_THREAD_STACK_SIZE]; static char nt26k_thread_stack[NT26K_THREAD_STACK_SIZE];
@ -63,9 +62,9 @@ struct rt_event at_device_event;
rt_sem_t nt26k_recv_sem; rt_sem_t nt26k_recv_sem;
rt_sem_t nt26k_recv_msg_sem; // 用于接收信号 rt_sem_t nt26k_recv_msg_sem; // 用于接收信号
rt_sem_t nt26k_disconnect_sem; rt_sem_t nt26k_disconnect_sem;
static rt_timer_t nt26k_timer; // 上报心跳 static rt_timer_t nt26k_timer; // 上报心跳
static rt_timer_t nt26k_upload_timer; // 更新本地时间定时器 static rt_timer_t nt26k_upload_timer; // 更新本地时间定时器
static rt_timer_t nt26k_error_timer; // 上电失败情况下启动定时器 static rt_timer_t nt26k_error_timer; // 上电失败情况下启动定时器
rt_uint8_t device_power_down_flag; rt_uint8_t device_power_down_flag;
rt_uint8_t nt26k_power_down_flag; rt_uint8_t nt26k_power_down_flag;
@ -174,7 +173,7 @@ void Nt26k_Send_Event(Nt26kEvent event_type)
{ {
if (nt26k_event_index.current_event != kNt26kPowerOnEvent) if (nt26k_event_index.current_event != kNt26kPowerOnEvent)
{ {
if(power_on_send_flag) if (power_on_send_flag)
{ {
rt_event_send(&at_device_event, Nt26k_Get_Event_Flag(event_type)); rt_event_send(&at_device_event, Nt26k_Get_Event_Flag(event_type));
} }
@ -207,7 +206,6 @@ static void Nt26k_Error_Timer_Cb(void *parameter)
{ {
Nt26k_Send_Event(kNt26kPowerOnEvent); Nt26k_Send_Event(kNt26kPowerOnEvent);
} }
} }
int _Pack_Send(struct Nt26k_Ops *ops, char *buf) int _Pack_Send(struct Nt26k_Ops *ops, char *buf)
@ -778,8 +776,8 @@ const Nt26kEventInfo nt26k_event_info[] = {
*/ */
int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, void *param) int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, void *param)
{ {
rt_err_t ret = RT_EOK; rt_err_t ret = RT_EOK;
rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId); rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId);
LOG_D("max_retry_count:%d\n", max_retry_count); LOG_D("max_retry_count:%d\n", max_retry_count);
struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param; struct Nt26k_Ops *nt26k_ops = (struct Nt26k_Ops *)param;
const Nt26kEventInfo *event = RT_NULL; const Nt26kEventInfo *event = RT_NULL;
@ -813,7 +811,7 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
if (result != RT_EOK) if (result != RT_EOK)
{ {
LOG_E("nt26k send failed\n"); LOG_E("nt26k send failed\n");
ret = RT_ERROR; ret = RT_ERROR;
continue; continue;
} }
else else
@ -822,14 +820,14 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
{ {
LOG_D("收到回复\n"); LOG_D("收到回复\n");
nt26k_connect_sever_flag = 1; nt26k_connect_sever_flag = 1;
ret = RT_EOK; // 函数执行完毕返回0 ret = RT_EOK; // 函数执行完毕返回0
break; break;
} }
else else
{ {
// 收不到说明在平台未注册,此时nt26k_connect_sever_flag 为0但nt26k_conncet_tcp_flag = 1此时不发起重连等待事件触发就行 // 收不到说明在平台未注册,此时nt26k_connect_sever_flag 为0但nt26k_conncet_tcp_flag = 1此时不发起重连等待事件触发就行
nt26k_connect_sever_flag = 0; nt26k_connect_sever_flag = 0;
ret = RT_ERROR; ret = RT_ERROR;
} }
} }
} }
@ -842,7 +840,7 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
rt_sem_release(nt26k_disconnect_sem); rt_sem_release(nt26k_disconnect_sem);
} }
LOG_D("断网,等待连接中......\n"); LOG_D("断网,等待连接中......\n");
ret = RT_ERROR; ret = RT_ERROR;
} }
rt_thread_mdelay(3000); rt_thread_mdelay(3000);
} }
@ -850,7 +848,7 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
if (rt_strcmp(event->event_name, "掉电事件") == RT_EOK) if (rt_strcmp(event->event_name, "掉电事件") == RT_EOK)
{ {
rt_uint8_t cnt = 0; rt_uint8_t cnt = 0;
while ((device_power_down_flag == 0)&&(cnt < 10)) while ((device_power_down_flag == 0) && (cnt < 10))
{ {
rt_thread_mdelay(500); rt_thread_mdelay(500);
} }
@ -858,7 +856,7 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
{ {
LOG_D("关闭模组"); LOG_D("关闭模组");
nt26k_power_down_flag = 1; nt26k_power_down_flag = 1;
ret = RT_EOK; ret = RT_EOK;
} }
} }
return ret; return ret;
@ -903,7 +901,7 @@ void Handle_Server_Reply(struct Nt26k_Ops *ops)
{ {
LOG_D("nt26k send data success\n"); LOG_D("nt26k send data success\n");
} }
else if (ops->recv->recv_data.event_type == EVENT_TYPE_POWER_OFF)//是掉电事件回应 else if (ops->recv->recv_data.event_type == EVENT_TYPE_POWER_OFF) // 是掉电事件回应
{ {
device_power_down_flag = 1; device_power_down_flag = 1;
} }
@ -1044,7 +1042,7 @@ int Handle_Config_Params(struct Nt26k_Ops *ops)
if (BSP_Flash_Write_Info(recv_data, sizeof(sys_config_info) - 50) != 0) if (BSP_Flash_Write_Info(recv_data, sizeof(sys_config_info) - 50) != 0)
{ {
rt_uint32_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); rt_uint32_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId);
rt_uint32_t timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; rt_uint32_t timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND;
if (iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND) if (iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND)
{ {
timeout = 24 * 60 * 60 * RT_TICK_PER_SECOND; timeout = 24 * 60 * 60 * RT_TICK_PER_SECOND;
@ -1110,10 +1108,10 @@ void Handle_Time_Calibration_Data(struct Nt26k_Ops *ops)
// 下发修改服务器地址指令 // 下发修改服务器地址指令
void Handle_Sever_Addr_Set(struct Nt26k_Ops *ops) void Handle_Sever_Addr_Set(struct Nt26k_Ops *ops)
{ {
rt_uint8_t data[6] = {0}; rt_uint8_t data[6] = {0};
char imei[16] = {0}; char imei[16] = {0};
char temp[32] = "0"; char temp[32] = "0";
flash_sever_info sever_info= {0}; flash_sever_info sever_info = {0};
Get_IotImei(imei, FLASH_IOT_IMEI_LEN); Get_IotImei(imei, FLASH_IOT_IMEI_LEN);
String2Hex(temp, imei); // 将字符串转为十六进制字符串 String2Hex(temp, imei); // 将字符串转为十六进制字符串
rt_memcpy(data, (ops->recv->recv_data.res_data + 9), FLASH_SERVER_LEN); rt_memcpy(data, (ops->recv->recv_data.res_data + 9), FLASH_SERVER_LEN);
@ -1127,7 +1125,7 @@ void Handle_Sever_Addr_Set(struct Nt26k_Ops *ops)
else else
{ {
LOG_D("服务器地址修改成功\n"); LOG_D("服务器地址修改成功\n");
if(ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS) == RT_EOK) if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_NT26K, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS) == RT_EOK)
{ {
Flash_Set_WorkDuration(work_duration); Flash_Set_WorkDuration(work_duration);
rt_thread_mdelay(100); rt_thread_mdelay(100);
@ -1300,7 +1298,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
} }
else else
{ {
rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送 rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送
rt_timer_start(nt26k_upload_timer); // 周期修改时间更新 rt_timer_start(nt26k_upload_timer); // 周期修改时间更新
power_on_send_flag = 1; power_on_send_flag = 1;
} }
@ -1334,7 +1332,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent))
{ {
result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops); result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops);
if (result != RT_EOK) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
if (SysControl.status == kAlarmRcyEvent) if (SysControl.status == kAlarmRcyEvent)
@ -1370,7 +1368,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent))
{ {
result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops); result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops);
if (result != RT_EOK) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1394,7 +1392,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent))
{ {
result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops); result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops);
if (result != RT_EOK) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1474,7 +1472,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
{ {
LOG_D("重连网络中...\n"); LOG_D("重连网络中...\n");
nt26k_connect_sever_flag = 0; nt26k_connect_sever_flag = 0;
at_response_t resp = at_create_resp(64, 0, 5000); at_response_t resp = at_create_resp(64, 0, 5000);
if (resp == RT_NULL) if (resp == RT_NULL)
{ {
LOG_E("No memory for response structure!"); LOG_E("No memory for response structure!");
@ -1546,18 +1544,17 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
if (result != RT_EOK) if (result != RT_EOK)
{ {
nt26k_disconnect_retry_flag = 1; nt26k_disconnect_retry_flag = 1;
LOG_D("重连网络失败,等待%d s后重连\n",delay_n * 5); LOG_D("重连网络失败,等待%d s后重连\n", delay_n * 5);
rt_thread_mdelay(delay_n * 5000); rt_thread_mdelay(delay_n * 5000);
delay_n++; delay_n++;
if (delay_n >= 66)//大于3小时的重连都不行则重启设备 if (delay_n >= 66) // 大于3小时的重连都不行则重启设备
{ {
Flash_Set_WorkDuration(work_duration); Flash_Set_WorkDuration(work_duration);
delay_n = 0; delay_n = 0;
reboot(); reboot();
} }
rt_sem_release(nt26k_disconnect_sem); rt_sem_release(nt26k_disconnect_sem);
} }
} }
} }
@ -1574,10 +1571,10 @@ int BSP_Nt26k_Thread_Init(void)
Nt26k_Event_Init(); Nt26k_Event_Init();
rt_uint32_t iot_upload_time = (uint32_t)Flash_Get_SysCfg(kIotUploadCycleId); rt_uint32_t iot_upload_time = (uint32_t)Flash_Get_SysCfg(kIotUploadCycleId);
rt_uint32_t timeout = 0; rt_uint32_t timeout = 0;
if (iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND) if (iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND)
{ {
timeout = 24 * 60 * 60 * RT_TICK_PER_SECOND; timeout = 24 * 60 * 60 * RT_TICK_PER_SECOND;
LOG_E("iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND"); LOG_E("iot_upload_time > 24 * 60 * 60 * RT_TICK_PER_SECOND");
} }
@ -1619,16 +1616,16 @@ int BSP_Nt26k_Thread_Init(void)
rt_kprintf("创建定时器失败\n"); rt_kprintf("创建定时器失败\n");
return -1; return -1;
} }
nt26k_error_timer = rt_timer_create("nt26k_error_timer", nt26k_error_timer = rt_timer_create("nt26k_error_timer",
Nt26k_Error_Timer_Cb, Nt26k_Error_Timer_Cb,
RT_NULL, RT_NULL,
3 * 60 * RT_TICK_PER_SECOND, // 3分钟 3 * 60 * RT_TICK_PER_SECOND, // 3分钟
RT_TIMER_FLAG_PERIODIC); RT_TIMER_FLAG_PERIODIC);
nt26k_upload_timer = rt_timer_create("nt26k_upload_timer", nt26k_upload_timer = rt_timer_create("nt26k_upload_timer",
Nt26k_Upload_Timer_Cb, Nt26k_Upload_Timer_Cb,
RT_NULL, RT_NULL,
24 * 60 * 60 * RT_TICK_PER_SECOND, 24 * 60 * 60 * RT_TICK_PER_SECOND,
RT_TIMER_FLAG_PERIODIC); RT_TIMER_FLAG_PERIODIC);
ret = rt_thread_init(&nt26k_thread, ret = rt_thread_init(&nt26k_thread,
"nt26k_send_thread", "nt26k_send_thread",