chen
2025-05-16 4cdc4b3d488e15b1d6572bdcd61a2ce92d0c8c9b
keil/include/components/internet/src/Module.c
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,556 @@
/*******************************************************************************
 * File Name         : Module.c
 * Description       :
 * Created on        : 2018å¹´8月5日
 * Author            : www.hido-studio.com
 *******************************************************************************/
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "Module.h"
#include "string.h"
#include "HIDO_Util.h"
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
#define FUNC_CALL(fn, ...) \
if((fn) != HIDO_NULL) \
    (fn)(__VA_ARGS__)
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
/*******************************************************************************
 *                             Local Variable                                  *
 *******************************************************************************/
static HIDO_CHAR l_acIMEI[MODULE_IMEI_SIZE];
static HIDO_CHAR l_acIMSI[MODULE_IMSI_SIZE];
static HIDO_CHAR l_acCCID[MODULE_CCID_SIZE];
/* CSQ */
static HIDO_UINT32 l_u32SignalIntensity = 0;
static HIDO_VOID *l_pSignalIntensityArg = HIDO_NULL;
static FN_SignalIntensityCallback l_fnSignalIntensityCallback = HIDO_NULL;
static HIDO_BOOL l_bSignalIntensityNeedRequest = HIDO_FALSE;
/* LBS */
static ST_LBSLocation l_stLBSLocation;
static HIDO_VOID *l_pLBSLocationArg = HIDO_NULL;
static FN_LBSLocationCallback l_fnLBSLocationCallback = HIDO_NULL;
static HIDO_BOOL l_bLBSLocationNeedRequest = HIDO_FALSE;
/* Power */
static FN_PowerEventCallback l_fnPowerEventCallback = HIDO_NULL;
static HIDO_VOID *l_pPowerEventArg = HIDO_NULL;
static HIDO_BOOL l_abModuleNeedSleep[MODULE_ALL] = { HIDO_FALSE };
static HIDO_BOOL l_abModuleNeedWakeUp[MODULE_ALL] = { HIDO_FALSE };
static HIDO_BOOL l_abModuleNeedPowerOff[MODULE_ALL] = { HIDO_FALSE };
static HIDO_BOOL l_abModuleNeedPowerOn[MODULE_ALL] = { HIDO_FALSE };
static HIDO_BOOL l_bRunATCmd = HIDO_FALSE;
static HIDO_CHAR l_acRunATCmdBuff[128];
/*******************************************************************************
 *                        Local Function Declaration                           *
 *******************************************************************************/
/*******************************************************************************
 *                             Local Function                                  *
 *******************************************************************************/
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
/*******************************************************************************
 * Function Name     : Module_SignalIntensityResult
 * Description       : ä¿¡å·å¼ºåº¦å¼‚步结果通知
 * Input             : _u32SignalIntensity                ä¿¡å·å¼ºåº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_SignalIntensityResult(HIDO_UINT32 _u32SignalIntensity)
{
    if(l_fnSignalIntensityCallback != HIDO_NULL)
    {
        l_fnSignalIntensityCallback(_u32SignalIntensity, l_pSignalIntensityArg);
    }
    l_u32SignalIntensity = _u32SignalIntensity;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_GetSignalIntensityAsync
 * Description       : ä¿¡å·å¼ºåº¦å¼‚步获取
 * Input             : _fnGetSignalIntensity              å¼‚步通知回调
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_GetSignalIntensityAsync(FN_SignalIntensityCallback _fnGetSignalIntensity, HIDO_VOID *_pArg)
{
    l_fnSignalIntensityCallback = _fnGetSignalIntensity;
    l_pSignalIntensityArg = _pArg;
    l_bSignalIntensityNeedRequest = HIDO_TRUE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_SignalIntensityNeedRequest
 * Description       : æ˜¯å¦éœ€è¦å¼‚步获取信号强度
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_SignalIntensityNeedRequest(void)
{
    HIDO_BOOL bState = l_bSignalIntensityNeedRequest;
    l_bSignalIntensityNeedRequest = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_LBSLocationResult
 * Description       :
 * Input             : _u32SignalIntensity                ä¿¡å·å¼ºåº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_LBSLocationResult(ST_LBSLocation *_pstLBSLocation)
{
    if(l_fnLBSLocationCallback != HIDO_NULL)
    {
        l_fnLBSLocationCallback(_pstLBSLocation, l_pLBSLocationArg);
    }
    memcpy(&l_stLBSLocation, _pstLBSLocation, sizeof(ST_LBSLocation));
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_GetLBSLocationAsync
 * Description       :
 * Input             : _fnGetSignalIntensity              å¼‚步通知回调
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_GetLBSLocationAsync(FN_LBSLocationCallback _fnGetLBSLocation, HIDO_VOID *_pArg)
{
    l_fnLBSLocationCallback = _fnGetLBSLocation;
    l_pLBSLocationArg = _pArg;
    l_bLBSLocationNeedRequest = HIDO_TRUE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_LBSLocationNeedRequest
 * Description       :
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_LBSLocationNeedRequest(void)
{
    HIDO_BOOL bState = l_bLBSLocationNeedRequest;
    l_bLBSLocationNeedRequest = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_GetIMEI
 * Description       : èŽ·å–IMEI接口
 * Input             : None
 * Output            : _acIMEI                       IMEI
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_CHAR *Module_GetIMEI(HIDO_VOID)
{
    return l_acIMEI;
}
/*******************************************************************************
 * Function Name     : Module_SetIMEI
 * Description       : è®¾ç½®IMEI接口
 * Input             : _pcIMEI                       IMEI
 *                     _u32IMEILen                   é•¿åº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_SetIMEI(HIDO_CHAR *_pcIMEI, HIDO_UINT32 _u32IMEILen)
{
    if(_u32IMEILen < 2)
    {
        return HIDO_ERR;
    }
    _u32IMEILen -= 2;
    if(_u32IMEILen < MODULE_IMEI_SIZE)
    {
        memcpy(l_acIMEI, _pcIMEI, _u32IMEILen);
        l_acIMEI[_u32IMEILen] = '\0';
    }
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_GetIMSI
 * Description       : è®¾ç½®IMEI接口
 * Input             : _pcIMSI                       IMSI
 *                     _u32IMSILen                   é•¿åº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_CHAR *Module_GetIMSI(HIDO_VOID)
{
    return l_acIMSI;
}
/*******************************************************************************
 * Function Name     : Module_SetIMSI
 * Description       : è®¾ç½®IMSI接口
 * Input             : _pcIMSI                       IMSI
 *                     _u32IMSILen                   é•¿åº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_SetIMSI(HIDO_CHAR *_pcIMSI, HIDO_UINT32 _u32IMSILen)
{
    if(_u32IMSILen < 2)
    {
        return HIDO_ERR;
    }
    _u32IMSILen -= 2;
    if(_u32IMSILen < MODULE_IMSI_SIZE)
    {
        memcpy(l_acIMSI, _pcIMSI, _u32IMSILen);
        l_acIMSI[_u32IMSILen] = '\0';
    }
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_GetCCID
 * Description       : èŽ·å–SIM卡号
 * Input             : None
 * Output            : None
 * Return            : SIM卡号
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_CHAR *Module_GetCCID(HIDO_VOID)
{
    return l_acCCID;
}
/*******************************************************************************
 * Function Name     : Module_SetCCID
 * Description       : è®¾ç½®IMSI接口
 * Input             : _pcIMSI                       IMSI
 *                     _u32IMSILen                   é•¿åº¦
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_SetCCID(HIDO_CHAR *_pcCCID, HIDO_UINT32 _u32CCIDLen)
{
    if(_u32CCIDLen < MODULE_CCID_SIZE)
    {
        memcpy(l_acCCID, _pcCCID, _u32CCIDLen-2);
//        l_acCCID[_u32CCIDLen] = '\0';
    }
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_Sleep
 * Description       : ç¡çœ æŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_SetPowerEventCallback(FN_PowerEventCallback _fnPowerCallback, HIDO_VOID *_pArg)
{
   l_fnPowerEventCallback = _fnPowerCallback;
   l_pPowerEventArg = _pArg;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_Sleep
 * Description       : ç¡çœ æŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_Sleep(E_Module _eModule)
{
   l_abModuleNeedSleep[_eModule] = HIDO_TRUE;
   l_abModuleNeedWakeUp[_eModule] = HIDO_FALSE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_WakeUp
 * Description       : å”¤é†’接口
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_WakeUp(E_Module _eModule)
{
   l_abModuleNeedWakeUp[_eModule] = HIDO_TRUE;
   l_abModuleNeedSleep[_eModule] = HIDO_FALSE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_PowerEvent
 * Description       :
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_PowerEvent(E_Module _eModule, E_ModuleState _eModuleState)
{
    FUNC_CALL(l_fnPowerEventCallback, _eModule, _eModuleState, l_pPowerEventArg);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_PowerOff
 * Description       : å…³æœºæŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_PowerOff(E_Module _eModule)
{
   l_abModuleNeedPowerOff[_eModule] = HIDO_TRUE;
   l_abModuleNeedPowerOn[_eModule] = HIDO_FALSE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_PowerOn
 * Description       : å¼€æœºæŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_PowerOn(E_Module _eModule)
{
   l_abModuleNeedPowerOn[_eModule] = HIDO_TRUE;
   l_abModuleNeedPowerOff[_eModule] = HIDO_FALSE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_NeedSleep
 * Description       : ç¡çœ æŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_NeedSleep(E_Module _eModule)
{
   HIDO_BOOL bState = l_abModuleNeedSleep[_eModule];
   l_abModuleNeedSleep[_eModule] = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_WakeUp
 * Description       : å”¤é†’接口
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_NeedWakeUp(E_Module _eModule)
{
   HIDO_BOOL bState = l_abModuleNeedWakeUp[_eModule];
   l_abModuleNeedWakeUp[_eModule] = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_PowerOff
 * Description       : å…³æœºæŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_NeedPowerOff(E_Module _eModule)
{
   HIDO_BOOL bState = l_abModuleNeedPowerOff[_eModule];
   l_abModuleNeedPowerOff[_eModule] = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_PowerOn
 * Description       : å¼€æœºæŽ¥å£
 * Input             :
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_NeedPowerOn(E_Module _eModule)
{
   HIDO_BOOL bState = l_abModuleNeedPowerOn[_eModule];
   l_abModuleNeedPowerOn[_eModule] = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_GetSignalIntensity
 * Description       : èŽ·å–æœ€åŽä¸€æ¬¡ç¼“å­˜çš„ä¿¡å·é™åº¦
 * Input             : None
 * Output            : None
 * Return            : ä¿¡å·å¼ºåº¦
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_UINT32 Module_GetSignalIntensity(void)
{
    return l_u32SignalIntensity;
}
/*******************************************************************************
 * Function Name     : Module_RunATCmdResult
 * Description       : ç”¨æˆ·AT命令运行结果
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_RunATCmdResult(HIDO_DataStruct * _pstATResponse)
{
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Module_RunATCmdEnable
 * Description       : åˆ¤æ–­æ˜¯å¦éœ€è¦ç”¨æˆ·çš„AT命令
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_BOOL Module_RunATCmdEnable(HIDO_VOID)
{
    HIDO_BOOL bState = l_bRunATCmd;
    l_bRunATCmd = HIDO_FALSE;
    return bState;
}
/*******************************************************************************
 * Function Name     : Module_GetRunATCmd
 * Description       : èŽ·å–ç”¨æˆ·è¿è¡Œçš„AT命令
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_CHAR *Module_GetRunATCmd(HIDO_VOID)
{
    return l_acRunATCmdBuff;
}
/*******************************************************************************
 * Function Name     : Module_RunATCmd
 * Description       : ç”¨æˆ·è¿è¡ŒAT命令
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´8月5日
 *******************************************************************************/
HIDO_INT32 Module_RunATCmd(HIDO_CHAR *_pcATCmd)
{
   if(HIDO_NULL == _pcATCmd)
   {
      return HIDO_ERR;
   }
   l_bRunATCmd = HIDO_TRUE;
   HIDO_UtilSnprintf(l_acRunATCmdBuff, sizeof(l_acRunATCmdBuff), _pcATCmd);
    return HIDO_OK;
}