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 | 361 +++++++++------------------------------------------ 1 files changed, 63 insertions(+), 298 deletions(-) diff --git a/keil/include/components/internet/src/AIR780EFSM.c b/keil/include/components/internet/src/AIR780EFSM.c index edefa2b..8452c29 100644 --- a/keil/include/components/internet/src/AIR780EFSM.c +++ b/keil/include/components/internet/src/AIR780EFSM.c @@ -106,52 +106,30 @@ Socket_OnRecv(u32ID); break; } -#ifdef TTS - case AIR780E_EVENT_QTTS: + 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 (strcmp((HIDO_CHAR *) pstData->m_pData, "+CTTS:0\r\n") != 0) + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n", + &u32ConnectID, &stEvent) != 2) { break; } - AIR780EAudio_TTSOver(); - - break; - } - case AIR780E_EVENT_QLTONE: - { - HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; - - if (strcmp((HIDO_CHAR *) pstData->m_pData, "+QLTONE: 0\r\n") != 0) + if (strncmp(stEvent.m_pData, "CLOSED", stEvent.m_u32Len) == 0) { - break; + Socket_OnClosed(u32ConnectID); } - AIR780EAudio_TONEOver(); - break; } - #endif -#ifdef __AIR780E_MQTT__ - case AIR780E_EVENT_QMTRECV: - { - HIDO_UINT32 u32ClientID = 0; - HIDO_UINT32 u32MsgID = 0; - HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; - - if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QMTRECV: %d,%d\r\n", - &u32ClientID, &u32MsgID) != 2) - { - break; - } - - MQTT_HaveRecvData(u32ClientID); - - break; - } -#endif default: { return HIDO_EVENT_NO_PROC; @@ -253,8 +231,6 @@ { AIR780E_SUB_STATE_POWER_OFF, AIR780E_SUB_STATE_POWER_ON, - AIR780E_SUB_STATE_PWRKEY_RESET, - AIR780E_SUB_STATE_PWRKEY_SET, } l_eAIR780ESubState; HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; @@ -273,7 +249,7 @@ l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_OFF; AIR780EDriver_PowerOff(); - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(3), _pstFSM, AIR780E_EVENT_DELAY); + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); break; } case HIDO_EVENT_EXIT: @@ -291,27 +267,15 @@ { l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_ON; AIR780EDriver_PowerOn(); - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _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: { - l_eAIR780ESubState = AIR780E_SUB_STATE_PWRKEY_RESET; - AIR780EDriver_PWRKEYReset(); - //Uart_ReConfigBaudRate(UART_ID_4G, 921600); - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); - break; - } - case AIR780E_SUB_STATE_PWRKEY_RESET: - { - l_eAIR780ESubState = AIR780E_SUB_STATE_PWRKEY_SET; - AIR780EDriver_PWRKEYSet(); - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_MS(800), _pstFSM, AIR780E_EVENT_DELAY); - break; - } - case AIR780E_SUB_STATE_PWRKEY_SET: - { 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; } } @@ -320,106 +284,11 @@ } case AIR780E_EVENT_RDY: { -#if 0 - HIDO_UINT32 Power_r = 0,Open_PJ,dev_id; - HIDO_CHAR TTS_Open[60]; - - if(Power_GetBatteryPercentage() < 5.0) //低电量自动关机 - { - GPIOD->BSRR = 0x0004; //打开TTS电源 - HAL_Delay(800); //必要延时,延时是为了避免说不出来第一个字 - - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CTTS=2,\"%s\"\r\n", "电量过低"); - HAL_Delay(2000); - - // 调用关机接口 - while(1) - { - GPIOA->BSRR = 0X0100 << 16; - } - } -#endif -#if 0 -// HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QTTS=2,\"开机\"\r\n"); - Power_r = Power_GetBatteryPercentage(); - - dev_id = ((g_com_map[DEV_ID]>>12)&0xf)*1000+((g_com_map[DEV_ID]>>8)&0xf)*100+((g_com_map[DEV_ID]>>4)&0xf)*10+(g_com_map[DEV_ID]&0xf); - Open_PJ = sprintf(TTS_Open, "设备编号%d剩余电量百分之%d",dev_id, Power_r); - TTS_Play((HIDO_UINT8 *)TTS_Open, strlen(TTS_Open)); -#endif - break; - } - default: - { - return HIDO_EVENT_NO_PROC; - } - } - - return HIDO_EVENT_OK; -} - -/******************************************************************************* - * State Name : AIR780EWaitReady - * Parent State : AIR780EInit - * Description : - * Author : www.hido-studio.com - * Modified Date: : 2018-05-01 - *******************************************************************************/ -extern int Last4G; - -HIDO_FSM_STATE_IMPLEMENT(AIR780EWaitReady, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) -{ - static HIDO_BOOL bReady = HIDO_FALSE; - static HIDO_UINT32 u32RetryCnt = 0,Power_r = 0,Open_PJ,dev_id; - HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; - HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; - - HIDO_CHAR TTS_Open[60]; - - - switch (_u32Event) - { - case HIDO_EVENT_ENTRY: - { - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), - _pstFSM, AIR780E_EVENT_DELAY); - break; - } - case HIDO_EVENT_EXIT: - { - HIDO_ATLiteCmdSendOver(pstATDevice); - HIDO_TimerCancel(u32FSMTimerID); - break; - } - case AIR780E_EVENT_RDY: - { -#if 0 - if(Power_GetBatteryPercentage() < 5.0) //低电量自动关机 - { - GPIOD->BSRR = 0x0004; //打开TTS电源 - HAL_Delay(800); //必要延时,延时是为了避免说不出来第一个字 - - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CTTS=2,\"%s\"\r\n", "电量过低"); - HAL_Delay(2000); - - // 调用关机接口 - while(1) - { - GPIOA->BSRR = 0X0100 << 16; - } - } - -// HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QTTS=2,\"开机\"\r\n"); - Power_r = Power_GetBatteryPercentage(); - - dev_id = ((g_com_map[DEV_ID]>>12)&0xf)*1000+((g_com_map[DEV_ID]>>8)&0xf)*100+((g_com_map[DEV_ID]>>4)&0xf)*10+(g_com_map[DEV_ID]&0xf); - Open_PJ = sprintf(TTS_Open, "设备编号%d剩余电量百分之%d",dev_id, Power_r); - TTS_Play((HIDO_UINT8 *)TTS_Open, strlen(TTS_Open)); -#endif + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); break; } case HIDO_AT_EVENT_OK: - case AIR780E_EVENT_DELAY: + case HIDO_AT_EVENT_ERROR: case HIDO_AT_EVENT_TIMEOUT: { HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); @@ -443,84 +312,26 @@ *******************************************************************************/ HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdTest, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) { -#define USE_115200 -//#define USE_921600 - static HIDO_UINT32 l_u32ReadyCnt = 0; - static HIDO_UINT32 l_u32TimeoutCnt = 0; - static HIDO_UINT32 l_u32BaudRate = 0; - static HIDO_BOOL l_bConfigBaudRate = HIDO_FALSE; + 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: { -#ifdef USE_115200 - l_u32BaudRate = 115200; -#else - l_u32BaudRate = 921600; -#endif - - Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); - - l_bConfigBaudRate = HIDO_FALSE; - 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: { - if (HIDO_TRUE == l_bConfigBaudRate) - { -#ifdef USE_115200 - l_u32BaudRate = 115200; -#else - l_u32BaudRate = 921600; -#endif - Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); - - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); - break; - } - - l_u32TimeoutCnt = 0; - l_u32ReadyCnt++; - if (l_u32ReadyCnt >= 1) - { -#ifdef USE_115200 - if (921600 == l_u32BaudRate) -#else - if (115200 == l_u32BaudRate) -#endif - { - l_bConfigBaudRate = HIDO_TRUE; -#ifdef USE_115200 - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=115200;&W\r\n"); -#else - HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=921600;&W\r\n"); -#endif - - } - else - { - /* 上电成功 */ - 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; } @@ -529,58 +340,14 @@ break; } case HIDO_AT_EVENT_TIMEOUT: - { - l_u32TimeoutCnt++; - l_u32ReadyCnt = 0; - - if (5 == l_u32TimeoutCnt) - { -#ifdef USE_115200 - l_u32BaudRate = 921600; -#else - l_u32BaudRate = 115200; -#endif - Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); - - HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, - AIR780E_EVENT_DELAY); - } - else if (l_u32TimeoutCnt > 10) - { - 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: - { - if (HIDO_TRUE == l_bConfigBaudRate) - { - /* 上电成功 */ - Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); - break; - } - else - { - 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: @@ -601,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; @@ -610,7 +376,6 @@ { case HIDO_EVENT_ENTRY: { - bReady = HIDO_FALSE; u32RetryCnt = 0; HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); break; @@ -623,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; } @@ -636,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: @@ -711,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 }, }; @@ -1004,7 +746,7 @@ l_u32Cnt++; } - if (l_u32ReadyCnt >= 3) + if (l_u32ReadyCnt >= 1) { HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPInit), HIDO_NULL); } @@ -1107,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(); @@ -1173,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))) { @@ -1213,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: @@ -1760,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