VOS_UINT32 GUNAS_SMS_ATCmdFilter( VOS_UINT8 *pucATData, VOS_UINT16 usLen ) { VOS_UINT32 i; VOS_UINT8 *pucTempData = VOS_NULL_PTR; pucTempData = (VOS_UINT8 *)PS_MEM_ALLOC(WUEPS_PID_AT, usLen); if (VOS_NULL_PTR == pucTempData) { return VOS_FALSE; } (VOS_VOID)PS_MEM_CPY(pucTempData, pucATData, usLen); (VOS_VOID)At_UpString(pucTempData, usLen); for (i = 0; i < (sizeof(g_apcATFileterTable)/sizeof(g_apcATFileterTable[0])); i++) { if (VOS_OK == PS_MEM_CMP((VOS_UINT8 *)g_apcATFileterTable[i], pucTempData, VOS_StrLen(g_apcATFileterTable[i]))) { PS_MEM_FREE(WUEPS_PID_AT, pucTempData); return VOS_TRUE; } } PS_MEM_FREE(WUEPS_PID_AT, pucTempData); return VOS_FALSE; }
VOS_UINT32 atParseWCmd( VOS_UINT8 * pData, VOS_UINT16 usLen) { AT_STATE_TYPE_ENUM curr_state = AT_NONE_STATE; /* 设置初始状态 */ AT_STATE_TYPE_ENUM new_state = AT_NONE_STATE; /* 设置初始状态 */ VOS_UINT8 *pucCurrPtr = pData; /* 指向当前正在处理的字符*/ VOS_UINT8 *pucCopyPtr = pData; /* 拷贝内容的起始指针 */ VOS_UINT16 usLength = 0; /* 记录当前已经处理的字符个数*/ At_UpString(pData,usLen); /* 依次分析字符串中的每个字符*/ while( (usLength++ < usLen) && (g_stATParseCmd.ucParaIndex < AT_MAX_PARA_NUMBER)) { curr_state = new_state; /* 当前状态设置为新状态*/ /* 根据当前处理的字符和当前状态查表得到新状态*/ new_state = atFindNextMainState(AT_W_CMD_MAIN_STATE_TAB,*pucCurrPtr,curr_state); pucCopyPtr = pucCurrPtr; switch(new_state) /* 状态处理*/ { case AT_W_CMD_NAME_STATE: if(usLength > 1) { if('E' == *(pucCopyPtr-1)) { /* atSetCurClientEtype(*pucCopyPtr - '0'); */ } else if('V' == *(pucCopyPtr-1)) { /* atSetCurClientVtype(*pucCopyPtr - '0'); */ } else if('&' == *(pucCopyPtr-1)) { /* atSetFPara(EN_AT_FW_CLIENT_ID_ALL); */ } else { } } break; /* 返回错误 */ default: break; } pucCurrPtr++; /* 继续分析下一个字符*/ } switch(new_state) { case AT_W_CMD_NAME_STATE: return AT_OK; /* 返回正确*/ default: return AT_ERROR; /* 返回错误 */ } }
VOS_UINT32 atCheckCharPara( AT_PARSE_PARA_TYPE_STRU *pPara) { VOS_UINT8 ucIndex = 0; VOS_UINT8 pBuf[AT_PARA_MAX_LEN + 1] = {0}; PS_MEM_CPY(pBuf, pPara->aucPara, pPara->usParaLen); At_UpString(pBuf, pPara->usParaLen); pBuf[pPara->usParaLen] = '\0'; for(ucIndex = 0; ucIndex < g_stATParseCmd.ucParaStrRangeIndex; ucIndex++) { if(0 == AT_STRCMP((VOS_CHAR *)g_stATParseCmd.auStrRange[ucIndex],(VOS_CHAR *)pBuf)) { pPara->ulParaValue = ucIndex; return AT_SUCCESS; } } return AT_FAILURE; }
VOS_UINT32 AT_ParseSetDockCmd( VOS_UINT8 *pucData, VOS_UINT16 usLen ) { VOS_INT8 cRet; VOS_UINT16 usCmdlen; VOS_UINT32 ulPos; VOS_UINT8 *pucDataPara = VOS_NULL_PTR; AT_PARSE_CMD_NAME_TYPE_STRU stAtCmdName; PS_MEM_SET(&stAtCmdName, 0, sizeof(stAtCmdName)); if (0 == usLen) { return AT_FAILURE; } pucDataPara = (VOS_UINT8*)PS_MEM_ALLOC(WUEPS_PID_AT, usLen); if (VOS_NULL_PTR == pucDataPara) { AT_ERR_LOG("AT_ParseSetDockCmd: pucDataPara Memory malloc failed!"); return AT_FAILURE; } PS_MEM_CPY(pucDataPara, pucData, usLen); /* 去掉字符串中的退格符 */ if (AT_FAILURE == At_ScanDelChar(pucDataPara, &usLen)) { PS_MEM_FREE(WUEPS_PID_AT, pucDataPara); return AT_FAILURE; } /* 待处理的字符串长度小于"AT^DOCK="长度直接返回AT_FAILURE */ usCmdlen = (VOS_UINT16)VOS_StrLen("AT^DOCK="); if (usLen < usCmdlen) { PS_MEM_FREE(WUEPS_PID_AT, pucDataPara); return AT_FAILURE; } /* AT命令头字符转大写 */ At_UpString(pucDataPara, usCmdlen); /* 待处理的字符串头部不是"AT^DOCK="直接返回AT_FAILURE */ cRet = VOS_StrNiCmp((VOS_CHAR *)pucDataPara, "AT^DOCK=", usCmdlen); if (0 != cRet) { PS_MEM_FREE(WUEPS_PID_AT, pucDataPara); return AT_FAILURE; } /* 获取命令(不包含命令前缀AT)名称及长度 */ ulPos = VOS_StrLen("AT"); stAtCmdName.usCmdNameLen = (VOS_UINT16)VOS_StrLen("^DOCK"); PS_MEM_CPY(stAtCmdName.aucCmdName, (pucDataPara + ulPos), stAtCmdName.usCmdNameLen); stAtCmdName.aucCmdName[stAtCmdName.usCmdNameLen] = '\0'; ulPos += stAtCmdName.usCmdNameLen; ulPos += VOS_StrLen("="); /* 获取命令的参数字符串及长度 */ gastAtParaList[0].usParaLen = usLen - (VOS_UINT16)ulPos; PS_MEM_CPY(gastAtParaList[0].aucPara, (pucDataPara + ulPos), gastAtParaList[0].usParaLen); /* 设置命令类型,操作类型和参数个数 */ gucAtParaIndex = 1; g_stATParseCmd.ucCmdOptType = AT_CMD_OPT_SET_PARA_CMD; gucAtCmdFmtType = AT_EXTEND_CMD_TYPE; PS_MEM_FREE(WUEPS_PID_AT, pucDataPara); return AT_SUCCESS; }