/***************************************************************************** 函 数 名 : ftm_mailbox_init 功能描述 : FTM模块邮箱适配初始化 输入参数 : param 原语内容 ulLen 原语长度 输出参数 : 无 返 回 值 : 无 *****************************************************************************/ VOS_UINT32 ftm_mailbox_init() { if(VOS_OK != VOS_SmCCreate( "ftm_mailbox_taskproc", 0, VOS_SEMA4_FIFO, &g_mailbox_readsem)) { HAL_SDMLOG("[%s] : VOS_SmCCreate failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_LTE_CT, ftm_mailbox_ltect_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_LTE_CT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_LTE_BT, ftm_mailbox_ltebt_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_LTE_BT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_TDS_CT, ftm_mailbox_tdsct_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_TDS_CT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_TDS_BT, ftm_mailbox_tdsbt_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_TDS_BT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } return ERR_MSP_SUCCESS; }
//***************************************************************************** // 功能描述: 设置发射机的发射功率 // // 参数说明: // ulIndex [in] ... // ... // // 返 回 值: // TODO: ... //***************************************************************************** VOS_UINT32 atSetFPOWPara(VOS_UINT8 ucClientId) { FTM_FPOW_REQ_STRU stFPOWSetReq = {0}; VOS_UINT32 ulRst = 0; VOS_INT16 sPower = 0; /*lint -e516*/ HAL_SDMLOG("-----enter:[%s] \n", __FUNCTION__); /*lint -e516*/ // 参数检查 if(AT_CMD_OPT_SET_PARA_CMD != g_stATParseCmd.ucCmdOptType) { return AT_CME_INCORRECT_PARAMETERS; } if(1 != gucAtParaIndex) { return AT_CME_INCORRECT_PARAMETERS; } if(0 != gastAtParaList[0].usParaLen) { //sPower = (S16_T)atoi((CONST CHAR_T*)(gastAtParaList[0].aucPara)); //sPower = gastAtParaList[0].ulParaValue; ulRst = initParaListS16((AT_PARSE_PARA_TYPE_STRU *)(&(gastAtParaList[0])),1,(VOS_INT16*)(&sPower)); if(ulRst != ERR_MSP_SUCCESS) { return AT_CME_INCORRECT_PARAMETERS; } if(-60 > sPower || 24 < sPower) { return AT_CME_INCORRECT_PARAMETERS; } } else { return AT_CME_INCORRECT_PARAMETERS; } stFPOWSetReq.sPower = sPower; //(S16_T)(gastAtParaList[0].ulParaValue); HAL_SDMLOG("-----[%s]:send data to C-core \n", __FUNCTION__); ulRst = atSendFtmDataMsg(MSP_SYS_FTM_PID, ID_MSG_FTM_FPOW_REQ, ucClientId, (VOS_VOID*)(&stFPOWSetReq), sizeof(stFPOWSetReq)); if(AT_SUCCESS == ulRst) { // 设置当前操作类型 gastAtClientTab[ucClientId].CmdCurrentOpt = AT_CMD_FPOW_SET; return AT_WAIT_ASYNC_RETURN; // 返回命令处理挂起状态 } return AT_ERROR; }
/***************************************************************************** 函 数 名 : ftm_mailbox_msgproc 功能描述 : 邮箱数据读取 输入参数 : enMbxType 邮箱数据类型 输出参数 : 无 返 回 值 : 0无数据,大于0为邮箱数据长度 *****************************************************************************/ VOS_UINT32 ftm_mailbox_msgproc(MAILBOX_SERVICE_TYPE_E enMbxType) { VOS_UINT32 ulRet = 0; VOS_UINT32 ulMsgSize = 0; VOS_VOID* pMailBoxMsg = NULL; MsgBlock* pMsgBlock = NULL; VOS_UINT32 ret = ERR_MSP_UNKNOWN; /* 读取消息长度 */ HAL_SDMLOG("[%s] BEIGN TO READ DATA.\n", __FUNCTION__); ulMsgSize = BSP_MailBox_ComMsgSize(enMbxType); HAL_SDMLOG("[%s] BEIGN TO READ DATA.LEN = %d\n", __FUNCTION__,ulMsgSize); if(ulMsgSize == 0 ) { return ulMsgSize; } pMailBoxMsg = VOS_MemAlloc(MSP_SYS_FTM_PID, ((DYNAMIC_MEM_PT)), ulMsgSize); if(NULL == pMailBoxMsg) { HAL_SDMLOG("[%s] VOS_MemAlloc failed.\n", __FUNCTION__); return 0; } /* 读取邮箱数据 */ ulRet = BSP_MailBox_ComMsgRead(enMbxType, pMailBoxMsg, ulMsgSize, EN_MAILBOX_SLEEP_WAKEUP); if(ulRet != BSP_OK) { VOS_MemFree(MSP_SYS_FTM_PID, pMailBoxMsg); return 0; } /* 发送消息到MSP_SYS_FTM_PID任务 */ pMsgBlock = (MsgBlock*)VOS_AllocMsg(MSP_SYS_FTM_PID, sizeof(OS_MSG_STRU)); if (pMsgBlock) { OS_MSG_STRU* pMsg = (OS_MSG_STRU*)pMsgBlock->aucValue; pMsgBlock->ulReceiverPid = MSP_SYS_FTM_PID; pMsgBlock->ulSenderPid = MSP_SYS_FTM_PID; pMsg->ulMsgId = ID_MSG_L1A_CT_IND; pMsg->ulParam1 = pMailBoxMsg; pMsg->ulParam2 = ulMsgSize; ret = VOS_SendMsg(MSP_SYS_FTM_PID, pMsgBlock); if (ret != VOS_OK) { HAL_SDMLOG("[%s] send msg to MSP_SYS_FTM_PID FAILED \n", __FUNCTION__); } } return ulMsgSize; }
/***************************************************************************** 函 数 名 : ftm_mailbox_ltebt_write 功能描述 : 写LTE bT类型数据到邮箱 输入参数 : param 原语内容 ulLen 原语长度 输出参数 : 无 返 回 值 : 无 *****************************************************************************/ VOS_UINT32 ftm_mailbox_ltebt_write(VOS_VOID* param,VOS_UINT32 ulLen) { VOS_UINT32 ulRet = ERR_MSP_SUCCESS; HAL_SDMLOG("[%s] : send lte ct to dsp.\n", __FUNCTION__); ulRet = BSP_MailBox_ComMsgWrite(EN_MAILBOX_SERVICE_LTE_BT, param, ulLen, EN_MAILBOX_SLEEP_WAKEUP); if(ulRet != BSP_OK) { HAL_SDMLOG("[%s] : send lte ct to dsp fail !!!.\n", __FUNCTION__); ulRet = ERR_MSP_FAILURE; } FTM_MNTN_FTM2RTT_MSG(*((VOS_UINT*)param)) return ulRet; }
VOS_UINT32 atSetTbatCnf(VOS_UINT8 ucClientId, VOS_VOID *pMsgBlock) { OS_MSG_STRU*pEvent = NULL; FTM_SET_TBAT_CNF_STRU *pstCnf=NULL; pEvent = (OS_MSG_STRU*)(((MsgBlock*)pMsgBlock)->aucValue); pstCnf = (FTM_SET_TBAT_CNF_STRU *)pEvent->ulParam1; HAL_SDMLOG("\n enter into atSetTbatCnf\n"); CmdErrProc(ucClientId, pstCnf->ulErrCode, 0, NULL); return AT_OK; }
VOS_UINT32 atRdTbatCnf(VOS_UINT8 ucClientId, VOS_VOID *pMsgBlock) { OS_MSG_STRU*pEvent = NULL; FTM_RD_TBAT_CNF_STRU *pstCnf=NULL; pEvent = (OS_MSG_STRU*)(((MsgBlock*)pMsgBlock)->aucValue); pstCnf = (FTM_RD_TBAT_CNF_STRU *)pEvent->ulParam1; HAL_SDMLOG("\n enter into atRdTbatCnf\n"); HAL_SDMLOG("\n pstCnf->ucType=%d,pstCnf->usValue=%d \n",(VOS_INT)pstCnf->ucType,(VOS_INT)pstCnf->usValue); gstLAtSendData.usBufLen = 0; gstLAtSendData.usBufLen = (VOS_UINT16)At_sprintf( AT_CMD_MAX_LEN, (VOS_CHAR *)pgucLAtSndCodeAddr, (VOS_CHAR*)pgucLAtSndCodeAddr, "^TBAT:%d,%d", pstCnf->ucType,pstCnf->usValue ); CmdErrProc(ucClientId, pstCnf->ulErrCode, gstLAtSendData.usBufLen, pgucLAtSndCodeAddr); return AT_OK; }
/***************************************************************************** 函 数 名 : ftm_mailbox_taskproc 功能描述 : 读邮箱数据自处理任务 输入参数 : 无 输出参数 : 无 返 回 值 : 无 *****************************************************************************/ VOS_VOID ftm_mailbox_taskproc(VOS_UINT32 ulPara0, VOS_UINT32 ulPara1, VOS_UINT32 ulPara2, VOS_UINT32 ulPara3) { /*lint -save -e716*/ while(1) /*lint -restore*/ { if(VOS_ERR == VOS_SmP(g_mailbox_readsem, 0)) { HAL_SDMLOG("[%s] VOS_Smp(g_mailbox_readsem, 0) error\n", __FUNCTION__); } /*vote for lock*/ drx_msp_fid_vote_lock(DRX_FTM_MAILBOX_VOTE); /* LTE CT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_CT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* LTE BT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_BT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* TDS CT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_CT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* TDS BT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_BT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /*vote for lock*/ drx_msp_fid_vote_unlock(DRX_FTM_MAILBOX_VOTE); //VOS_SmV(g_mailbox_readsem); } }
VOS_UINT32 atSetTselrfParaCnfProc(VOS_UINT8 ucClientId, VOS_VOID *pMsgBlock) { OS_MSG_STRU* pEvent = NULL; FTM_SET_TSELRF_CNF_STRU* pstCnf = NULL; HAL_SDMLOG("\n enter atSetTselrfParaCnfProc !!!\n"); pEvent = (OS_MSG_STRU*)(((MsgBlock*)pMsgBlock)->aucValue); pstCnf = (FTM_SET_TSELRF_CNF_STRU *)pEvent->ulParam1; CmdErrProc(ucClientId, pstCnf->ulErrCode, 0, NULL); return AT_FW_CLIENT_STATUS_READY; }
/***************************************************************************** 函 数 名 : at_ftm_get_freq 功能描述 : 通过某频点获得其对应的实际频率值(LTE单位100KHz, TDS单位为200Khz) 输入参数 : emMode 模式 (LTE TDS) usChan 频点 输出参数 : 无 返 回 值 : 频率值, 返回0代表未找到对应的频点 *****************************************************************************/ VOS_UINT16 at_ftm_get_freq(FCHAN_MODE_ENUM emMode, VOS_UINT16 usChan) { VOS_UINT16 usFreq = 0; VOS_UINT16 i = 0; VOS_UINT16 usTblSize = 0; VOS_UINT32 ulNvId =0,ulRet =0; LTE_COMM_NON_STANDARD_BAND_COMM_STRU stLpsNonstandBand = {0}; /* TDS */ if(EN_FCHAN_MODE_TD_SCDMA == emMode) { HAL_SDMLOG(" TDS, get freq = %d!\n",usChan); return usChan; } /* LTE */ usTblSize = sizeof(g_stBandInfo)/sizeof(FTM_BAND_INFO_STRU); for(i=1; i<usTblSize; i++) { /* 判断该频点是否为某频段下行频点,如果为下行频点则计算该频点的频率 */ if((usChan>=g_stBandInfo[i].usDlLowChan) && (usChan<=g_stBandInfo[i].usDlHigChan)) { usFreq = g_stBandInfo[i].usDlLowFreq + usChan - g_stBandInfo[i].usDlLowChan; return usFreq; } /* 判断该频点是否为某频段的上行频点,如果为上行频点则计算该频点的频率 */ if((usChan>=g_stBandInfo[i].usUlLowChan) && (usChan<=g_stBandInfo[i].usUlHigChan)) { usFreq = g_stBandInfo[i].usUlLowFreq + usChan - g_stBandInfo[i].usUlLowChan; return usFreq; } } /* 搜索非标频段, 搜索到则将非标频点转换为频率 */ for(i=0; i<(LTE_COMM_NONSTANDARD_BAND_END-LTE_COMM_NONSTANDARD_BAND_BEGIN); i++) { ulNvId = i + EN_NV_ID_BANDNon1_BAND_INFO ; ulRet = NVM_Read(ulNvId, (VOS_VOID*) &stLpsNonstandBand, sizeof(LTE_COMM_NON_STANDARD_BAND_COMM_STRU)); if(ERR_MSP_SUCCESS != ulRet) { HAL_SDMLOG("read non stand band nv fail,ulNvId =%d!\n",ulNvId); return 0; } if((usChan >= stLpsNonstandBand.stDlFreqInfo.usRangOfNLow) && (usChan <= stLpsNonstandBand.stDlFreqInfo.usRangOfNHigh)) { usFreq = (VOS_UINT16)(stLpsNonstandBand.stDlFreqInfo.usFLow+usChan-stLpsNonstandBand.stDlFreqInfo.usRangOfNLow); HAL_SDMLOG("stDlFreqInfo:usGetReq = %d!\n", usFreq); return usFreq; } if((usChan >= stLpsNonstandBand.stUlFreqInfo.usRangOfNLow) && (usChan <= stLpsNonstandBand.stUlFreqInfo.usRangOfNHigh)) { usFreq = (VOS_UINT16)(stLpsNonstandBand.stUlFreqInfo.usFLow+usChan-stLpsNonstandBand.stUlFreqInfo.usRangOfNLow); HAL_SDMLOG("stUlFreqInfo:usGetReq = %d!\n", usFreq); return usFreq; } } return 0; }
VOS_UINT32 atSetNVWRExPara(VOS_UINT8 ucClientId) { VOS_UINT32 ulRet = ERR_MSP_FAILURE; VOS_UINT32 ulNVID = 0; VOS_UINT32 ulNVWrTotleLen = 0; VOS_UINT32 ulNVLen = 0; VOS_UINT16 usNVWrLen = 0; static VOS_UINT8 * pu8NvWrData = NULL; VOS_UINT32 ulNVNum = 0; VOS_UINT32 i = 0; VOS_UINT8 au8Data[128] = {0};//MAX_NV_NUM_PER_PARA VOS_UINT16 usOffset = 0; gstAtSendData.usBufLen = 0; /*PCLINT*/ if(ucClientId == 0) { } if(AT_CMD_OPT_SET_PARA_CMD != g_stATParseCmd.ucCmdOptType) { g_ulNVWRTL =1; return AT_CME_INCORRECT_PARAMETERS; } if((0 == gastAtParaList[0].usParaLen) || (0 == gastAtParaList[1].usParaLen) || (0 == gastAtParaList[2].usParaLen) || (0 == gastAtParaList[3].usParaLen)) { g_ulNVWRTL =2; return AT_CME_INCORRECT_PARAMETERS; } ulNVID = gastAtParaList[0].ulParaValue; /*HAL_SDMLOG("\n atSetNVWRPara ulNVID = %d\n",ulNVID);*/ if (VOS_TRUE != AT_IsNVWRAllowedNvId((VOS_UINT16)ulNVID)) { g_ulNVRDTL = 3; return AT_CME_OPERATION_NOT_ALLOWED; } usOffset = (VOS_UINT16)gastAtParaList[1].ulParaValue; usNVWrLen = (VOS_UINT16)gastAtParaList[2].ulParaValue; HAL_SDMLOG("\n atSetNVWRPara usNVWrLen = %d\n",(VOS_INT)usNVWrLen); ulRet = NV_GetLength(ulNVID, (BSP_U32 *)&ulNVWrTotleLen); //HAL_DIAG_SDM_FUN(EN_SDM_NVRD_GETNVLEN, ulRet, ulNVID, ulNVWrTotleLen); if(ERR_MSP_SUCCESS != ulRet) { g_ulNVRDTL = 4; return AT_ERROR; } if((usOffset > (ulNVWrTotleLen - 1)) || ((usOffset + usNVWrLen) > ulNVWrTotleLen)) { g_ulNVRDTL = 5; return AT_CME_INCORRECT_PARAMETERS; } if(0 == usOffset) { if(0 != pu8NvWrData) { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; } pu8NvWrData = VOS_MemAlloc(WUEPS_PID_AT, (DYNAMIC_MEM_PT), ulNVWrTotleLen); if(NULL == pu8NvWrData) { g_ulNVWRTL =6; return AT_ERROR; } } if(NULL == pu8NvWrData) { return AT_CME_INCORRECT_PARAMETERS; } i = 0; while(0 != gastAtParaList[3 + i].usParaLen) { ulRet = AT_NVWRGetParaInfo((AT_PARSE_PARA_TYPE_STRU*)(&(gastAtParaList[3 + i])), au8Data, (VOS_UINT32 *)&ulNVNum); if(ERR_MSP_SUCCESS != ulRet) { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; g_ulNVWRTL =7; return AT_CME_INCORRECT_PARAMETERS; } if(ulNVNum > 128)//MAX_NV_NUM_PER_PARA { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; g_ulNVWRTL =8; return AT_CME_INCORRECT_PARAMETERS; } if((ulNVLen+ulNVNum) > usNVWrLen) { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; g_ulNVWRTL =9; return AT_CME_INCORRECT_PARAMETERS; } MSP_MEMCPY((pu8NvWrData + usOffset + ulNVLen), au8Data, ulNVNum); ulNVLen += ulNVNum; i++; if(i >= (AT_MAX_PARA_NUMBER-3)) { break; } } if(ulNVLen != usNVWrLen) { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; g_ulNVWRTL =10; return AT_CME_INCORRECT_PARAMETERS; } if (usOffset + usNVWrLen == ulNVWrTotleLen) { ulRet = NVM_Write(ulNVID, (VOS_VOID*)pu8NvWrData, ulNVWrTotleLen); //HAL_DIAG_SDM_FUN(EN_SDM_NVWR_WRITENVITEM, ulRet, ulNVID, ulNVWrTotleLen); if(ERR_MSP_SUCCESS != ulRet) { VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; g_ulNVWRTL =11; return AT_ERROR; } VOS_MemFree(WUEPS_PID_AT, pu8NvWrData); pu8NvWrData = 0; } g_ulNVWRTL =9; return AT_OK; }
VOS_UINT32 atSetTBATPara(VOS_UINT8 ucClientId) { FTM_SET_TBAT_REQ_STRU stTbatSet ={0}; FTM_RD_TBAT_REQ_STRU stTbatRd={0}; VOS_UINT8 ucType = 0; VOS_UINT8 ucOpr = 0; VOS_UINT16 usValue = 0; VOS_UINT32 ulRst=0; /* 参数检查 */ if(AT_CMD_OPT_SET_PARA_CMD != g_stATParseCmd.ucCmdOptType) { return AT_CME_INCORRECT_PARAMETERS; } if(4 < gucAtParaIndex) { return AT_CME_INCORRECT_PARAMETERS; } if((0 == gastAtParaList[0].usParaLen) || (0 == gastAtParaList[1].usParaLen) ) { return AT_CME_INCORRECT_PARAMETERS; } ucType = (VOS_UINT8)(gastAtParaList[0].ulParaValue); ucOpr = (VOS_UINT8)(gastAtParaList[1].ulParaValue); if( ucOpr == 1 ) { /*设置 */ if(0 != gastAtParaList[2].usParaLen)/* [false alarm]:fortify */ { usValue = gastAtParaList[2].usParaLen;/* [false alarm]:fortify*/ stTbatSet.ucOpr = ucOpr;/* [false alarm]:fortify */ stTbatSet.ucType = ucType;/* [false alarm]:fortify */ stTbatSet.usValueMin = (VOS_UINT16)gastAtParaList[2].ulParaValue;/* [false alarm]:fortify */ stTbatSet.usValueMax = (VOS_UINT16)gastAtParaList[3].ulParaValue;/* [false alarm]:fortify */ HAL_SDMLOG("\n stTbatSet.usValueMin=%d,stTbatSet.usValueMax=%d\n",stTbatSet.usValueMin,stTbatSet.usValueMax); ulRst = atSendFtmDataMsg(MSP_SYS_FTM_PID, ID_MSG_FTM_SET_TBAT_REQ,ucClientId, (VOS_VOID*)(&stTbatSet), sizeof(stTbatSet));/* [false alarm]:fortify */ if(AT_SUCCESS == ulRst) { gastAtClientTab[ucClientId].CmdCurrentOpt = AT_CMD_TBAT_SET; return AT_WAIT_ASYNC_RETURN; } return AT_ERROR; } else { return AT_ERROR; } } else if( ucOpr == 0 ) { /*查询 */ usValue = (VOS_UINT16)gastAtParaList[2].usParaLen;/* [false alarm]:fortify */ stTbatRd.ucOpr = ucOpr;/* [false alarm]:fortify */ stTbatRd.ucType = ucType;/* [false alarm]:fortify */ stTbatRd.usValue = usValue; ulRst = atSendFtmDataMsg(MSP_SYS_FTM_PID, ID_MSG_FTM_RD_TBAT_REQ,ucClientId, (VOS_VOID*)(&stTbatRd), sizeof(stTbatRd)); if(AT_SUCCESS == ulRst) { gastAtClientTab[ucClientId].CmdCurrentOpt = AT_CMD_TBAT_READ; return AT_WAIT_ASYNC_RETURN; } return AT_ERROR; } else { return AT_CME_INCORRECT_PARAMETERS; } }