yincheng.zhong
2024-08-21 903a245a364052d5ba612e3e53b685fca26a09d4
keil/include/components/internet/src/AIR780EFSM.c
@@ -106,52 +106,6 @@
         Socket_OnRecv(u32ID);
            break;
        }
#ifdef TTS
        case AIR780E_EVENT_QTTS:
        {
            HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
            if (strcmp((HIDO_CHAR *) pstData->m_pData, "+CTTS:0\r\n") != 0)
            {
                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)
            {
                break;
            }
            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 +207,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 +225,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,25 +243,10 @@
                {
                    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(10), _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);
                    break;
@@ -319,108 +256,6 @@
            break;
        }
        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
            break;
        }
        case HIDO_AT_EVENT_OK:
        case AIR780E_EVENT_DELAY:
        case HIDO_AT_EVENT_TIMEOUT:
        {
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL);
            break;
@@ -443,12 +278,8 @@
 *******************************************************************************/
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;
    HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
    HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID;
@@ -456,15 +287,6 @@
    {
        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);
@@ -478,43 +300,13 @@
        }
        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);
                }
                /* 上电成功 */
                Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON);
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL);
            }
            else
            {
@@ -535,18 +327,6 @@
            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
@@ -559,17 +339,7 @@
        }
        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");
            }
            HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n");
            break;
        }
        case AIR780E_EVENT_POLL: