From 0653ca795e4f47ae39e7f760fd235baf706342ff Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期五, 25 四月 2025 14:57:10 +0800 Subject: [PATCH] N303 功耗140ma 带PA常开接收,4G低功耗,添加了低功耗日志查询,休眠700微安修改了精致休眠唤醒bug --- keil/include/components/internet/src/AIR780EFSM.c | 163 ++++++++++++++++++++++++++---------------------------- 1 files changed, 79 insertions(+), 84 deletions(-) diff --git a/keil/include/components/internet/src/AIR780EFSM.c b/keil/include/components/internet/src/AIR780EFSM.c index 619c33e..8452c29 100644 --- a/keil/include/components/internet/src/AIR780EFSM.c +++ b/keil/include/components/internet/src/AIR780EFSM.c @@ -106,6 +106,30 @@ Socket_OnRecv(u32ID); break; } + case AIR780E_EVENT_NUM_0: + case AIR780E_EVENT_NUM_1: + case AIR780E_EVENT_NUM_2: + case AIR780E_EVENT_NUM_3: + case AIR780E_EVENT_NUM_4: + case AIR780E_EVENT_NUM_5: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + HIDO_UINT32 u32ConnectID = 0; + HIDO_DataStruct stEvent; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n", + &u32ConnectID, &stEvent) != 2) + { + break; + } + + if (strncmp(stEvent.m_pData, "CLOSED", stEvent.m_u32Len) == 0) + { + Socket_OnClosed(u32ConnectID); + } + + break; + } default: { return HIDO_EVENT_NO_PROC; @@ -243,12 +267,15 @@ { l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_ON; AIR780EDriver_PowerOn(); - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, AIR780E_EVENT_DELAY); + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(5), _pstFSM, AIR780E_EVENT_DELAY); break; } case AIR780E_SUB_STATE_POWER_ON: { HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); + //Uart_ReConfigBaudRate(UART_ID_4G, 115200); + //HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=9600;&W\r\n"); + //Uart_ReConfigBaudRate(UART_ID_4G, 9600); break; } } @@ -256,6 +283,13 @@ break; } case AIR780E_EVENT_RDY: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_TIMEOUT: { HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); break; @@ -278,41 +312,26 @@ *******************************************************************************/ HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdTest, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) { - static HIDO_UINT32 l_u32ReadyCnt = 0; - static HIDO_UINT32 l_u32TimeoutCnt = 0; + static HIDO_UINT32 l_u32TimeoutCnt = 0; HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; - HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; switch (_u32Event) { case HIDO_EVENT_ENTRY: { - l_u32ReadyCnt = 0; - l_u32TimeoutCnt = 0; - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); break; } case HIDO_EVENT_EXIT: { HIDO_ATLiteCmdSendOver(pstATDevice); - HIDO_TimerCancel(u32FSMTimerID); break; } case HIDO_AT_EVENT_OK: { - l_u32TimeoutCnt = 0; - l_u32ReadyCnt++; - if (l_u32ReadyCnt >= 1) - { - /* 上电成功 */ - Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); - } - else - { - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, - AIR780E_EVENT_DELAY); - } + /* 上电成功 */ + Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); break; } @@ -321,36 +340,14 @@ break; } case HIDO_AT_EVENT_TIMEOUT: - { - l_u32TimeoutCnt++; - l_u32ReadyCnt = 0; - - if (5 == l_u32TimeoutCnt) - { - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); - } - else - { - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, - AIR780E_EVENT_DELAY); - } - - break; - } - case AIR780E_EVENT_DELAY: - { - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); - break; - } - case AIR780E_EVENT_POLL: - { - if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) - { - HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); - - break; - } - + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); + l_u32TimeoutCnt++; +// if (5 == l_u32TimeoutCnt) +// { +// AIR780E_Reset(); +// } + break; } default: @@ -371,7 +368,6 @@ *******************************************************************************/ HIDO_FSM_STATE_IMPLEMENT(AIR780EWaitSimCardReady, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) { - static HIDO_BOOL bReady = HIDO_FALSE; static HIDO_UINT32 u32RetryCnt = 0; HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; @@ -380,7 +376,6 @@ { case HIDO_EVENT_ENTRY: { - bReady = HIDO_FALSE; u32RetryCnt = 0; HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); break; @@ -393,8 +388,6 @@ } case HIDO_AT_EVENT_OK: { -// HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(3), -// _pstFSM, AIR780E_EVENT_DELAY); HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdInit), HIDO_NULL); break; } @@ -406,41 +399,19 @@ } case HIDO_AT_EVENT_TIMEOUT: { - if (HIDO_TRUE == bReady) - { - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdInit), HIDO_NULL); - } - else - { - return HIDO_EVENT_NO_PROC; - } - break; } case AIR780E_EVENT_DELAY: { - if (HIDO_TRUE == bReady) + if(u32RetryCnt < 10) { - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdInit), HIDO_NULL); + u32RetryCnt++; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); } else { - // HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); - if(u32RetryCnt < 10) - { - u32RetryCnt++; - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); - } - else - { - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); - } + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); } - break; - } - case AIR780E_EVENT_CPIN: - { - bReady = HIDO_TRUE; break; } case AIR780E_EVENT_POLL: @@ -481,6 +452,7 @@ { "AT+CIMI\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, { "AT+CCID\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, { "ATI\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CFGRI=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, // { "AT+CTTSPARAM=100,0,50,50,0,2,25,1500,150,1,0,1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, }; @@ -774,7 +746,7 @@ l_u32Cnt++; } - if (l_u32ReadyCnt >= 3) + if (l_u32ReadyCnt >= 1) { HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPInit), HIDO_NULL); } @@ -877,9 +849,12 @@ { { "AT+CIPRXF=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, { "AT+CIPMUX=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT*I\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, { "AT+CSTT=\"%s\",\"\",\"\"\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR }, { "AT+CIICR\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR }, { "AT+CIFSR\r\n", 1000, AT_CMD_RESULT_OK | AT_CMD_RESULT_TIMEOUT }, + { "AT+POWERMODE=\"PRO\"\r\n", 5000, AT_CMD_RESULT_OK | AT_CMD_RESULT_TIMEOUT }, + { "AT+POWERMODE?\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, }; pcIMSI = Module_GetIMSI(); @@ -943,7 +918,7 @@ return HIDO_EVENT_NO_PROC; } } - +ok: if((HIDO_AT_EVENT_OK == _u32Event && (astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_OK)) || (HIDO_AT_EVENT_ERROR == _u32Event && (astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_ERROR))) { @@ -983,6 +958,24 @@ } case AIR780E_EVENT_POLL: { + break; + } + case AIR780E_EVENT_NUM_0: + case AIR780E_EVENT_NUM_1: + case AIR780E_EVENT_NUM_2: + case AIR780E_EVENT_NUM_3: + case AIR780E_EVENT_NUM_4: + case AIR780E_EVENT_NUM_5: + case AIR780E_EVENT_NUM_6: + case AIR780E_EVENT_NUM_7: + case AIR780E_EVENT_NUM_8: + case AIR780E_EVENT_NUM_9: + { + if(l_u32CmdIndex == 4) + { + _u32Event = HIDO_AT_EVENT_OK; + goto ok; + } break; } default: @@ -1530,13 +1523,15 @@ return HIDO_OK; } +#if 0 if ((u32CurTick - l_u32IPCheckTick) > HIDO_TIMER_TICK_S(10)) { l_u32IPCheckTick = u32CurTick; HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EIPCheck), HIDO_NULL); return HIDO_OK; } - +#endif + /* RunATCmd */ if (AIR780E_RunATCmdPoll(_pstATDevice) == HIDO_OK) { -- Gitblit v1.9.3