¶Ô±ÈÐÂÎļþ |
| | |
| | | /******************************************************************************* |
| | | * File Name : AIR780EFSM.c |
| | | * Description : |
| | | * Created on : 2018å¹´5æ22æ¥ |
| | | * Author : www.hido-studio.com |
| | | *******************************************************************************/ |
| | | |
| | | /******************************************************************************* |
| | | * Include Files * |
| | | *******************************************************************************/ |
| | | #include "AIR780EFSM.h" |
| | | |
| | | #include "string.h" |
| | | #include "Module.h" |
| | | #include "Socket.h" |
| | | #include "Module.h" |
| | | #include "AIR780ECSQ.h" |
| | | #include "AIR780EDriver.h" |
| | | #include "AIR780ESocket.h" |
| | | #include "HIDO_FSM.h" |
| | | #include "HIDO_Timer.h" |
| | | #include "HIDO_Util.h" |
| | | #include "HIDO_Debug.h" |
| | | #include "ATConfig.h" |
| | | #include "UART.h" |
| | | #include "Module.h" |
| | | |
| | | /******************************************************************************* |
| | | * Macro * |
| | | *******************************************************************************/ |
| | | #define TTS_SPEED "-10000" |
| | | #define TTS_VOLUME "-20000" |
| | | |
| | | /******************************************************************************* |
| | | * Type Definition * |
| | | *******************************************************************************/ |
| | | |
| | | /******************************************************************************* |
| | | * Global Variable * |
| | | *******************************************************************************/ |
| | | HIDO_FSM_DECLARE_IMPLEMENT(AIR780E); |
| | | HIDO_FSM_DETACHED_STATE(AIR780ERunATCmd) |
| | | HIDO_FSM_DETACHED_STATE(AIR780ECloseWireless) |
| | | HIDO_FSM_DETACHED_STATE(AIR780EOpenWireless) |
| | | |
| | | /******************************************************************************* |
| | | * Local Variable * |
| | | *******************************************************************************/ |
| | | static HIDO_BOOL l_bDeact = HIDO_FALSE; |
| | | static HIDO_UINT32 l_u32IPCheckTick = 0; |
| | | //static HIDO_UINT32 l_u32CSQGetTick = 0; |
| | | static HIDO_StateArgStruct l_stStateArg; |
| | | |
| | | /******************************************************************************* |
| | | * Local Function Declaration * |
| | | *******************************************************************************/ |
| | | |
| | | /******************************************************************************* |
| | | * Local Function * |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice); |
| | | static HIDO_INT32 AIR780E_PollOnIPReady(HIDO_ATLiteDeviceStruct *_pstATDevice); |
| | | |
| | | /******************************************************************************* |
| | | * Global Function * |
| | | *******************************************************************************/ |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780E |
| | | * Parent State : None |
| | | * Description : AIR780Eä¸»ç¶æ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780E, HIDO_NULL, HIDO_FSM_STATE(AIR780EPowerOn)) |
| | | { |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_RECEIVE: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | HIDO_UINT32 u32ID = 0; |
| | | HIDO_UINT8 *pu8Data = HIDO_NULL; |
| | | HIDO_UINT32 u32Len = 0; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+RECEIVE,%d,%d:\r\n%e", &u32ID, &u32Len, &pu8Data) |
| | | != 3) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | Socket_RecvData(u32ID, pu8Data, u32Len); |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EInit |
| | | * Parent State : AIR780E |
| | | * Description : åå§åä¸»ç¶æ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EInit, HIDO_FSM_STATE(AIR780E), HIDO_FSM_STATE(AIR780EPowerOn)) |
| | | { |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | /* ATå½ä»¤ç¸åºè¶
æ¶,éæ°åå§å */ |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EPowerOff |
| | | * Parent State : AIR780EInit |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EPowerOff, HIDO_FSM_STATE(AIR780E), HIDO_NULL) |
| | | { |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | AIR780EDriver_PowerOff(); |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_OFF); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_OFF); |
| | | } |
| | | |
| | | if(Module_NeedPowerOn(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EPowerOn |
| | | * Parent State : AIR780EInit |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EPowerOn, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | static enum |
| | | { |
| | | AIR780E_SUB_STATE_POWER_OFF, |
| | | AIR780E_SUB_STATE_POWER_ON, |
| | | } l_eAIR780ESubState; |
| | | |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | pstATDevice->m_u32LineLen = 0; |
| | | while (pstATDevice->m_fnReadLine(pstATDevice) == HIDO_OK) |
| | | { |
| | | ; |
| | | } |
| | | pstATDevice->m_u32LineLen = 0; |
| | | |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_OFF; |
| | | AIR780EDriver_PowerOff(); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | /* éåºåå§å */ |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | switch(l_eAIR780ESubState) |
| | | { |
| | | case AIR780E_SUB_STATE_POWER_OFF: |
| | | { |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_ON; |
| | | AIR780EDriver_PowerOn(); |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EATCmdTest |
| | | * Parent State : AIR780EInit |
| | | * Description : ATå½ä»¤æµè¯ç¶æ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdTest, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | { |
| | | /* ä¸çµæå */ |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); |
| | | |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_ERROR: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EWaitSimCardReady |
| | | * Parent State : AIR780EInit |
| | | * Description : çå¾
SIMå¡åå¤å®æ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EWaitSimCardReady, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | static HIDO_UINT32 u32RetryCnt = 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: |
| | | { |
| | | u32RetryCnt = 0; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdInit), HIDO_NULL); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_ERROR: |
| | | { |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), |
| | | _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | 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); |
| | | } |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); |
| | | |
| | | break; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EATCmdInit |
| | | * Parent State : AIR780EInit |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdInit, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | static HIDO_UINT32 l_u32CmdIndex = 0; |
| | | static HIDO_UINT32 l_u32RetryCnt = 0; |
| | | |
| | | const ST_ATCmd astInitCmdList[] = |
| | | { |
| | | { "AT+CGSN\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, |
| | | { "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 }, |
| | | }; |
| | | |
| | | 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_u32CmdIndex = 0; |
| | | l_u32RetryCnt = 0; |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); |
| | | l_u32RetryCnt++; |
| | | |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case HIDO_AT_EVENT_ERROR: |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | if(HIDO_AT_EVENT_TIMEOUT == _u32Event) |
| | | { |
| | | if(astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_TIMEOUT) |
| | | { |
| | | l_u32RetryCnt = 0; |
| | | l_u32CmdIndex++; |
| | | if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | if (astInitCmdList[l_u32CmdIndex].m_u32Result |
| | | & (HIDO_AT_EVENT_OK == _u32Event ? AT_CMD_RESULT_OK : AT_CMD_RESULT_ERROR)) |
| | | { |
| | | l_u32RetryCnt = 0; |
| | | l_u32CmdIndex++; |
| | | if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | l_u32RetryCnt++; |
| | | if (l_u32RetryCnt >= 3) |
| | | { |
| | | /* éè¯è¶
é */ |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | /* 䏿¯æå¾
çç»æï¼10å忬¡å°è¯ */ |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, |
| | | AIR780E_EVENT_DELAY); |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); |
| | | 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: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | switch(l_u32CmdIndex) |
| | | { |
| | | case 0: |
| | | { |
| | | Module_SetIMEI((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); |
| | | break; |
| | | } |
| | | case 1: |
| | | { |
| | | Module_SetIMSI((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); |
| | | break; |
| | | } |
| | | case 2: |
| | | { |
| | | Module_SetCCID((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); |
| | | |
| | | break; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EIdle |
| | | * Parent State : AIR780E |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EIdle, HIDO_FSM_STATE(AIR780E), HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | AIR780E_Poll(pstATDevice); |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EReady |
| | | * Parent State : AIR780E |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EReady, HIDO_FSM_STATE(AIR780E), HIDO_FSM_STATE(AIR780ESearchingNetwork)) |
| | | { |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780ESearchingNetwork |
| | | * Parent State : AIR780E |
| | | * Description : æ¥æ¾ç½ç» |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780ESearchingNetwork, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL) |
| | | { |
| | | static enum |
| | | { |
| | | AIR780E_SUB_STATE_CREG, |
| | | AIR780E_SUB_STATE_CGREG, |
| | | } l_eAIR780ESubState; |
| | | |
| | | static HIDO_UINT32 l_u32RespCode = 0; |
| | | static HIDO_UINT32 l_u32Cnt = 0; |
| | | static HIDO_UINT32 l_u32ReadyCnt = 0; |
| | | static HIDO_BOOL l_bATBusy = HIDO_FALSE; |
| | | |
| | | 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_eAIR780ESubState = AIR780E_SUB_STATE_CREG; |
| | | l_u32Cnt = 0; |
| | | l_u32RespCode = 0; |
| | | l_bATBusy = HIDO_TRUE; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CREG?\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | { |
| | | if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) |
| | | { |
| | | l_bATBusy = HIDO_FALSE; |
| | | |
| | | if (1 == l_u32RespCode || 5 == l_u32RespCode) |
| | | { |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_CGREG; |
| | | l_u32Cnt = 0; |
| | | l_u32RespCode = 0; |
| | | l_bATBusy = HIDO_TRUE; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGREG?\r\n"); |
| | | } |
| | | else |
| | | { |
| | | l_u32Cnt++; |
| | | |
| | | if (l_u32Cnt > 100) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(2), _pstFSM, |
| | | AIR780E_EVENT_DELAY); |
| | | } |
| | | } |
| | | } |
| | | else if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) |
| | | { |
| | | l_bATBusy = HIDO_FALSE; |
| | | |
| | | if (1 == l_u32RespCode || 5 == l_u32RespCode) |
| | | { |
| | | l_u32ReadyCnt++; |
| | | } |
| | | else |
| | | { |
| | | l_u32ReadyCnt = 0; |
| | | l_u32Cnt++; |
| | | } |
| | | |
| | | if (l_u32ReadyCnt >= 1) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPInit), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(2), _pstFSM, |
| | | AIR780E_EVENT_DELAY); |
| | | } |
| | | |
| | | if (l_u32Cnt > 100) |
| | | { |
| | | /* TODOç½ç»åºé */ |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_CREG: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) |
| | | { |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CREG: %*,%d", |
| | | &l_u32RespCode) != 2) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_CGREG: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) |
| | | { |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CGREG: %*,%d", |
| | | &l_u32RespCode) != 2) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) |
| | | { |
| | | l_u32RespCode = 0; |
| | | l_bATBusy = HIDO_TRUE; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CREG?\r\n"); |
| | | } |
| | | else if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) |
| | | { |
| | | l_u32RespCode = 0; |
| | | l_bATBusy = HIDO_TRUE; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGREG?\r\n"); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | if (HIDO_FALSE == l_bATBusy) |
| | | { |
| | | AIR780E_Poll(pstATDevice); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EIPInit |
| | | * Parent State : AIR780E |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EIPInit, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL) |
| | | { |
| | | static HIDO_UINT32 l_u32CmdIndex = 0; |
| | | static HIDO_UINT32 l_u32RetryCnt = 0; |
| | | |
| | | HIDO_CHAR *pcIMSI = HIDO_NULL; |
| | | HIDO_CHAR acAPN[32] = { 0 }; |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *) pstATDevice->m_pUserData)->m_u32FSMTimerID; |
| | | |
| | | const ST_ATCmd astInitCmdList[] = |
| | | { |
| | | { "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+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 }, |
| | | }; |
| | | |
| | | pcIMSI = Module_GetIMSI(); |
| | | if(strncmp(pcIMSI, "46000", 5) == 0 || strncmp(pcIMSI, "46002", 5) == 0) |
| | | { |
| | | HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CMNET"); |
| | | } |
| | | else if(strncmp(pcIMSI, "46001", 5) == 0) |
| | | { |
| | | HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "UNINET"); |
| | | } |
| | | else if(strncmp(pcIMSI, "46006", 5) == 0) |
| | | { |
| | | HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CMNET"); |
| | | } |
| | | else if(strncmp(pcIMSI, "46003", 5) == 0) |
| | | { |
| | | HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CTNET"); |
| | | } |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | l_u32CmdIndex = 0; |
| | | l_u32RetryCnt = 0; |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); |
| | | l_u32RetryCnt++; |
| | | |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case HIDO_AT_EVENT_ERROR: |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | if(HIDO_AT_EVENT_TIMEOUT == _u32Event) |
| | | { |
| | | if(astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_TIMEOUT) |
| | | { |
| | | l_u32RetryCnt = 0; |
| | | l_u32CmdIndex++; |
| | | if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | 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))) |
| | | { |
| | | l_u32RetryCnt = 0; |
| | | l_u32CmdIndex++; |
| | | if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | l_u32RetryCnt++; |
| | | if (l_u32RetryCnt >= 3) |
| | | { |
| | | /* éè¯è¶
é */ |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780E), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | /* 䏿¯æå¾
çç»æï¼10å忬¡å°è¯ */ |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, |
| | | AIR780E_EVENT_DELAY); |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); |
| | | break; |
| | | } |
| | | 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: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EIPReady |
| | | * Parent State : AIR780E |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EIPReady, HIDO_FSM_STATE(AIR780EReady), HIDO_FSM_STATE(AIR780EIPPoll)) |
| | | { |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | Socket_ClosedAll(); |
| | | #ifdef __AIR780E_MQTT__ |
| | | MQTT_ClosedAll(); |
| | | #endif |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_CLOSE: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | HIDO_UINT32 u32ID = 0; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QIURC: \"closed\",%d\r\n", &u32ID) != 1) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | Socket_OnClosed(u32ID); |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_PDPDEACT: |
| | | { |
| | | l_bDeact = HIDO_TRUE; |
| | | break; |
| | | } |
| | | #ifdef __AIR780E_MQTT__ |
| | | case AIR780E_EVENT_QMTSTAT: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | HIDO_UINT32 u32Err = 0; |
| | | HIDO_UINT32 u32ClientID = 0; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QMTSTAT: %d,%d\r\n", |
| | | &u32ClientID, &u32Err) != 2) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | if(u32Err != 0) |
| | | { |
| | | MQTT_OnClosed(u32ClientID); |
| | | |
| | | break; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_QMTPUBEX: |
| | | { |
| | | AIR780EMQTT_SendAck((HIDO_DataStruct *) _pArg); |
| | | |
| | | break; |
| | | } |
| | | #endif |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EIPPoll |
| | | * Parent State : AIR780EIPReady |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EIPPoll, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |
| | | { |
| | | if (HIDO_TRUE == l_bDeact) |
| | | { |
| | | l_bDeact = HIDO_FALSE; |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); |
| | | break; |
| | | } |
| | | |
| | | if(AIR780E_PollOnIPReady(pstATDevice) == HIDO_OK) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EIPCheck |
| | | * Parent State : AIR780EIPReady |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EIPCheck, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) |
| | | { |
| | | static HIDO_UINT32 l_u32CGATT = 0; |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | l_u32CGATT = 0; |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGATT?\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | { |
| | | if (1 == l_u32CGATT) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_CGATT: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CGATT: %d", &l_u32CGATT) == 1) |
| | | { |
| | | |
| | | } |
| | | |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780ERunATCmd |
| | | * Parent State : AIR780EReady |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780ERunATCmd, HIDO_NULL, HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "%s\r\n", Module_GetRunATCmd()); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case HIDO_AT_EVENT_ERROR: |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | Module_RunATCmdResult((HIDO_DataStruct *)_pArg); |
| | | HIDO_FSMStateChange(_pstFSM, l_stStateArg.m_pstAfterState, HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780ERunATCmd |
| | | * Parent State : AIR780EReady |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780ECloseWireless, HIDO_NULL, HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CFUN=0\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case HIDO_AT_EVENT_ERROR: |
| | | { |
| | | Module_PowerEvent(MODULE_GSM, MODULE_STATE_POWER_OFF); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : OpenWireless |
| | | * Parent State : AIR780EReady |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780EOpenWireless, HIDO_NULL, HIDO_NULL) |
| | | { |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CFUN=1\r\n"); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case HIDO_AT_EVENT_ERROR: |
| | | { |
| | | Module_PowerEvent(MODULE_GSM, MODULE_STATE_POWER_ON); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_PowerPoll |
| | | * Description : çµæºå¤çäºä»¶ç轮询 |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_PowerPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | if(Module_NeedPowerOn(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); |
| | | } |
| | | |
| | | if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) |
| | | { |
| | | HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_RunATCmdPoll |
| | | * Description : è¿è¡ç¨æ·ATå½ä»¤å¤ç轮询 |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_RunATCmdPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | if(Module_RunATCmdEnable() == HIDO_TRUE) |
| | | { |
| | | l_stStateArg.m_pArg = HIDO_NULL; |
| | | l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; |
| | | HIDO_FSM_DETACHED_STATE_SETTLE(AIR780ERunATCmd, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); |
| | | HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780ERunATCmd), HIDO_NULL); |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_CloseWirelessPoll |
| | | * Description : å
³éæ çº¿æ°æ®è½®è¯¢ |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_CloseWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | if(Module_NeedPowerOff(MODULE_GSM) == HIDO_TRUE) |
| | | { |
| | | l_stStateArg.m_pArg = HIDO_NULL; |
| | | l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; |
| | | HIDO_FSM_DETACHED_STATE_SETTLE(AIR780ECloseWireless, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); |
| | | HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780ECloseWireless), HIDO_NULL); |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_OpenWirelessPoll |
| | | * Description : æå¼æ çº¿æ°æ®è½®è¯¢ |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_OpenWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | if(Module_NeedPowerOn(MODULE_GSM) == HIDO_TRUE) |
| | | { |
| | | l_stStateArg.m_pArg = HIDO_NULL; |
| | | l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; |
| | | HIDO_FSM_DETACHED_STATE_SETTLE(AIR780EOpenWireless, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); |
| | | HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780EOpenWireless), HIDO_NULL); |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_Poll |
| | | * Description : å¨éIPReadyç¶ææ¶ç轮询å¤ç |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | /* Power */ |
| | | if(AIR780E_PowerPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | #ifdef __AIR780E_GNSS__ |
| | | /* GNSS */ |
| | | if(AIR780EGNSS_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | #if 0 |
| | | /* Audio */ |
| | | if (AIR780EAudio_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | /* CSQ */ |
| | | if (AIR780ECSQ_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | /* RunATCmd */ |
| | | if (AIR780E_RunATCmdPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | /* GSM */ |
| | | if (AIR780E_CloseWirelessPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | if (AIR780E_OpenWirelessPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | #ifdef __AIR780E_FILE__ |
| | | if (AIR780EFile_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_PollOnIPReady |
| | | * Description : å¨IPReadyç¶ææ¶ç轮询å¤ç |
| | | * Input : _pstATDevice ATè®¾å¤æè¿° |
| | | * Output : None |
| | | * Return : HIDO_OK æå, HIDO_ERR 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 AIR780E_PollOnIPReady(HIDO_ATLiteDeviceStruct *_pstATDevice) |
| | | { |
| | | HIDO_UINT32 u32CurTick = HIDO_TimerGetTick(); |
| | | |
| | | /* Power */ |
| | | if (AIR780E_PowerPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | #ifdef __AIR780E_GNSS__ |
| | | /* GNSS */ |
| | | if(AIR780EGNSS_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | #if 0 |
| | | /* Audio */ |
| | | if (AIR780EAudio_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | /* Socket */ |
| | | if (AIR780ESocket_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | #ifdef __AIR780E_MQTT__ |
| | | /* MQTT */ |
| | | if (AIR780EMQTT_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | #ifdef __AIR780E_HTTP__ |
| | | /* HTTP */ |
| | | if (AIR780EHTTP_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | /* CSQ */ |
| | | if (AIR780ECSQ_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | 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) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | /* GSM */ |
| | | if (AIR780E_CloseWirelessPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | if (AIR780E_OpenWirelessPoll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | #ifdef __AIR780E_FILE__ |
| | | if (AIR780EFile_Poll(_pstATDevice) == HIDO_OK) |
| | | { |
| | | return HIDO_OK; |
| | | } |
| | | #endif |
| | | |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_IsIPReady |
| | | * Description : å¤æç¶ææºæ¯å¦å¤å¨AIR780EIPReadyç¶æ |
| | | * Input : None |
| | | * Output : None |
| | | * Return : HIDO_TRUE æ¯, HIDO_FALSE å¦ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | HIDO_BOOL AIR780E_IsIPReady(void) |
| | | { |
| | | const HIDO_StateStruct *pstTmpState = HIDO_FSM(AIR780E)->m_pstCurrentState; |
| | | |
| | | while(pstTmpState != HIDO_NULL) |
| | | { |
| | | if(pstTmpState == HIDO_FSM_STATE(AIR780EIPReady)) |
| | | { |
| | | return HIDO_TRUE; |
| | | } |
| | | |
| | | pstTmpState = pstTmpState->m_pstParent; |
| | | } |
| | | |
| | | return HIDO_FALSE; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : AIR780E_IsIPIdle |
| | | * Description : å¤æç¶ææºæ¯å¦å¤å¨AIR780EIPPollç¶æ |
| | | * Input : None |
| | | * Output : None |
| | | * Return : HIDO_TRUE æ¯, HIDO_FALSE å¦ |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018å¹´5æ22æ¥ |
| | | *******************************************************************************/ |
| | | HIDO_BOOL AIR780E_IsIPIdle(void) |
| | | { |
| | | const HIDO_StateStruct *pstTmpState = HIDO_FSM(AIR780E)->m_pstCurrentState; |
| | | |
| | | if(pstTmpState == HIDO_FSM_STATE(AIR780EIPPoll)) |
| | | { |
| | | return HIDO_TRUE; |
| | | } |
| | | |
| | | return HIDO_FALSE; |
| | | } |