VOS_VOID MTC_SndRcmModemStateInd(VOS_VOID)
{
    MTC_RCM_MODEM_STATE_NOTIFY_STRU    *pstModemState;
    MODEM_ID_ENUM_UINT16                enModemId;

    /* 申请消息包 */
    pstModemState = (MTC_RCM_MODEM_STATE_NOTIFY_STRU *)MTC_ALLOC_MSG_WITH_HDR(sizeof(MTC_RCM_MODEM_STATE_NOTIFY_STRU));
    if (VOS_NULL_PTR == pstModemState)
    {
        MTC_ERROR_LOG("MTC_SndRcmModemStateInd: Alloc Msg Fail!");
        return;
    }

    PS_MEM_SET(((VOS_UINT8*)pstModemState) + VOS_MSG_HEAD_LENGTH, 0, sizeof(MTC_RCM_MODEM_STATE_NOTIFY_STRU) - VOS_MSG_HEAD_LENGTH);

    /* 填充消息头 */
    MTC_CFG_RCM_MSG_HDR(&pstModemState->stMsgHeader, ID_MTC_RCM_MODEM_STATUS_NOTIFY);

    /* 填写modem0和modem1的状态信息 */
    for (enModemId = 0; enModemId < MODEM_ID_BUTT ; enModemId++)
    {
        pstModemState->astModemState[enModemId].enCsSrvConnState        = MTC_GetCsConnStateInfo(enModemId);
        pstModemState->astModemState[enModemId].enPsSrvConnState        = MTC_GetPsConnStateInfo(enModemId);
        pstModemState->astModemState[enModemId].enModemPowerState       = MTC_GetModemPowerState(enModemId);
        pstModemState->astModemState[enModemId].enUsimmCardState        = MTC_GetUsimmStateInfo(enModemId);
        pstModemState->astModemState[enModemId].enModemType             = MTC_RCM_MODEM_0 + enModemId;
    }

    /* 填写CDMA状态信息 */
    pstModemState->astModemState[MTC_RCM_MODEM_CDMA].enCsSrvConnState   = MTC_GetOutSideCsConnStateInfo(MTC_OUTSIDE_MODEM_CDMA);
    pstModemState->astModemState[MTC_RCM_MODEM_CDMA].enPsSrvConnState   = MTC_GetOutSidePsConnStateInfo(MTC_OUTSIDE_MODEM_CDMA);
    pstModemState->astModemState[MTC_RCM_MODEM_CDMA].enModemPowerState  = MTC_GetOutSideModemPowerState(MTC_OUTSIDE_MODEM_CDMA);
    pstModemState->astModemState[MTC_RCM_MODEM_CDMA].enUsimmCardState   = MTC_GetOutSideModemUsimmState(MTC_OUTSIDE_MODEM_CDMA);
    pstModemState->astModemState[MTC_RCM_MODEM_CDMA].enModemType        = MTC_RCM_MODEM_CDMA;

    /* 发送消息 */
    MTC_SEND_MSG(pstModemState);

    return;
}
PS_BOOL_ENUM_UINT8 MTC_ProcB39B32IntrusionStrategy(VOS_VOID)
{
    RRC_MTC_MS_BAND_INFO_STRU          *pstSerCellBandInfo = VOS_NULL_PTR;
    VOS_UINT32                          ulB39Ret;
    MTC_MODEM_POWER_STATE_ENUM_UINT8    enModem1PowerState;
    TAF_MTC_SRV_CONN_STATE_ENUM_UINT8   enModem0PsState;
    TAF_MTC_SRV_CONN_STATE_ENUM_UINT8   enModem1PsState;
    TAF_MTC_SRV_CONN_STATE_ENUM_UINT8   enModem1CsState;
    TAF_MTC_SRV_CONN_STATE_ENUM_UINT8   enModem0CsState;

    /* 初始化 */
    enModem0PsState     = TAF_MTC_SRV_CONN_STATE_BUTT;
    enModem0CsState     = TAF_MTC_SRV_CONN_STATE_BUTT;
    enModem1PsState     = TAF_MTC_SRV_CONN_STATE_BUTT;
    enModem1CsState     = TAF_MTC_SRV_CONN_STATE_BUTT;
    ulB39Ret            = PS_FALSE;
    enModem1PowerState  = MTC_MODEM_POWER_STATE_BUTT;

    /* 判断modem1是否开机 */
    enModem1PowerState =  MTC_GetModemPowerState(MODEM_ID_1);
    if (MTC_MODEM_POWER_OFF == enModem1PowerState)
    {
        /* 打孔方案不生效 */
        return PS_FALSE;
    }

    /* 判断主卡是否存在B39 */
    pstSerCellBandInfo = MTC_GetModemSerCellBandInfo(MODEM_ID_0);
    ulB39Ret = MTC_BAND_CHECK64(*((VOS_UINT64 *)&(pstSerCellBandInfo->aulBandInfo[0])), MTC_BAND_MASK_B39);
    if (VOS_FALSE == ulB39Ret)
    {
        /* 打孔方案不生效 */
        return PS_FALSE;
    }

    /* 判断主副卡的业务状态 */
    enModem0PsState = MTC_GetPsConnStateInfo(MODEM_ID_0);
    enModem0CsState = MTC_GetCsConnStateInfo(MODEM_ID_0);
    enModem1PsState = MTC_GetPsConnStateInfo(MODEM_ID_1);
    enModem1CsState = MTC_GetCsConnStateInfo(MODEM_ID_1);

    /* 主卡存在CS,则打孔方案不生效 */
    if (TAF_MTC_SRV_EXIST == enModem0CsState)
    {
        return PS_FALSE;
    }

    /* 副卡CS, 则打孔方案生效 */
    if (TAF_MTC_SRV_EXIST == enModem1CsState)
    {
        return PS_TRUE;
    }

    /* 主卡PS,副卡IDLE, 则打孔方案生效 */
    if ( (TAF_MTC_SRV_EXIST == enModem0PsState)
      && ( (TAF_MTC_SRV_EXIST != enModem1CsState)
         && (TAF_MTC_SRV_EXIST != enModem1PsState) ) )
    {
        return PS_TRUE;
    }

    /* 其它情况打孔方案不生效 */
    return PS_FALSE;
}