fix(cat1): 修复DUCH模式30分钟重连空白期+TCP重连失败立即关机问题

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硬件版本条件编译
This commit is contained in:
2026-08-19 16:17:48 +08:00
parent 988bc99631
commit f07b59163a
4 changed files with 27 additions and 15 deletions
+1 -1
View File
@@ -27,7 +27,7 @@
// <o>the stack size of main thread<1-4086> // <o>the stack size of main thread<1-4086>
// <i>Default: 512 // <i>Default: 512
#define RT_MAIN_THREAD_STACK_SIZE 512 #define RT_MAIN_THREAD_STACK_SIZE 512 //4096
// </h> // </h>
-8
View File
@@ -10,9 +10,6 @@
#include "rtthread.h" #include "rtthread.h"
#include "ff.h" #include "ff.h"
#define SOFTWARE_VERSION 10
#define HARDWARE_VERSION 12
//#define USE_BOOTLOADER //#define USE_BOOTLOADER
//#define FLASH_SECTOR_SIZE 0x2000ul //#define FLASH_SECTOR_SIZE 0x2000ul
@@ -97,13 +94,8 @@
#define DBG_OR_CAT1_CTRL_PORT (PortB) #define DBG_OR_CAT1_CTRL_PORT (PortB)
#define DBG_OR_CAT1_CTRL_PIN (Pin08) #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 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) #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_PORT (PortA)
#define CAT1_PWR_KEY_PIN (Pin03) #define CAT1_PWR_KEY_PIN (Pin03)
+3
View File
@@ -4,6 +4,9 @@
#include "Public.h" #include "Public.h"
#include "DebugCmd.h" #include "DebugCmd.h"
#define SOFTWARE_VERSION 10
#define HARDWARE_VERSION 12
#define MAC_ADDR_TYPE 0//0为测试服务器 #define MAC_ADDR_TYPE 0//0为测试服务器
extern bool MainDispEn; extern bool MainDispEn;
+22 -5
View File
@@ -42,6 +42,8 @@ void Cat1DuchSend(const char *text, uint16_t len)
#define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);} #define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);}
#define CATONE_RESET_DELAY_TIME_MAX (5 * 60 * 1000) #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] = { const char *CatOneATCmdStr[16] = {
"NULL", "NULL",
@@ -237,14 +239,24 @@ void CatOneAtCmdAnalyze(char *RxBuff)
if(strstr(RxBuff, "LIPOPEN: 0,1") != NULL) { if(strstr(RxBuff, "LIPOPEN: 0,1") != NULL) {
CAT1_DBG_LOG("Cat1 successfully to connect to the server.\r\n\r\n"); CAT1_DBG_LOG("Cat1 successfully to connect to the server.\r\n\r\n");
CatOne.TcpConnFlag = true; CatOne.TcpConnFlag = true;
CatOne.RegisterDelayCnt = 0;
CatOne.Cat1Status = CatOne.NextStatus; CatOne.Cat1Status = CatOne.NextStatus;
rt_sem_release(CatOneRev_Sem); rt_sem_release(CatOneRev_Sem);
} }
else if(strstr(RxBuff, "LIPOPEN: 0,0") != NULL) { 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.TcpConnFlag = false;
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; CatOne.Cat1Status = CAT_ONE_OFF;
} }
}
return; return;
} }
@@ -425,8 +437,10 @@ void CatOneLoopHandler(void)
} }
else { else {
CAT1_DBG_LOG("Cat1 error, Close!\r\n"); 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; CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
}
else else
CatOne.Cat1Status = CAT_ONE_OFF; CatOne.Cat1Status = CAT_ONE_OFF;
} }
@@ -451,6 +465,8 @@ void CatOneLoopHandler(void)
break; break;
case CAT_ONE_TCP_CONN: 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); CatOneAtCmdSend(CAT_ONE_LIPOPEN, 2000, CAT_ONE_WAIT_CONN);
break; break;
@@ -538,7 +554,7 @@ void CatOneLoopHandler(void)
case CAT_ONE_CLOSE_TCP: case CAT_ONE_CLOSE_TCP:
CatOne.AtCmdResendCnt = 3; CatOne.AtCmdResendCnt = 3;
CatOneAtCmdSend(CAT_ONE_LTPCLOSE, 1000, CAT_ONE_OFF); CatOneAtCmdSend(CAT_ONE_LTPCLOSE, 1000, CatOne.NextStatus);
break; break;
case CAT_ONE_DUCH_MODE: case CAT_ONE_DUCH_MODE:
@@ -568,8 +584,8 @@ void CatOneLoopHandler(void)
runMs += 50; runMs += 50;
} }
if(runMs >= 1800000) { if(runMs >= 1800000) {
CatOne.Cat1Status = CAT_ONE_INIT; CatOne.NextStatus = CAT_ONE_TCP_CONN;
CatOne.AtCmdIdx = 0; CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
break; break;
} }
} }
@@ -582,6 +598,7 @@ void CatOneLoopHandler(void)
rt_thread_delay(3000); rt_thread_delay(3000);
CAT1_PWR_KEY_SET(); CAT1_PWR_KEY_SET();
CatSendErrCnt = 0; CatSendErrCnt = 0;
CatOne.RegisterDelayCnt = 0;
CAT1_DBG_LOG("Cat1 Power Off!\r\n"); CAT1_DBG_LOG("Cat1 Power Off!\r\n");
CatOne.Cat1Status = CAT_ONE_IDEL; CatOne.Cat1Status = CAT_ONE_IDEL;
CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX; CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX;