VOS_VOID MTC_ProcNarrowDcsStrategy(VOS_VOID) { MTC_MODEM_POWER_STATE_ENUM_UINT8 enGModemPowerState; #if 0 MTC_INTRUSION_GSM_BAND_STATE_ENUM_UINT8 enGsmBandState; PS_BOOL_ENUM_UINT8 enWithB31Flag; PS_BOOL_ENUM_UINT8 enWithB32Flag; #endif enGModemPowerState = MTC_GetModemPowerState(MODEM_ID_1); /* G modem未开机时 */ if (MTC_MODEM_POWER_ON != enGModemPowerState) { /* 去使能Narrow band dcs */ MTC_ChangeNarrowBandDcsState(PS_FALSE); return; } else { MTC_ChangeNarrowBandDcsState(PS_TRUE); return; } #if 0 /* 获取G modem的频段状态 */ enGsmBandState = MTC_GetModem1GsmBandState(); /* 不存在任何频段 */ if (MTC_INTRUSION_GSM_BAND_NONE == enGsmBandState) { /* 去使能Narrow band dcs */ MTC_ChangeNarrowBandDcsState(PS_FALSE); return; } /* 1. 仅存在频段B31,需要Narrow Band Dcs 2. 存在频段B31以及其他频段,需要Narrow Band Dcs */ enWithB31Flag = MTC_CheckGsmWithB31(MTC_GetModemCurBandInfo(MODEM_ID_1)); enWithB32Flag = MTC_CheckGsmWithB32(MTC_GetModemCurBandInfo(MODEM_ID_1)); /* 存在B31且不存在B32的场景下,需要Narrow Band Dcs */ if ((PS_TRUE == enWithB31Flag) && (PS_FALSE == enWithB32Flag)) { /* 使能Narrow band dcs */ MTC_ChangeNarrowBandDcsState(PS_TRUE); } else { /* 去使能Narrow band dcs */ MTC_ChangeNarrowBandDcsState(PS_FALSE); } return; #endif }
VOS_VOID MTC_ProcNotchStrategy(VOS_VOID) { MTC_MODEM_POWER_STATE_ENUM_UINT8 enModem0PowerState; MTC_MODEM_POWER_STATE_ENUM_UINT8 enModem1PowerState; MTC_INTRUSION_GSM_BAND_STATE_ENUM_UINT8 enGsmBandState; MTC_INTRUSION_TL_BAND_STATE_ENUM_UINT8 enTLBandState; PS_BOOL_ENUM_UINT8 enWithB3Flag; PS_BOOL_ENUM_UINT8 enWithB34B39Flag; /* 获取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) ) { /* 两个Modem未同时开机时需要复位Notch功能 */ MTC_ChangeNotchState(PS_FALSE); return; } /* 两个Modem同时开机,但其中一个或两个Modem不存在任何频段,需要使能Notch */ enGsmBandState = MTC_GetModem1GsmBandState(); enTLBandState = MTC_GetModem0TLBandState(); if ( (MTC_INTRUSION_GSM_BAND_NONE == enGsmBandState) || (MTC_INTRUSION_TL_BAND_NONE == enTLBandState) ) { MTC_ChangeNotchState(PS_TRUE); return; } enWithB3Flag = MTC_CheckGsmWithB3(MTC_GetModemCurBandInfo(MODEM_ID_1)); enWithB34B39Flag = MTC_CheckTLWithB34B39(MTC_GetModemCurBandInfo(MODEM_ID_0)); /* GSM B3和TL B34/B39同时存在时需要使能Notch,否则复位Notch */ if (PS_TRUE == (enWithB3Flag & enWithB34B39Flag)) { MTC_ChangeNotchState(PS_TRUE); } else { MTC_ChangeNotchState(PS_FALSE); } return; }
VOS_VOID MTC_DEBUG_TraceNotchInfo(VOS_VOID) { MTC_MSG_BUF_STRU *pstBufAddr = VOS_NULL_PTR; RRC_MTC_MS_BAND_INFO_STRU *pstBandInfo = VOS_NULL_PTR; RRC_MTC_MS_BAND_INFO_STRU *pstNcellBandInfo = VOS_NULL_PTR; MTC_DEBUG_ALL_MODEM_NOTCH_INFO_STRU stDebugNotchInfo; MODEM_ID_ENUM_UINT16 enModemId; PS_MEM_SET(&stDebugNotchInfo, 0x0, sizeof(MTC_DEBUG_ALL_MODEM_NOTCH_INFO_STRU)); /* 填写消息头 */ MTC_DEBUG_CFG_MSG_HDR(&stDebugNotchInfo.stMsgHeader, UEPS_PID_MTC, UEPS_PID_MTC, sizeof(MTC_DEBUG_ALL_MODEM_NOTCH_INFO_STRU) - VOS_MSG_HEAD_LENGTH); stDebugNotchInfo.stMsgHeader.ulMsgName = ID_DEBUG_MTC_NOTCH_INFO; for (enModemId = 0; enModemId < MODEM_ID_BUTT; enModemId++) { pstBufAddr = MTC_GetBufAddr(enModemId); pstBandInfo = MTC_GetModemCurBandInfo(enModemId); pstNcellBandInfo = MTC_GetModemNCellBandInfo(enModemId); PS_MEM_CPY(&stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBandInfo, pstBandInfo, sizeof(RRC_MTC_MS_BAND_INFO_STRU)); PS_MEM_CPY(&stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufBandInfo.stModemBandInfo, &pstBufAddr->stBufBandInfoMsg.stIntrusionBandInfoMsg.stCurBandInfo, sizeof(RRC_MTC_MS_BAND_INFO_STRU)); PS_MEM_CPY(&stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufNCellFreqInfo.stLteNcellFreqInfo, &pstBufAddr->stBufUsingFreqInfoMsg.stUsingFreqInfoMsg.stLteFreqInfo, sizeof(RRC_MTC_LTE_NCELL_INFO_STRU)); PS_MEM_CPY(&stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufNCellFreqInfo.stTdsNcellFreqInfo, &pstBufAddr->stBufUsingFreqInfoMsg.stUsingFreqInfoMsg.stTdsFreqInfo, sizeof(RRC_MTC_TDS_NCELL_INFO_STRU)); stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufNCellFreqInfo.ucBufNcellBandFlag = pstBufAddr->stBufUsingFreqInfoMsg.enExitBufMsgFlag; stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufNCellFreqInfo.ulSndPid = pstBufAddr->stBufUsingFreqInfoMsg.stUsingFreqInfoMsg.stMsgHeader.ulSenderPid; stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufBandInfo.ucBufBandInfoFlag = pstBufAddr->stBufBandInfoMsg.enExitBufMsgFlag; stDebugNotchInfo.stModemNotchInfo[enModemId].stModemBufInfo.stBufBandInfo.ulSndPid = pstBufAddr->stBufBandInfoMsg.stIntrusionBandInfoMsg.stMsgHeader.ulSenderPid; PS_MEM_CPY(&stDebugNotchInfo.stModemNotchInfo[enModemId].stModemNcellBandInfo, pstNcellBandInfo,sizeof(RRC_MTC_MS_BAND_INFO_STRU)); } /* 发送消息 */ MTC_DEBUG_TraceEvent(&stDebugNotchInfo); return; }
MTC_INTRUSION_TL_BAND_STATE_ENUM_UINT8 MTC_GetModem0TLBandState(VOS_VOID) { RRC_MTC_MS_BAND_INFO_STRU *pulBandInfo = VOS_NULL_PTR; pulBandInfo = MTC_GetModemCurBandInfo(MODEM_ID_0); /* 通过读取Bit位获取当前Band状态 */ if ( (0 == pulBandInfo->aulBandInfo[0]) && (0 == pulBandInfo->aulBandInfo[1]) ) { return MTC_INTRUSION_TL_BAND_NONE; } else if (0 != (pulBandInfo->aulBandInfo[1] & (1 << MTC_BAND_B39_BIT))) { return MTC_INTRUSION_TL_BAND_WITH_B39; } else { return MTC_INTRUSION_TL_BAND_WITHOUT_B39; } }
MTC_INTRUSION_GSM_BAND_STATE_ENUM_UINT8 MTC_GetModem1GsmBandState(VOS_VOID) { VOS_UINT32 ulLoop; VOS_UINT32 ulLineNum; VOS_UINT8 ucBand31; VOS_UINT8 ucBand32; VOS_UINT8 ucBandOther; RRC_MTC_MS_BAND_INFO_STRU *pulBandInfo = VOS_NULL_PTR; MTC_INTRUSION_GSM_BAND_STATE_ENUM_UINT8 enGsmBandState; pulBandInfo = MTC_GetModemCurBandInfo(MODEM_ID_1); /* 通过读取Bit位获取当前Band状态 */ if (0 != (pulBandInfo->aulBandInfo[0] & (1 << MTC_BAND_B31_BIT))) { ucBand31 = VOS_TRUE; } else { ucBand31 = VOS_FALSE; } if (0 != (pulBandInfo->aulBandInfo[0] & ((VOS_UINT32)1 << MTC_BAND_B32_BIT))) { ucBand32 = VOS_TRUE; } else { ucBand32 = VOS_FALSE; } if ( (0 != (pulBandInfo->aulBandInfo[0] & MTC_BAND_WITHOUT_B3)) || (0 != pulBandInfo->aulBandInfo[1]) ) { ucBandOther = VOS_TRUE; } else { ucBandOther = VOS_FALSE; } /* 通过查表获取当前GSM频段状态 */ enGsmBandState = MTC_INTRUSION_GSM_BAND_STATE_BUTT; ulLineNum = sizeof(g_stMtcIntrusionGsmBandStateTbl) / sizeof(MTC_INTRUSION_GSM_BAND_STATE_STRU); for (ulLoop = 0; ulLoop < ulLineNum; ulLoop++) { if (g_stMtcIntrusionGsmBandStateTbl[ulLoop].ucBand31 != ucBand31) { continue; } if (g_stMtcIntrusionGsmBandStateTbl[ulLoop].ucBand32 != ucBand32) { continue; } if (g_stMtcIntrusionGsmBandStateTbl[ulLoop].ucBandOther != ucBandOther) { continue; } enGsmBandState = g_stMtcIntrusionGsmBandStateTbl[ulLoop].enGsmBandState; break; } return enGsmBandState; }