VOS_VOID NAS_ERABM_RcvRabmEmmRrcConRelInd( VOS_VOID ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmRrcConRelInd is entered."); NAS_ERABM_TimerStop( NAS_ERABM_WAIT_RB_RESUME_TIMER); NAS_ERABM_TimerStop( NAS_ERABM_WAIT_RB_REEST_TIMER); NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /*停止建立等待定时器*/ NAS_ERABM_TimerStop(NAS_ERABM_WAIT_EPSB_ACT_TIMER); /*清除等待承载建立标识 */ NAS_ERABM_SetWaitEpsBActSign(NAS_ERABM_NOT_WAIT_EPSB_ACT_MSG); /* 如果在正常模式下 */ if (NAS_ERABM_MODE_TYPE_NORMAL == NAS_ERABM_GetMode()) { /* 通知L2释放缓存的数据包 */ /*APPITF_FreeAllofRabmBuf();*/ /* 异系统切换成功后,RRC会上报链路释放清DRB,但此场景不能通知CDS清缓存 */ if (NAS_ERABM_L_MODE_STATUS_NORMAL == NAS_ERABM_GetLModeStatus()) { /* (1)如果当前有上行Pending 标识,即有数据缓存,则给CDS发释放缓存 */ /* (2)存在已激活DRB,则给CDS发释放缓存 */ if((EMM_ERABM_UP_DATA_PENDING == NAS_ERABM_GetUpDataPending()) || ((NAS_ERABM_FAILURE == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) && (NAS_ERABM_NULL != NAS_ERABM_GetActiveEpsBearerNum()))) { /* 通知CDS释放缓存的数据包 */ NAS_ERABM_SndErabmCdsFreeBuffDataInd(); /* 清除上行数据阻塞标志 */ NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING); } } } else /*环回模式下不清理缓存,保持原上行数据Pending状态*/ { NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmRrcConRelInd: Do not release buffer ."); } /* 释放所有RB */ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId<= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { NAS_ERABM_RcvRbRelease(ulEpsbId); } return; }
CDS_ERABM_TRANSFER_RESULT_ENUM_UINT32 CDS_ERABM_GetDrbId ( VOS_UINT8 ucEpsbId, VOS_UINT8 *pucDrbId ) { /* 上行收到数据包增加统计 */ NAS_ERABM_AddUlReceivePackageNum(); /* 输入参数合法性检测 */ if (VOS_NULL_PTR == pucDrbId) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetDrbId:pucDrbId is NULL!"); /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); return PS_FAIL; } if ((ucEpsbId < NAS_ERABM_MIN_EPSB_ID) || (ucEpsbId > NAS_ERABM_MAX_EPSB_ID)) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetDrbId:EpsbId is illegal!"); /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); return CDS_ERABM_TRANSFER_RESULT_FAIL; } if (NAS_ERABM_RB_CONNECTED == NAS_ERABM_GetRbStateInfo(ucEpsbId)) { *pucDrbId = (VOS_UINT8)NAS_ERABM_GetEpsbRbIdInfo(ucEpsbId); /* 增加上行发送总数据包数 */ NAS_ERABM_AddUlSendPackageNum(); /* 增加承载上行发送总数据包数 */ NAS_ERABM_AddBearerSendPackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_SUCC; } else if(NAS_ERABM_RB_SUSPENDED == NAS_ERABM_GetRbStateInfo(ucEpsbId)) { /* 设置上行数据阻塞标志*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_UP_DATA_PENDING); NAS_ERABM_LOG1("CDS_ERABM_GetDrbId:DRB_SUSPENDED, set data pending = ",NAS_ERABM_GetUpDataPending()); *pucDrbId = (VOS_UINT8)NAS_ERABM_GetEpsbRbIdInfo(ucEpsbId); /* 增加上行Suspend总数据包数 */ NAS_ERABM_AddUlSuspendPackageNum(); /* 增加承载上行Suspend总数据包数 */ NAS_ERABM_AddBearerSuspendPackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_DRB_SUSPEND; } else { /* 判断是否处于连接态 */ if (NAS_ERABM_SUCCESS == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) { /* 设置上行数据阻塞标志*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_UP_DATA_PENDING); NAS_ERABM_LOG1("CDS_ERABM_GetDrbId:AllActtiveBearerWithoutDrb, set data pending = ",NAS_ERABM_GetUpDataPending()); /* 增加上行IDLE总数据包数 */ NAS_ERABM_AddUlIdlePackageNum(); /* 增加承载上行IDLE总数据包数 */ NAS_ERABM_AddBearerIdlePackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_IDLE; } /* 对于当前处于连接态,但承载对应的DRB不存在这种暂态,暂时先返回 CDS_ERABM_TRANSFER_RESULT_FAIL,由CDS释放内存,后续优化时再返回 CDS_ERABM_TRANSFER_RESULT_DRB_NOT_EXIST,由CDS负责缓存数据包。*/ /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); /* 承载上行丢弃数据包增加统计 */ NAS_ERABM_AddBearerDiscardPackageNum((VOS_UINT32)ucEpsbId); return APP_ERABM_TRANSFER_RESULT_FAIL; } }
EMM_ERABM_UP_DATA_PENDING_ENUM_UINT32 NAS_ERABM_IsDataPending( VOS_VOID ) { /* 根据CDS记录是否有上行缓存数据,以及RABM记录是否有上行数据PENDING共同决定 */ return (EMM_ERABM_UP_DATA_PENDING_ENUM_UINT32)(CDS_IsPsDataAvail()||NAS_ERABM_GetUpDataPending()); }