VOS_VOID NAS_LMM_GetMncFromPlmn ( const NAS_MM_PLMN_ID_STRU *pstPlmnId, VOS_UINT8 *pucMnc1, VOS_UINT8 *pucMnc2, VOS_UINT8 *pucMnc3 ) { if ( (VOS_NULL_PTR == pucMnc1) ||(VOS_NULL_PTR == pucMnc2) ||(VOS_NULL_PTR == pucMnc3) ||(VOS_NULL_PTR == pstPlmnId)) { NAS_LMM_PUBM_LOG_ERR("NAS_LMM_GetMncFromPlmn: ERR--input NULL !!"); return; } /* PLMN未定义,则返回F */ if (VOS_TRUE == NAS_LMM_PlmnIsUndef(pstPlmnId)) { *pucMnc1 = NAS_LMM_HEX_DIGIT_F; *pucMnc2 = NAS_LMM_HEX_DIGIT_F; *pucMnc3 = NAS_LMM_HEX_DIGIT_F; } else { /* 取出每一位MNC */ *pucMnc1 = pstPlmnId->aucPlmnId[2] & NAS_LMM_HIGH_HALF_BYTE_MASK; *pucMnc2 = (pstPlmnId->aucPlmnId[2] & NAS_LMM_LOW_HALF_BYTE_MASK) >> NAS_LMM_RIGHT_SHIFT_HALF_BYTE; *pucMnc3 = (pstPlmnId->aucPlmnId[1] & NAS_LMM_LOW_HALF_BYTE_MASK) >> NAS_LMM_RIGHT_SHIFT_HALF_BYTE; } return; }
VOS_VOID NAS_LMM_GetMccMncFromPlmn ( const NAS_MM_PLMN_ID_STRU *pstPlmnId, VOS_UINT32 *pulMCC, VOS_UINT32 *pulMNC ) { VOS_UINT8 ucMccDigit1 = NAS_LMM_NULL; VOS_UINT8 ucMccDigit2 = NAS_LMM_NULL; VOS_UINT8 ucMccDigit3 = NAS_LMM_NULL; VOS_UINT8 ucMncDigit1 = NAS_LMM_NULL; VOS_UINT8 ucMncDigit2 = NAS_LMM_NULL; VOS_UINT8 ucMncDigit3 = NAS_LMM_NULL; if ( (VOS_NULL_PTR == pulMCC) ||(VOS_NULL_PTR == pulMNC) ||(VOS_NULL_PTR == pstPlmnId)) { NAS_LMM_PUBM_LOG_ERR("NAS_LMM_GetMccMncFromPlmn: ERR--input NULL !!"); return; } /* PLMN未定义,则返回0 */ if (VOS_TRUE == NAS_LMM_PlmnIsUndef(pstPlmnId)) { *pulMCC = 0; *pulMNC = 0; NAS_LMM_PUBM_LOG_ERR("NAS_LMM_GetMccMncFromPlmn: PLMN is not defined."); return; } /* 获取MCC每一位 */ NAS_LMM_GetMccFromPlmn(pstPlmnId,&ucMccDigit1,&ucMccDigit2,&ucMccDigit3); /* 获取MNC每一位 */ NAS_LMM_GetMncFromPlmn(pstPlmnId,&ucMncDigit1,&ucMncDigit2,&ucMncDigit3); *pulMCC = (100*ucMccDigit1) + (10*ucMccDigit2) + ucMccDigit3; /* MNC3:F,只取MNC1,MNC2*/ if ( NAS_LMM_HEX_DIGIT_F == ucMncDigit3 ) { *pulMNC = (10*ucMncDigit1) + ucMncDigit2; } else { *pulMNC = (100*ucMncDigit1) + (10*ucMncDigit2) + ucMncDigit3; } return; }
VOS_UINT32 NAS_LMM_DecodeNvOplmn(NAS_NVIM_CTRL_TBL *pstNvCtrlTbl) { #if 0 NAS_LMM_PLMN_ACT_LIST_STRU *pstOplmnAct; VOS_UINT8 *pucMsg; VOS_UINT32 i; VOS_UINT32 ulValidPlmnNum = NAS_LMM_NULL; NAS_MM_PLMN_ID_STRU stPlmnId; NAS_LMM_MEM_SET(&stPlmnId,(VOS_CHAR)0xff,sizeof(stPlmnId)); NAS_LMM_UndefPlmn(&stPlmnId); if(NAS_EMM_USIM_FEATURE_HARD == NAS_LMM_GetUsimFeature()) { pucMsg = (VOS_UINT8 *)pstNvCtrlTbl->pNvData; pstOplmnAct = (VOS_VOID *)NAS_EMMC_GetMmcGlobleAddr(NAS_LMM_GLOBLE_PARA_OPLMNLIST); if((NAS_NVIM_NULL_PTR == pstOplmnAct) || (NAS_NVIM_NULL_PTR == pstNvCtrlTbl->pNvData)) { /* 打印查询的 类型 */ NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeNvOplmn: Point is Null"); return NAS_LMM_NVIM_FAIL; } if ((NAS_USIM_MIN_PLMN_LEN > pstNvCtrlTbl->usNvDataLen) || (NAS_LMM_NULL != pstNvCtrlTbl->usNvDataLen % NAS_LMM_PLMN_AND_ACT_LEN)) { NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeNvOplmn:len is err!"); /*return NAS_LMM_NVIM_FAIL;*/ } pstOplmnAct->ulPlmnNum = pstNvCtrlTbl->usNvDataLen / NAS_LMM_PLMN_AND_ACT_LEN; for(i= 0; i < pstOplmnAct->ulPlmnNum; i++ ) { NAS_LMM_MEM_CPY( &stPlmnId, &pucMsg[NAS_LMM_PLMN_AND_ACT_LEN*i], NAS_LMM_NVIM_PLMN_ID_LEN); if (VOS_FALSE == NAS_LMM_PlmnIsUndef(&stPlmnId)) { NAS_LMM_MEM_CPY(&(pstOplmnAct->aucPlmnId[NAS_LMM_PLMN_AND_ACT_LEN*ulValidPlmnNum]), &pucMsg[NAS_LMM_PLMN_AND_ACT_LEN*i], NAS_LMM_PLMN_AND_ACT_LEN); ulValidPlmnNum ++; } if (NAS_EMMC_MAX_OPLMN_NUM == ulValidPlmnNum) { NAS_LMM_NVIM_LOG_ERR("pstOplmnAct: Valid PlmnNum is overflow"); break; } } pstOplmnAct->ulPlmnNum = ulValidPlmnNum; NAS_LMM_NVIM_LOG1_INFO("NAS_LMM_DecodeNvOplmn: ulPlmnNum = ", pstOplmnAct->ulPlmnNum); NAS_LMM_NVIM_LOG_INFO("NAS_LMM_DecodeNvOplmn: PLMN IS "); NAS_COMM_PrintArray(NAS_COMM_GET_MM_PRINT_BUF(), (VOS_UINT8 *)pstOplmnAct->aucPlmnId,pstOplmnAct->ulPlmnNum * NAS_LMM_PLMN_AND_ACT_LEN); return NAS_LMM_NVIM_OK; } else #endif { return NAS_LMM_DecodeOneNvItem(pstNvCtrlTbl); } }
/***************************************************************************** Function Name : NAS_LMM_DecodeNvFplmnList Discription : 解码Forbidden PLMN List Input : pstNvCtrlTbl:公共处理结构 Output : 解码后的数据 Return : History: *****************************************************************************/ VOS_UINT32 NAS_LMM_DecodeNvFplmnList(NAS_NVIM_CTRL_TBL *pstNvCtrlTbl) { #if 0 VOS_UINT32 i = 0; VOS_UINT32 ulValidPlmnNum = NAS_LMM_NULL; VOS_UINT8 *pucMsg; NAS_EMMC_PLMN_LIST_STRU *pstFplmn; VOS_UINT32 *pulMaxNumOfFplmnByUsim = VOS_NULL_PTR; NAS_EMMC_PLMN_ID_STRU stPlmnId; if(NAS_EMM_USIM_FEATURE_HARD == NAS_LMM_GetUsimFeature()) { NAS_LMM_MEM_SET(&stPlmnId,0,sizeof(NAS_MM_PLMN_ID_STRU)); pstFplmn = (VOS_VOID*)NAS_EMMC_GetMmcGlobleAddr(NAS_LMM_GLOBLE_PARA_FPLMNLIST); pucMsg = (VOS_UINT8*)pstNvCtrlTbl->pNvData; /* 获取存放USIM中的 FPLMN列表中 PLMN个数的 全局变量的地址 */ pulMaxNumOfFplmnByUsim = (VOS_UINT32 *)NAS_EMMC_GetMmcGlobleAddr(NAS_LMM_GLOBLE_PARA_MAX_NUM_OF_FPLMN_BY_USIM); /* 计算USIM 中的 FPLMN列表中 PLMN的个数*/ *pulMaxNumOfFplmnByUsim = pstNvCtrlTbl->usNvDataLen / NAS_LMM_NVIM_PLMN_ID_LEN; /* 若 USIM 中的 FPLMN列表中 PLMN的个数 超过NAS内存允许的最大值,则将此 个数限制为NAS内存运行的最大值*/ if (NAS_MM_MAX_PLMN_NUM < (*pulMaxNumOfFplmnByUsim)) { (*pulMaxNumOfFplmnByUsim) = NAS_MM_MAX_PLMN_NUM; } for(i = 0; i < (*pulMaxNumOfFplmnByUsim); i++) { /* 顺序拷贝PLMN ID,接着判断是否有效 */ NAS_LMM_MEM_CPY( &stPlmnId, &pucMsg[NAS_LMM_NVIM_PLMN_ID_LEN*i], NAS_LMM_NVIM_PLMN_ID_LEN); /*如果PLMN ID有效,赋值给全局变量*/ if (VOS_FALSE == NAS_LMM_PlmnIsUndef(&stPlmnId)) { NAS_LMM_MEM_CPY(&(pstFplmn->astPlmnId[ulValidPlmnNum]), &pucMsg[NAS_LMM_NVIM_PLMN_ID_LEN*i], NAS_LMM_NVIM_PLMN_ID_LEN); ulValidPlmnNum ++; } } /* 赋值全局变量: 总有效FPLMN ID个数 */ pstFplmn->ulPlmnNum = ulValidPlmnNum; NAS_LMM_NVIM_LOG1_INFO("NAS_LMM_DecodeNvFplmnList: ulPlmnNum = ", pstFplmn->ulPlmnNum); NAS_LMM_NVIM_LOG_INFO("NAS_LMM_DecodeNvFplmnList: PLMN IS "); NAS_COMM_PrintArray(NAS_COMM_GET_MM_PRINT_BUF(), (VOS_UINT8*)pstFplmn->astPlmnId,(pstFplmn->ulPlmnNum) * 4); return NAS_LMM_NVIM_OK; } else #endif { return NAS_LMM_DecodeOneNvItem(pstNvCtrlTbl); } }