chen
2025-05-16 4cdc4b3d488e15b1d6572bdcd61a2ce92d0c8c9b
keil/include/components/internet/src/AIR780EDriver.c
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,637 @@
/*******************************************************************************
 * File Name         : AIR780EDriver.c
 * Description       :
 * Created on        : 2018å¹´5月22日
 * Author            : æœé”®
 *******************************************************************************/
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "AIR780EDriver.h"
#include "AIR780EFSM.h"
#include "string.h"
#include "stdarg.h"
#include "mk_gpio.h"
#include "UART.h"
#include "HIDO_Timer.h"
#include "HIDO_Util.h"
#include "HIDO_Debug.h"
#include "HIDO_Log.h"
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
/* ä¸²å£ç›¸å…³ */
#define AIR780E_UART_TX_BUF_SIZE                              (100)                  /* ä¸²å£æœªä½¿ç”¨DMA模式,不需要buff */
#define AIR780E_UART_RX_BUF_SIZE                              (1024)
#define AIR780E_UART_TX_QUEUE_MEMBER_CNT                      8                   /* ä¸²å£æœªä½¿ç”¨DMA模式,不需要 */
/* AT相关 */
#define AIR780E_AT_SEND_BUF_SIZE                              (128)         /* å‘送的单条AT指令的最大长度 */
#define AIR780E_AT_RECV_BUF_SIZE                              (128)         /* å•挑AT指令 */
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
/*******************************************************************************
 *                             Local Variable                                  *
 *******************************************************************************/
static HIDO_UINT8 l_au8AIR780EUartRxBuf[AIR780E_UART_RX_BUF_SIZE];
static HIDO_UINT8 l_au8AIR780EUartTxBuf[AIR780E_UART_TX_BUF_SIZE];
static HIDO_UINT8 l_au8ATSendBuf[AIR780E_AT_SEND_BUF_SIZE];
static HIDO_UINT8 l_au8ATRecvBuf[AIR780E_AT_RECV_BUF_SIZE];
static ST_AIR780EDriverData l_stDriverData;
static HIDO_ATLiteDeviceStruct l_stAIR780EDevice;
static HIDO_UINT32 l_u32ConnectLen = 0;
static const HIDO_ATLiteCmdSetStruct l_astATCmdSetList[] =
{
    { "OK", HIDO_AT_EVENT_OK },
    { "SHUT OK", HIDO_AT_EVENT_OK },
    { "+CME ERROR:", HIDO_AT_EVENT_ERROR },
    { "ERROR", HIDO_AT_EVENT_ERROR },
    { "+CREG:", AIR780E_EVENT_CREG },
    { "+CGREG:", AIR780E_EVENT_CGREG },
    { "+CGATT:", AIR780E_EVENT_CGATT },
    { "+CSQ:", AIR780E_EVENT_CSQ },
    { "+CIPGSMLOC:", AIR780E_EVENT_LBS_LOCATION },
    { "+CPIN:", AIR780E_EVENT_CPIN },
    { ">", AIR780E_EVENT_ACK },
    { "+CMTI:", AIR780E_EVENT_NEW_SMS },
    { "+CMGR:", AIR780E_EVENT_READ_SMS },
    { "SEND OK", AIR780E_EVENT_SEND_OK },
    { "SEND FAIL", AIR780E_EVENT_SEND_FAIL },
    { "+QIOPEN:", AIR780E_EVENT_OPEN },
    { "+QIURC: \"recv\",", AIR780E_EVENT_NEW_IP_DATA },
    { "+QIURC: \"closed\",", AIR780E_EVENT_CLOSE },
    { "+QISEND:", AIR780E_EVENT_SEND },
    { "+QIRD:", AIR780E_EVENT_READ },
    { "CONNECT", AIR780E_EVENT_CONNECT },
    { "+QFLST:", AIR780E_EVENT_QFLST },
    { "+QFOPEN:", AIR780E_EVENT_QFOPEN },
    { "+QHTTPGET:", AIR780E_EVENT_QHTTPGET },
    { "+QHTTPPOST:", AIR780E_EVENT_QHTTPPOST },
    { "+QHTTPREAD:", AIR780E_EVENT_QHTTPREAD },
    { "+QHTTPREADFILE:", AIR780E_EVENT_QHTTPREADFILE },
    { "+QHTTPPOSTFILE:", AIR780E_EVENT_QHTTPPOSTFILE },
    { "+QGPSLOC:", AIR780E_EVENT_QGPSLOC },
    { "+CCLK:", AIR780E_EVENT_CCLK },
    { "+QGPSXTRADATA:", AIR780E_EVENT_QGPSXTRADATA },
    { "+QIURC: \"pdpdeact\"", AIR780E_EVENT_PDPDEACT },
    { "+QMTOPEN:", AIR780E_EVENT_QMTOPEN },
    { "+QMTCLOSE:", AIR780E_EVENT_QMTCLOSE },
    { "+QMTCONN:", AIR780E_EVENT_QMTCONN },
    { "+QMTDISC:", AIR780E_EVENT_QMTDISC },
    { "+QMTSUB:", AIR780E_EVENT_QMTSUB },
    { "+QMTUNS:", AIR780E_EVENT_QMTUNS },
    { "+QMTPUBEX:", AIR780E_EVENT_QMTPUBEX },
    { "+QMTRECV:", AIR780E_EVENT_QMTRECV },
    { "+QMTPING:", AIR780E_EVENT_QMTPING },
    { "+QMTSTAT:", AIR780E_EVENT_QMTSTAT },
    { "+CCID:", AIR780E_EVENT_CCID },
    { "RDY", AIR780E_EVENT_RDY },
    { "+CTTS:", AIR780E_EVENT_QTTS },
    { "+QLTONE:", AIR780E_EVENT_QLTONE },
    { "+RECEIVE,", AIR780E_EVENT_RECEIVE },
    { "0", AIR780E_EVENT_NUM_0 },
    { "1", AIR780E_EVENT_NUM_1 },
    { "2", AIR780E_EVENT_NUM_2 },
    { "3", AIR780E_EVENT_NUM_3 },
    { "4", AIR780E_EVENT_NUM_4 },
    { "5", AIR780E_EVENT_NUM_5 },
    { "6", AIR780E_EVENT_NUM_6 },
    { "7", AIR780E_EVENT_NUM_7 },
    { "8", AIR780E_EVENT_NUM_8 },
    { "9", AIR780E_EVENT_NUM_9 },
};
static const HIDO_CHAR * const l_apcEventName[AIR780E_EVENT_LAST]={
    HIDO_EVENT_ENTRY_NAME,
    HIDO_EVENT_EXIT_NAME,
    "HIDO_AT_EVENT_OK",
    "HIDO_AT_EVENT_ERROR",
    "HIDO_AT_EVENT_TIMEOUT",
    "HIDO_AT_EVENT_SEND_ERROR",
    "AIR780E_EVENT_OK",
    "AIR780E_EVENT_CREG",
    "AIR780E_EVENT_CGREG",
    "AIR780E_EVENT_CGATT",
    "AIR780E_EVENT_CSQ",
    "AIR780E_EVENT_LBS_LOCATION",
    "AIR780E_EVENT_CPIN",
    "AIR780E_EVENT_INIT_TIMEOUT",
    "AIR780E_EVENT_DELAY",
    "-AIR780E_EVENT_POLL",
    "AIR780E_EVENT_ACK",
    "AIR780E_EVENT_NEW_SMS",
    "AIR780E_EVENT_READ_SMS",
    "AIR780E_EVENT_SMS_DATA",
    "AIR780E_EVENT_NEW_IP_DATA",
    "AIR780E_EVENT_CCID",
    "AIR780E_EVENT_OPEN",
    "AIR780E_EVENT_SEND",
    "AIR780E_EVENT_SEND_OK",
    "AIR780E_EVENT_SEND_FAIL",
    "AIR780E_EVENT_CLOSE",
    "AIR780E_EVENT_READ",
    "AIR780E_EVENT_CONNECT",
    "AIR780E_EVENT_QFLST",
    "AIR780E_EVENT_QFOPEN",
    "AIR780E_EVENT_QHTTPGET",
    "AIR780E_EVENT_QHTTPPOST",
    "AIR780E_EVENT_QHTTPREAD",
    "AIR780E_EVENT_QHTTPREADFILE",
    "AIR780E_EVENT_QHTTPPOSTFILE",
    "AIR780E_EVENT_QGPSLOC",
    "AIR780E_EVENT_CCLK",
    "AIR780E_EVENT_QGPSXTRADATA",
    "AIR780E_EVENT_PDPDEACT",
    "AIR780E_EVENT_QMTOPEN",
    "AIR780E_EVENT_QMTCLOSE",
    "AIR780E_EVENT_QMTCONN",
    "AIR780E_EVENT_QMTDISC",
    "AIR780E_EVENT_QMTSUB",
    "AIR780E_EVENT_QMTUNS",
    "AIR780E_EVENT_QMTPUBEX",
    "AIR780E_EVENT_QMTRECV",
    "AIR780E_EVENT_QMTPING",
    "AIR780E_EVENT_QMTSTAT",
    "AIR780E_EVENT_RDY",
   "AIR780E_EVENT_QTTS",
    "AIR780E_EVENT_QLTONE",
    "AIR780E_EVENT_RECEIVE",
    "AIR780E_EVENT_NUM_0",
    "AIR780E_EVENT_NUM_1",
    "AIR780E_EVENT_NUM_2",
    "AIR780E_EVENT_NUM_3",
    "AIR780E_EVENT_NUM_4",
    "AIR780E_EVENT_NUM_5",
    "AIR780E_EVENT_NUM_6",
    "AIR780E_EVENT_NUM_7",
    "AIR780E_EVENT_NUM_8",
    "AIR780E_EVENT_NUM_9",
};
static enum IO_PIN_T l_stAIR780EPin[AIR780E_PIN_LAST];
/*******************************************************************************
 *                        Local Function Declaration                           *
 *******************************************************************************/
/*******************************************************************************
 *                             Local Function                                  *
 *******************************************************************************/
/*******************************************************************************
 * Function Name     : AIR780E_GetChar
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
static HIDO_INT32 AIR780E_GetChar(HIDO_ATLiteDeviceStruct *_pstATDevice, HIDO_CHAR *_pcRecvChar)
{
    return Uart_GetChar(UART_ID_4G, (HIDO_UINT8 *) _pcRecvChar);
}
/*******************************************************************************
 * Function Name     : AIR780E_ReadLine
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
uint8_t log_4g_enable_flag;
static HIDO_INT32 AIR780E_ReadLine(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
    static HIDO_UINT8 l_u8Mode = 0;
    static HIDO_UINT32 l_u32ExpectedLen = 0;
    static HIDO_UINT32 l_u32LastTick = 0;
    HIDO_CHAR cCh = 0;
    if ((HIDO_NULL == _pstATDevice) || (HIDO_NULL == _pstATDevice->m_fnGetc)
            || (HIDO_NULL == _pstATDevice->m_pcLineBuf) || (0 == _pstATDevice->m_u32LineBufSize))
    {
        return HIDO_ERR;
    }
    while (_pstATDevice->m_u32LineLen < _pstATDevice->m_u32LineBufSize - 1)
    {
        if (_pstATDevice->m_fnGetc(_pstATDevice, &cCh) != HIDO_OK)
        {
            return HIDO_ERR;
        }
        _pstATDevice->m_pcLineBuf[_pstATDevice->m_u32LineLen++] = cCh;
        _pstATDevice->m_pcLineBuf[_pstATDevice->m_u32LineLen] = '\0';
        /* +RECEIVE, */
        if (9 == _pstATDevice->m_u32LineLen && memcmp("+RECEIVE,", _pstATDevice->m_pcLineBuf, 9) == 0)
        {
            l_u8Mode = 1;
            l_u32LastTick = HIDO_TimerGetTick();
        }
        /* è¶…时检查,防止长时间处于IPDATA的状态 */
        if(((l_u8Mode == 1) || (l_u8Mode == 2) || (l_u8Mode == 3)) && (HIDO_TimerGetTick() - l_u32LastTick) > 1500)
        {
            break;
        }
        if(1 == l_u8Mode)
        {
            HIDO_CHAR *pcTmp = strstr(_pstATDevice->m_pcLineBuf, ":");
            if(pcTmp != HIDO_NULL)
            {
                HIDO_UINT32 u32ReqLen = 0;
                /* èŽ·å–çœŸå®žéœ€è¦æŽ¥æ”¶çš„é•¿åº¦ */
                if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pstATDevice->m_pcLineBuf, _pstATDevice->m_u32LineLen, "+RECEIVE,%*,%d:",
                         &u32ReqLen) != 2)
                {
                    break;
                }
                if(0 == u32ReqLen)
                {
                    break;
                }
                l_u32ExpectedLen = pcTmp - _pstATDevice->m_pcLineBuf + 3 + u32ReqLen;
                l_u8Mode = 10;
            }
        }
        else if(10 == l_u8Mode)
        {
            if(_pstATDevice->m_u32LineLen == l_u32ExpectedLen)
            {
                break;
            }
        }
        else
        {
            /* æ£€æŸ¥CR */
            if (AT_READ_CHAR_CR == cCh)
            {
                _pstATDevice->m_eLineReadFlag = AT_RAED_FLAG_GET_CR;
            }
            /* æ£€æŸ¥LF */
            else if (AT_READ_CHAR_LF == cCh)
            {
                if (AT_RAED_FLAG_GET_CR == _pstATDevice->m_eLineReadFlag)
                {
                    _pstATDevice->m_eLineReadFlag = AT_RAED_FLAG_GET_LF;
                }
            }
            if (AT_RAED_FLAG_GET_LF == _pstATDevice->m_eLineReadFlag)
            {
                if (2 == _pstATDevice->m_u32LineLen)
                {
                    _pstATDevice->m_u32LineLen = 0;
                    _pstATDevice->m_eLineReadFlag = AT_RAED_FLAG_NONE;
                }
                else
                {
                    _pstATDevice->m_eLineReadFlag = AT_RAED_FLAG_NONE;
                    if(l_u8Mode == 10)
                    {
                        l_u8Mode = 0;
                        _pstATDevice->m_u32LineLen = 0;
                        _pstATDevice->m_eLineReadFlag = AT_RAED_FLAG_NONE;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if (1 == _pstATDevice->m_u32LineLen && '>' == _pstATDevice->m_pcLineBuf[0])
            {
                break;
            }
        }
    }
    if(HIDO_UtilIsAsciiString((HIDO_UINT8 *)_pstATDevice->m_pcLineBuf, _pstATDevice->m_u32LineLen) == HIDO_TRUE)
    {
        if((_pstATDevice->m_u32LineLen > 0) && (_pstATDevice->m_pcLineBuf[_pstATDevice->m_u32LineLen - 1] == '\n'))
        {
               if(log_4g_enable_flag)
            LOG_INFO(TRACE_MODULE_APP, "[AT Recv] %s", _pstATDevice->m_pcLineBuf);//修改4G
            //HIDO_Debug( "[AT Recv] %s", _pstATDevice->m_pcLineBuf);
        }
        else
        {
                  if(log_4g_enable_flag)
            LOG_INFO(TRACE_MODULE_APP, "[AT Recv] %s\r\n", _pstATDevice->m_pcLineBuf);//修改4G
            //HIDO_Debug("[AT Recv] %s\r\n", _pstATDevice->m_pcLineBuf);
        }
    }
    l_u8Mode = 0;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780E_Output
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
static HIDO_INT32 AIR780E_Output(HIDO_ATLiteDeviceStruct *_pstATDevice, HIDO_UINT8 *_pu8Data,
        HIDO_UINT32 _u32Len)
{
   if(HIDO_UtilIsAsciiString(_pu8Data, _u32Len) == HIDO_TRUE)
   {
      if(_pu8Data[_u32Len] == '\0')
      {
          if((_u32Len > 0) && (_pu8Data[_u32Len - 1] == '\n'))
          {
              // HIDO_Debug("[AT Send] %s", _pu8Data);
               if(log_4g_enable_flag)
                LOG_INFO(TRACE_MODULE_APP, "[AT Send] %s", _pu8Data);//修改4G
          }
          else
          {
              // HIDO_Debug("[AT Send] %s\r\n", _pu8Data);
               if(log_4g_enable_flag)
                LOG_INFO(TRACE_MODULE_APP, "[AT Send] %s", _pu8Data);//修改4G
          }
      }
   }
    return Uart_Send(UART_ID_4G, _pu8Data, _u32Len);
}
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
/*******************************************************************************
 * Function Name     : AIR780E_PinRegister
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_PinRegister(E_AIR780EPin _ePin, HIDO_UINT16 _u16Pin)
{
    l_stAIR780EPin[_ePin] = _u16Pin;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780E_PowerOn
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_PowerOn(void)
{
    AIR780E_Reset();
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780E_PowerOff
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_PowerOff(void)
{
//    update_led_power_state();
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_PowerEnable
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_PWRKEYSet(void)
{
    gpio_pin_clr(l_stAIR780EPin[AIR780E_PIN_PWRKEY]);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_PowerEnable
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_PWRKEYReset(void)
{
    gpio_pin_set(l_stAIR780EPin[AIR780E_PIN_PWRKEY]);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_DebugOn
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_DebugOn(void)
{
    HIDO_FSM(AIR780E)->m_u16DbgFlag = HIDO_FSM_DBG_FLAG_ON;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_DebugOff
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_DebugOff(void)
{
    HIDO_FSM(AIR780E)->m_u16DbgFlag = HIDO_FSM_DBG_FLAG_OFF;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_SetConnectLen
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_SetConnectLen(HIDO_UINT32 _u32ConnectLen)
{
    l_u32ConnectLen = _u32ConnectLen;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_FSMDebug
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
extern uint8_t log_4g_enable_flag;
HIDO_INT32 AIR780EDriver_FSMDebug(HIDO_FSMStruct *_pstStateMachine, HIDO_INT32 _i32Level, HIDO_CHAR *_pcFmt, va_list _ap)
{
    HIDO_CHAR acBuff[384];
    vsnprintf(acBuff, sizeof(acBuff), _pcFmt, _ap);
  //  HIDO_Log(HIDO_LOG_LEVEL_DEBUG, "%s", acBuff);
    //HIDO_Debug(acBuff);
if(log_4g_enable_flag)
    LOG_INFO(TRACE_MODULE_APP, acBuff);//修改4G
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_Reset
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
HIDO_INT32 AIR780EDriver_Reset(void)
{
    HIDO_FSMEventExecute(HIDO_FSM(AIR780E), HIDO_AT_EVENT_TIMEOUT, HIDO_NULL);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : AIR780EDriver_Init
 * Description       :
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´5月22日
 *******************************************************************************/
void AIR780EUartInit(void)
{
 ST_UartInit stUartInit;
    /* ä¸²å£åˆå§‹åŒ– */
    stUartInit.m_eRxMode = UART_RX_MODE_INT;
    stUartInit.m_eTxMode = UART_TX_MODE_POLL;
    stUartInit.m_pu8RxBuf = l_au8AIR780EUartRxBuf;
    stUartInit.m_u32RxBufSize = AIR780E_UART_RX_BUF_SIZE;
    stUartInit.m_pu8TxBuf = l_au8AIR780EUartTxBuf;
    stUartInit.m_u32TxBufSize = AIR780E_UART_TX_BUF_SIZE;
    stUartInit.m_u32TxQueueMemberCnt = AIR780E_UART_TX_QUEUE_MEMBER_CNT;
    stUartInit.m_u32BaudRate = 9600;
    if(Uart_Init(UART_ID_4G, &stUartInit) != HIDO_OK)
    {
    }
}
HIDO_INT32 AIR780EDriver_Init(void)
{
    ST_UartInit stUartInit;
    /* ä¸²å£åˆå§‹åŒ– */
    stUartInit.m_eRxMode = UART_RX_MODE_INT;
    stUartInit.m_eTxMode = UART_TX_MODE_POLL;
    stUartInit.m_pu8RxBuf = l_au8AIR780EUartRxBuf;
    stUartInit.m_u32RxBufSize = AIR780E_UART_RX_BUF_SIZE;
    stUartInit.m_pu8TxBuf = l_au8AIR780EUartTxBuf;
    stUartInit.m_u32TxBufSize = AIR780E_UART_TX_BUF_SIZE;
    stUartInit.m_u32TxQueueMemberCnt = AIR780E_UART_TX_QUEUE_MEMBER_CNT;
    stUartInit.m_u32BaudRate = 9600;
    if(Uart_Init(UART_ID_4G, &stUartInit) != HIDO_OK)
    {
        return HIDO_ERR;
    }
    /* å®šæ—¶å™¨åˆå§‹åŒ– */
    if (HIDO_TimerCreate(&l_stDriverData.m_u32FSMTimerID) != HIDO_OK)
    {
        return HIDO_ERR;
    }
    /* AT驱动初始化 */
    HIDO_ATLiteDeviceInitStruct stATInit;
    stATInit.m_pstFSM = HIDO_FSM(AIR780E);
    stATInit.m_pstAtSets = l_astATCmdSetList;
    stATInit.m_u32AtSetsCount = HIDO_ARRARY_COUNT(l_astATCmdSetList);
    stATInit.m_fnGetc = AIR780E_GetChar;
    stATInit.m_fnReadLine = AIR780E_ReadLine;
    stATInit.m_fnOutput = AIR780E_Output;
    stATInit.m_pcSendBuf = (HIDO_CHAR *) l_au8ATSendBuf;
    stATInit.m_u32SendBufSize = HIDO_ARRARY_COUNT(l_au8ATSendBuf);
    stATInit.m_pcLineBuf = (HIDO_CHAR *) l_au8ATRecvBuf;
    stATInit.m_u32LineBufSize = HIDO_ARRARY_COUNT(l_au8ATRecvBuf);
    stATInit.m_pUserData = &l_stDriverData;
    /* AT设备初始化 */
    if (HIDO_ATLiteDeviceInit(&l_stAIR780EDevice, &stATInit) != HIDO_OK)
    {
        return HIDO_ERR;
    }
    /* çŠ¶æ€æœºåˆå§‹åŒ– */
    HIDO_FSMRegister(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780E), "AIR780E", l_apcEventName, &l_stAIR780EDevice,
            HIDO_FSM_DBG_FLAG_ON);
    HIDO_FSMRegisterDebugFunc(HIDO_FSM(AIR780E), AIR780EDriver_FSMDebug);
    return HIDO_OK;
}