VOS_UINT32 TAF_MmiEncodeUssdMessage ( TAF_SS_USSD_STRING_STRU *pstPara ) { VOS_UINT8 aucTmp[TAF_SS_MAX_UNPARSE_PARA_LEN]; VOS_UINT32 ulEncodeLen; VOS_UINT8 aucTemp_buffer[TAF_SS_MAX_UNPARSE_PARA_LEN]; VOS_UINT32 i; VOS_UINT8 *pucCurTransTbl = VOS_NULL_PTR; PS_MEM_SET(aucTmp, 0 , TAF_SS_MAX_UNPARSE_PARA_LEN); PS_MEM_SET(aucTemp_buffer, 0 , TAF_SS_MAX_UNPARSE_PARA_LEN); ulEncodeLen = 0; /* 判断输入的字符串是否超长,7bit编码时最长182个字符 */ if (pstPara->usCnt > TAF_SS_MAX_USSDSTRING_LEN) { MN_WARN_LOG("TAF_MmiEncodeUssdMessage: string is too long"); return VOS_FALSE; } /* convert from ascii coding into GSM default-alphabet coding with 1 char per byte */ pucCurTransTbl = TAF_MmiGetCurrAsciiToAlphaTableAddr(); for (i = 0; i < pstPara->usCnt; i++) { aucTemp_buffer[i] = pucCurTransTbl[pstPara->aucUssdStr[i]]; } /* 循环结构,转换成7bit编码方式 */ /* Modified by f62575 for V9R1 STK升级, 2013-6-26, begin */ if (VOS_OK != TAF_STD_Pack7Bit(aucTemp_buffer, pstPara->usCnt, 0, aucTmp, &ulEncodeLen)) { MN_WARN_LOG("TAF_MmiEncodeUssdMessage: TAF_STD_Pack7Bit Error"); } /* Modified by f62575 for V9R1 STK升级, 2013-6-26, end */ /* 判断是否有7个位的空余,如果有多余的7个位则填充'0001101' */ if (TAF_MMI_BITS_PER_SEPTET == (pstPara->usCnt % TAF_MMI_BITS_PER_OCTET)) { aucTmp[ulEncodeLen - 1] = aucTmp[ulEncodeLen - 1] | TAF_MMI_USSD_7BIT_PAD; } pstPara->usCnt = (VOS_UINT16)ulEncodeLen; PS_MEM_CPY(pstPara->aucUssdStr, aucTmp, pstPara->usCnt); return VOS_TRUE; }
VOS_VOID TAF_MMA_ReadCphsFileCnf( USIMM_READFILE_CNF_STRU *pUsimTafMsg ) { TAF_SDC_CPHS_FILE_INFO_STRU *pstChpsFileInfo = VOS_NULL_PTR; VOS_UINT8 *pCPHSOperNameStr = VOS_NULL_PTR; VOS_UINT8 ucSpareBitNumInLastOctet; VOS_UINT32 ulSrcStrLen; VOS_UINT32 ulDestStrLen; VOS_UINT8 aucOperatorName[TAF_SDC_MAX_OPER_NAME_NUM]; pstChpsFileInfo = TAF_SDC_GetChpsFileInfo(); pCPHSOperNameStr = aucOperatorName; PS_MEM_SET(aucOperatorName, 0xFF, TAF_SDC_MAX_OPER_NAME_NUM); if ((MMA_SUCCESS != pUsimTafMsg->stCmdResult.ulResult) || (0xff == pUsimTafMsg->aucEf[0])) { return; } if (0 == pUsimTafMsg->usEfLen) { MMA_ERRORLOG("TAF_MMA_ReadCphsFileCnf(): usEfLen is 0"); return; } if (pUsimTafMsg->usEfLen > TAF_SDC_MAX_OPER_LONG_NAME_LEN) { MMA_MEM_CPY(aucOperatorName, (VOS_UINT8*)(VOS_UINT32)(pUsimTafMsg->aucEf), TAF_SDC_MAX_OPER_LONG_NAME_LEN); } else { MMA_MEM_CPY(aucOperatorName, pUsimTafMsg->aucEf, pUsimTafMsg->usEfLen); } for (ulSrcStrLen = 0 ;ulSrcStrLen < TAF_SDC_MAX_OPER_LONG_NAME_LEN ; ulSrcStrLen++) { if (0xFF == pCPHSOperNameStr[ulSrcStrLen]) { break; } } /* 将 bit 8为0的Gsm 7bit转换为压缩的 7bit编码 */ ulDestStrLen = (VOS_UINT32)(((ulSrcStrLen * 7) + 7) / 8); /* 压缩后的字节个数 */ if (VOS_OK != TAF_STD_Pack7Bit(pCPHSOperNameStr, ulSrcStrLen, 0, pstChpsFileInfo->stCPHSOperName.aucOperatorName, &ulDestStrLen)) { MMA_ERRORLOG("MMA_ReadCPHSOperNameStrFileCnf():Error:TAF_STD_Pack7Bit failed!"); return; } /* octet3: ext 1,coding scheme:Gsm 7bit, Add CI:0,Number of spare bits in last octet */ ucSpareBitNumInLastOctet = (VOS_UINT8)((ulDestStrLen * 8) - (ulSrcStrLen * 7)); pstChpsFileInfo->stCPHSOperName.bitExt = 0x01; pstChpsFileInfo->stCPHSOperName.ucLength = (VOS_UINT8)ulDestStrLen; pstChpsFileInfo->stCPHSOperName.bitCoding = 0; pstChpsFileInfo->stCPHSOperName.bitSpare = ucSpareBitNumInLastOctet; return; }