VOS_VOID MTC_ProcIntrusionStrategy(VOS_VOID)
{
    MTC_MODEM_POWER_STATE_ENUM_UINT8        enModem0PowerState;
    MTC_MODEM_POWER_STATE_ENUM_UINT8        enModem1PowerState;
    VOS_UINT32                              ulLoop;
    VOS_UINT32                              ulLineNum;
    MTC_INTRUSION_GSM_BAND_STATE_ENUM_UINT8 enGsmBandState;
    MTC_INTRUSION_TL_BAND_STATE_ENUM_UINT8  enTLBandState;
    MTC_CS_SERVICE_STATE_ENUM_UINT8         enCsSrvState;
    FUNC_VOID                               pFunc           = VOS_NULL_PTR;

    /* 获取Modem0与Modem1的开机状态,只有在同时开机的情况下才进行裁决 */
    enModem0PowerState  = MTC_GetModemPowerState(MODEM_ID_0);
    enModem1PowerState  = MTC_GetModemPowerState(MODEM_ID_1);
    if ( (MTC_MODEM_POWER_ON != enModem0PowerState)
      || (MTC_MODEM_POWER_ON != enModem1PowerState) )
    {
        return;
    }

    /* 获取本地存储的频段信息,查询裁决策略表,执行对应操作 */
    ulLineNum       = sizeof(g_astMtcIntrusionRulingStrategyTbl) / sizeof(MTC_INTRUSION_RULING_STRATEGY_STRU);
    enGsmBandState  = MTC_GetModem1GsmBandState();
    enTLBandState   = MTC_GetModem0TLBandState();
    enCsSrvState    = MTC_GetModemCsSrvExistFlg(MODEM_ID_1);

    for (ulLoop = 0; ulLoop < ulLineNum; ulLoop++)
    {
        if (g_astMtcIntrusionRulingStrategyTbl[ulLoop].enGsmBandState != enGsmBandState)
        {
            continue;
        }

        if (g_astMtcIntrusionRulingStrategyTbl[ulLoop].enTLBandState != enTLBandState)
        {
            continue;
        }

        if (MTC_CS_SERVICE_STATE_BUTT != g_astMtcIntrusionRulingStrategyTbl[ulLoop].enCsSrvState)
        {
            if (enCsSrvState != g_astMtcIntrusionRulingStrategyTbl[ulLoop].enCsSrvState)
            {
                continue;
            }
        }

        pFunc = g_astMtcIntrusionRulingStrategyTbl[ulLoop].pFunc;

        break;
    }

    if (VOS_NULL_PTR != pFunc)
    {
        pFunc();
    }

    return;
}
Пример #2
0
VOS_VOID MTC_RcvTafCsSrvInfoInd(VOS_VOID *pMsg)
{
    VOS_UINT32                          ulPid;
    MODEM_ID_ENUM_UINT16                enModemId;
    TAF_MTC_CS_SERVICE_INFO_IND_STRU   *pstCsSrvInfo = VOS_NULL_PTR;
    MTC_CS_SERVICE_STATE_ENUM_UINT8     enCsSrvStateOld;
    MTC_CS_SERVICE_STATE_ENUM_UINT8     enCsSrvStateNew;
    MTC_CFG_ENUM_UINT8                  enIntrusionCfg;

    pstCsSrvInfo    = (TAF_MTC_CS_SERVICE_INFO_IND_STRU *)pMsg;
    ulPid           = pstCsSrvInfo->stMsgHeader.ulSenderPid;
    enIntrusionCfg  = MTC_GetIntrusionCfg();

    /* 根据 Pid获取modem ID */
    enModemId       = VOS_GetModemIDFromPid(ulPid);
    if (enModemId >= MODEM_ID_BUTT)
    {
        MTC_ERROR_LOG("MTC_RcvMmaPowerStateInd: Modem ID Err.");
        return;
    }

    /* 先获取原CS域服务状态 */
    enCsSrvStateOld = MTC_GetModemCsSrvExistFlg(enModemId);

    /* 更新modem 信息中CS域业务状态 */
    MTC_SetModemCallSrvExistFlg(enModemId, pstCsSrvInfo->ucCallSrvExistFlg);
    MTC_SetModemSmsSrvExistFlg(enModemId, pstCsSrvInfo->ucSmsSrvExistFlg);
    MTC_SetModemSsSrvExistFlg(enModemId, pstCsSrvInfo->ucSsSrvExistFlg);

    /* 在获取当前CS域服务状态 */
    enCsSrvStateNew = MTC_GetModemCsSrvExistFlg(enModemId);

    /* 可维可测信息记录 */
    MTC_DEBUG_RcvCsSrvInfoInd(enModemId);

    /* 如果Modem1的CS域服务状态发生变化,且干扰控制特性开启,则需要触发干扰控制裁决 */
    if ( (MODEM_ID_1 == enModemId)
            && (enCsSrvStateNew != enCsSrvStateOld)
            && (MTC_CFG_ENABLE == enIntrusionCfg) )
    {
        MTC_ProcIntrusionStrategy();
    }

    return;
}