/******************************************************************************* * 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; }