From f07b59163a88f40d492dab1f1ad659b3079175c0 Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Wed, 19 Aug 2026 16:17:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(cat1):=20=E4=BF=AE=E5=A4=8DDUCH=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F30=E5=88=86=E9=92=9F=E9=87=8D=E8=BF=9E=E7=A9=BA?= =?UTF-8?q?=E7=99=BD=E6=9C=9F+TCP=E9=87=8D=E8=BF=9E=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E5=85=B3=E6=9C=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. DUCH_MODE 30分钟到期: 原走CAT_ONE_INIT(完整重初始化+不关TCP导致LIPOPEN失败→关机5分钟), 改为CLOSE_TCP→TCP_CONN(关TCP重开,~3秒恢复) 2. LIPOPEN: 0,0 重连失败: 原直接CAT_ONE_OFF(关机5分钟), 改为重试3次(每次关TCP→等5秒→重开), 都失败才关机 3. LIPOPEN: 0,1 连接成功: 重置重试计数器RegisterDelayCnt 4. CAT_ONE_CLOSE_TCP: 使用CatOne.NextStatus替代硬编码CAT_ONE_OFF,支持关TCP后跳转指定状态 5. LIPSEND失败路径: 进CLOSE_TCP前设置NextStatus=CAT_ONE_OFF保持原有行为 6. CAT_ONE_OFF: 重置RegisterDelayCnt 7. 版本信息移至main.h, 简化bsp.h硬件版本条件编译 --- Project/GateWay/MDK/RTE/RTOS/rtconfig.h | 2 +- Project/GateWay/source/User/Inc/bsp.h | 8 ------ Project/GateWay/source/User/Inc/main.h | 3 ++ Project/GateWay/source/User/Src/CatOneTask.c | 29 ++++++++++++++++---- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Project/GateWay/MDK/RTE/RTOS/rtconfig.h b/Project/GateWay/MDK/RTE/RTOS/rtconfig.h index 0aa25fe..6353a58 100644 --- a/Project/GateWay/MDK/RTE/RTOS/rtconfig.h +++ b/Project/GateWay/MDK/RTE/RTOS/rtconfig.h @@ -27,7 +27,7 @@ // the stack size of main thread<1-4086> // Default: 512 -#define RT_MAIN_THREAD_STACK_SIZE 512 +#define RT_MAIN_THREAD_STACK_SIZE 512 //4096 // diff --git a/Project/GateWay/source/User/Inc/bsp.h b/Project/GateWay/source/User/Inc/bsp.h index 2722cc3..b012fd9 100644 --- a/Project/GateWay/source/User/Inc/bsp.h +++ b/Project/GateWay/source/User/Inc/bsp.h @@ -10,9 +10,6 @@ #include "rtthread.h" #include "ff.h" -#define SOFTWARE_VERSION 10 -#define HARDWARE_VERSION 12 - //#define USE_BOOTLOADER //#define FLASH_SECTOR_SIZE 0x2000ul @@ -97,13 +94,8 @@ #define DBG_OR_CAT1_CTRL_PORT (PortB) #define DBG_OR_CAT1_CTRL_PIN (Pin08) -#if (HARDWARE_VERSION == 12) #define DBG_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN) #define CAT1_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN) -#elif (HARDWARE_VERSION >= 13) -#define DBG_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN) -#define CAT1_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN) -#endif #define CAT1_PWR_KEY_PORT (PortA) #define CAT1_PWR_KEY_PIN (Pin03) diff --git a/Project/GateWay/source/User/Inc/main.h b/Project/GateWay/source/User/Inc/main.h index c0f4740..e911463 100644 --- a/Project/GateWay/source/User/Inc/main.h +++ b/Project/GateWay/source/User/Inc/main.h @@ -4,6 +4,9 @@ #include "Public.h" #include "DebugCmd.h" +#define SOFTWARE_VERSION 10 +#define HARDWARE_VERSION 12 + #define MAC_ADDR_TYPE 0//0为测试服务器 extern bool MainDispEn; diff --git a/Project/GateWay/source/User/Src/CatOneTask.c b/Project/GateWay/source/User/Src/CatOneTask.c index 4b29acf..55146f2 100644 --- a/Project/GateWay/source/User/Src/CatOneTask.c +++ b/Project/GateWay/source/User/Src/CatOneTask.c @@ -42,6 +42,8 @@ void Cat1DuchSend(const char *text, uint16_t len) #define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);} #define CATONE_RESET_DELAY_TIME_MAX (5 * 60 * 1000) +#define CAT1_TCP_REOPEN_RETRY_MAX 3 +#define CAT1_TCP_REOPEN_RETRY_DLY 5000 const char *CatOneATCmdStr[16] = { "NULL", @@ -237,13 +239,23 @@ void CatOneAtCmdAnalyze(char *RxBuff) if(strstr(RxBuff, "LIPOPEN: 0,1") != NULL) { CAT1_DBG_LOG("Cat1 successfully to connect to the server.\r\n\r\n"); CatOne.TcpConnFlag = true; + CatOne.RegisterDelayCnt = 0; CatOne.Cat1Status = CatOne.NextStatus; rt_sem_release(CatOneRev_Sem); } else if(strstr(RxBuff, "LIPOPEN: 0,0") != NULL) { - CAT1_DBG_LOG("Cat1 failed to connect to the server.\r\n\r\n"); CatOne.TcpConnFlag = false; - CatOne.Cat1Status = CAT_ONE_OFF; + CatOne.RegisterDelayCnt++; + if(CatOne.RegisterDelayCnt < CAT1_TCP_REOPEN_RETRY_MAX) { + CAT1_DBG_LOG("Cat1 LIPOPEN failed, retry(%d)...\r\n\r\n", CatOne.RegisterDelayCnt); + CatOne.NextStatus = CAT_ONE_TCP_CONN; + CatOne.Cat1Status = CAT_ONE_CLOSE_TCP; + } + else { + CAT1_DBG_LOG("Cat1 LIPOPEN failed %d times, power off!\r\n\r\n", CAT1_TCP_REOPEN_RETRY_MAX); + CatOne.RegisterDelayCnt = 0; + CatOne.Cat1Status = CAT_ONE_OFF; + } } return; } @@ -425,8 +437,10 @@ void CatOneLoopHandler(void) } else { CAT1_DBG_LOG("Cat1 error, Close!\r\n"); - if(CatOne.AtCmd == CAT_ONE_LIPSEND) + if(CatOne.AtCmd == CAT_ONE_LIPSEND) { + CatOne.NextStatus = CAT_ONE_OFF; CatOne.Cat1Status = CAT_ONE_CLOSE_TCP; + } else CatOne.Cat1Status = CAT_ONE_OFF; } @@ -451,6 +465,8 @@ void CatOneLoopHandler(void) break; case CAT_ONE_TCP_CONN: + if(CatOne.RegisterDelayCnt > 0) + rt_thread_delay(CAT1_TCP_REOPEN_RETRY_DLY); CatOneAtCmdSend(CAT_ONE_LIPOPEN, 2000, CAT_ONE_WAIT_CONN); break; @@ -538,7 +554,7 @@ void CatOneLoopHandler(void) case CAT_ONE_CLOSE_TCP: CatOne.AtCmdResendCnt = 3; - CatOneAtCmdSend(CAT_ONE_LTPCLOSE, 1000, CAT_ONE_OFF); + CatOneAtCmdSend(CAT_ONE_LTPCLOSE, 1000, CatOne.NextStatus); break; case CAT_ONE_DUCH_MODE: @@ -568,8 +584,8 @@ void CatOneLoopHandler(void) runMs += 50; } if(runMs >= 1800000) { - CatOne.Cat1Status = CAT_ONE_INIT; - CatOne.AtCmdIdx = 0; + CatOne.NextStatus = CAT_ONE_TCP_CONN; + CatOne.Cat1Status = CAT_ONE_CLOSE_TCP; break; } } @@ -582,6 +598,7 @@ void CatOneLoopHandler(void) rt_thread_delay(3000); CAT1_PWR_KEY_SET(); CatSendErrCnt = 0; + CatOne.RegisterDelayCnt = 0; CAT1_DBG_LOG("Cat1 Power Off!\r\n"); CatOne.Cat1Status = CAT_ONE_IDEL; CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX;