/*****************************************************************************
 函 数 名  : 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;
    }
}