diff --git a/.mrs/launch.json b/.mrs/launch.json index 1d041f2..be75f06 100644 --- a/.mrs/launch.json +++ b/.mrs/launch.json @@ -5,7 +5,7 @@ "type": "mrs-debugger", "request": "launch", "name": "JT-DT-YD4N02A_RTT_MRS-4G", - "cwd": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS", + "cwd": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K", "openOCDCfg": { "useLocalOpenOCD": true, "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", @@ -39,8 +39,8 @@ "additionalCommands": [] }, "loadedFiles": { - "executableFile": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", - "symbolFile": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "executableFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "symbolFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", "executableFileOffset": 0, "symbolFileOffset": 0 }, diff --git a/README.md b/README.md index 0458ca2..bb583ae 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # 一、版本更新内容 ## v1.0 完成基本功能和物联网功能 -## v1.1 增加了修改服务器地址的功能,增加了物联网接收部分CRC值校验功能 +## v1.1 增加了修改服务器地址的功能,增加了物联网接收部分CRC值校验功能## +## v1.6 增加了当上电失败时不发送其他事件的功能,以及掉电关闭模组功能,快速关机的功能 +## v1.7 增加了报警和报警恢复,故障和故障恢复发送失败不断重试的功能 diff --git a/applications/user_sys.h b/applications/user_sys.h index 805d6ab..d1341d6 100644 --- a/applications/user_sys.h +++ b/applications/user_sys.h @@ -20,7 +20,7 @@ #define MAX_EXPIRATION_DAYS (365 * MAX_EXPIRATION_YEARS + 30 * 3U) #define SYS_HW_VERSION (0X22U) -#define SYS_SW_VERSION (0X16U) +#define SYS_SW_VERSION (0X17U) #define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00U) // 高位在前,低位在后 #define SYS_IOT_RETRY (0X03U) #define SYS_TEMP_ALARM_THRESHOLD (0X30U) diff --git a/bsp/src/at_device_nt26k.c b/bsp/src/at_device_nt26k.c index 1b8ee90..a177ddf 100644 --- a/bsp/src/at_device_nt26k.c +++ b/bsp/src/at_device_nt26k.c @@ -518,7 +518,7 @@ int nt26k_netdev_check_link_status(struct netdev *netdev) RT_ASSERT(netdev); - rt_snprintf(tname, RT_NAME_MAX, "%s", netdev->name); + rt_snprintf(tname, RT_NAME_MAX, "%s_link", netdev->name); /* create nt26k link status polling thread */ tid = rt_thread_create(tname, nt26k_check_link_status_entry, (void *)netdev, diff --git a/bsp/src/bsp_button.c b/bsp/src/bsp_button.c index d5089e0..57bea8d 100644 --- a/bsp/src/bsp_button.c +++ b/bsp/src/bsp_button.c @@ -38,8 +38,7 @@ static uint8_t _CommonBtnRead(void *arg) switch (btn->id) { case USER_BUTTON_0: - value = rt_pin_read(BUTTON_0); - // return rt_pin_read(BUTTON_0); + return rt_pin_read(BUTTON_0); break; default: diff --git a/bsp/src/bsp_h308.c b/bsp/src/bsp_h308.c index bf9f6f2..7f0f684 100644 --- a/bsp/src/bsp_h308.c +++ b/bsp/src/bsp_h308.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-14 10:21:04 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-23 09:05:28 + * @LastEditTime: 2025-01-24 10:53:59 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c * @Description: * diff --git a/bsp/src/bsp_nt26k.c b/bsp/src/bsp_nt26k.c index 154461b..e80736f 100644 --- a/bsp/src/bsp_nt26k.c +++ b/bsp/src/bsp_nt26k.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-09 08:42:14 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-24 10:23:59 + * @LastEditTime: 2025-01-25 09:42:09 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @Description: * @@ -199,11 +199,6 @@ static void Nt26k_Ht_Timer_Cb(void *parameter) // 定时器回调函数,当1分钟内没有数据交互时,关闭tcp连接 static void Nt26k_Error_Timer_Cb(void *parameter) { - if((nt26k_send_error_flag == 1) && power_on_send_flag == 1) - { - nt26k_send_error_flag = 0; - Nt26k_Send_Event(nt26k_event_index.current_event); - } if (power_on_send_flag) // 上电成功时,停止定时器 { rt_timer_stop(nt26k_error_timer); @@ -834,11 +829,6 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, { // 收不到说明在平台未注册,此时nt26k_connect_sever_flag 为0,但nt26k_conncet_tcp_flag = 1;此时不发起重连,等待事件触发就行 nt26k_connect_sever_flag = 0; - if(rt_strcmp(event->event_name, "上电心跳事件") != RT_EOK)//不是上电事件下的失败 - { - nt26k_send_error_flag = 1; - rt_timer_start(nt26k_error_timer); - } ret = RT_ERROR; } } @@ -1302,7 +1292,7 @@ static void Nt26k_Send_Thread_Entry(void *param) if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kPowerOnEvent)) { result = Nt26k_Process_Events(kNt26kPowerOnEvent, device, ops); // 当上电心跳包发送不成功时,其他事件不启动 - if (result) + if (result != RT_EOK) { power_on_send_flag = 0; rt_timer_start(nt26k_error_timer); // 启动重连定时器, 3min一次,直到发送成功 @@ -1311,7 +1301,6 @@ static void Nt26k_Send_Thread_Entry(void *param) else { rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送 - rt_timer_start(nt26k_upload_timer); // 周期修改时间更新 power_on_send_flag = 1; } @@ -1321,7 +1310,7 @@ static void Nt26k_Send_Thread_Entry(void *param) if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kHeartbeatEvent)) { result = Nt26k_Process_Events(kNt26kHeartbeatEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1333,42 +1322,55 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmEvent)) { result = Nt26k_Process_Events(kNt26kAlarmEvent, device, ops); - if (result) + if (result != RT_EOK) { + if (SysControl.status == kAlarmEvent) + { + Nt26k_Send_Event(kNt26kAlarmEvent); + } LOG_E("nt26k send data failed result = [%d]\n", result); } } else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent)) { result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); + if (SysControl.status == kAlarmRcyEvent) + { + Nt26k_Send_Event(kNt26kAlarmRcyEvent); + } } } else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultEvent)) { - if (device_state_flag != 1) // 当设备失效时,只上报失效信息 + result = Nt26k_Process_Events(kNt26kFaultEvent, device, ops); + if (result != RT_EOK) { - result = Nt26k_Process_Events(kNt26kFaultEvent, device, ops); - if (result) + LOG_E("nt26k send data failed result = [%d]\n", result); + if (SysControl.status == kFaultEvent) { - LOG_E("nt26k send data failed result = [%d]\n", result); + Nt26k_Send_Event(kNt26kFaultEvent); } } } else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultRcyEvent)) { result = Nt26k_Process_Events(kNt26kFaultRcyEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); + if (SysControl.status == kFaultRcyEvent) + { + Nt26k_Send_Event(kNt26kFaultRcyEvent); + } } } else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent)) { result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1376,7 +1378,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSilenceEvent)) { result = Nt26k_Process_Events(kNt26kSilenceEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1384,7 +1386,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kExceptionEvent)) { result = Nt26k_Process_Events(kNt26kExceptionEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1392,7 +1394,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent)) { result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1400,7 +1402,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFanStatusEvent)) { result = Nt26k_Process_Events(kNt26kFanStatusEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1408,7 +1410,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kTempAnomalyEvent)) { result = Nt26k_Process_Events(kNt26kTempAnomalyEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1417,7 +1419,7 @@ static void Nt26k_Send_Thread_Entry(void *param) { nt26k_event_initialized = RT_FALSE; // 当接收到掉电事件时,发送完成后删除事件,不再接收其他事件 result = Nt26k_Process_Events(kNt26kPowerDownEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1425,7 +1427,7 @@ static void Nt26k_Send_Thread_Entry(void *param) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kDeviceFailureEvent)) { result = Nt26k_Process_Events(kNt26kDeviceFailureEvent, device, ops); - if (result) + if (result != RT_EOK) { LOG_E("nt26k send data failed result = [%d]\n", result); } @@ -1482,9 +1484,8 @@ static void Nt26k_Life_Thread_Entry(void *parameter) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK) { LOG_D("AT device power on success"); - rt_thread_mdelay(1000); /* disable echo */ - at_obj_exec_cmd(device->client, resp, "ATE0"); + at_client_obj_wait_connect(device->client, 5000); /*AT+QICFG="dataformat" 设置收发模式*/ if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK) { diff --git a/rt-thread/rtconfig.h b/rt-thread/rtconfig.h index d67b410..4662ee6 100644 --- a/rt-thread/rtconfig.h +++ b/rt-thread/rtconfig.h @@ -15,18 +15,14 @@ /*使用动态日志及密码功能时,需开启宏 FINSH_USING_AUTH ULOG_USING_FILTER ENABLE_LOG_ALL ULOG_OUTPUT_LVL = 7 以及设置ulog.c 1522行 输出等级为0*/ /**/ -// #define FINSH_USING_AUTH //开启终端密码登录功能 -// #define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行 +#define FINSH_USING_AUTH //开启终端密码登录功能 +#define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行 #define ENABLE_LOG_ALL #define TEST_ENABLE //打开所有的终端测试程序 -#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0 +#define ULOG_OUTPUT_LVL 7 #define IOT_MODULE_SWITCH 1 //开启物联网功能 -// #ifdef FINSH_USING_AUTH - #define AT_USING_CLI - #define AT_PRINT_RAW_CMD -// #endif /* RT-Thread Kernel */ @@ -82,7 +78,7 @@ #define RT_USING_DEVICE #define RT_USING_CONSOLE - #define RT_CONSOLEBUF_SIZE 512 + #define RT_CONSOLEBUF_SIZE 640 #define RT_CONSOLE_DEVICE_NAME "uart2" /* end of Kernel Device Object */ #define RT_VER_NUM 0x40101 @@ -159,7 +155,10 @@ #define AT_USING_CLIENT #define AT_CLIENT_NUM_MAX 1 - +#ifndef FINSH_USING_AUTH + #define AT_USING_CLI + #define AT_PRINT_RAW_CMD +#endif #define AT_CMD_MAX_LEN 256 #define AT_SW_VERSION_NUM 0x10301