VOS_UINT32 ADS_UL_RcvCdsClearDataInd(MsgBlock *pMsg) { VOS_UINT8 ucRabId; ADS_UL_CTX_STRU *pstAdsUlCtx; CDS_ADS_CLEAR_DATA_IND_STRU *pstClearData; VOS_UINT8 ucInstanceIndex; pstClearData = (CDS_ADS_CLEAR_DATA_IND_STRU *)pMsg; /* AT接口修改后,获取此值 */ ucInstanceIndex = (VOS_UINT8)pstClearData->enModemId; pstAdsUlCtx = ADS_GetUlCtx(ucInstanceIndex); ucRabId = pstClearData->ucRabId; if (CDS_ADS_ALL_RABID == pstClearData->ucRabId) { for (ucRabId = ADS_RAB_ID_MIN; ucRabId <= ADS_RAB_ID_MAX; ucRabId++) { if (VOS_OK == ADS_UL_IsQueueExistent(ucInstanceIndex, ucRabId)) { /* 销毁队列中的数据 */ ADS_UL_ClearQueue(ucRabId, pstAdsUlCtx->astAdsUlQueue[ucRabId].pstAdsUlLink); } } } else { /* 判断RabId是否为有效值 */ if (VOS_OK == ADS_IsValidRabId(pstClearData->ucRabId)) { /* 结点存在,但队列不存在 */ if (VOS_OK == ADS_UL_IsQueueExistent(ucInstanceIndex, pstClearData->ucRabId)) { /* 销毁队列中的数据 */ ADS_UL_ClearQueue(ucRabId, pstAdsUlCtx->astAdsUlQueue[ucRabId].pstAdsUlLink); } else { ADS_WARNING_LOG(ACPU_PID_ADS_UL, "ADS_UL_RcvCdsClearDataInd:Queue is not exist"); } } else { ADS_WARNING_LOG1(ACPU_PID_ADS_UL, "ADS_UL_RcvCdsClearDataInd: Invalid RabId is", pstClearData->ucRabId); } } /* 回复ID_CDS_ADS_CLEAR_DATA_RSP消息 */ ADS_UL_SendCdsClearDataRsp(pstClearData->enModemId, pstClearData->ucRabId); return VOS_OK; }
VOS_VOID ADS_UL_DestroyQueue( VOS_UINT8 ucInstanceIndex, VOS_UINT8 ucRabId ) { VOS_UINT32 ulLockLevel; ulLockLevel = 0; /* 结点存在但队列为空 */ if (VOS_ERR == ADS_UL_IsQueueExistent(ucInstanceIndex, ucRabId)) { /* Rab Id以及优先级置为无效值 */ ADS_UL_SetQueue(ucInstanceIndex, ucRabId, VOS_FALSE, VOS_NULL_PTR, ADS_QCI_TYPE_BUTT, ADS_PDP_TYPE_BUTT); /* 根据最新的队列管理进行排序 */ ADS_UL_UpdateQueueInPdpDeactived(ucInstanceIndex, ucRabId); return; } /* 队列加锁 */ VOS_SpinLockIntLock(ADS_UL_GET_QUEUE_LINK_SPINLOCK(ucInstanceIndex, ucRabId), ulLockLevel); /* Modified by l60609 for AP适配项目 ,2012-09-10 Begin */ /* 销毁队列中的数据 */ ADS_UL_ClearQueue(ucRabId, ADS_UL_GET_QUEUE_LINK_PTR(ucInstanceIndex, ucRabId)); /* Modified by l60609 for AP适配项目 ,2012-09-10 End */ /* 销毁队列头结点*/ PS_MEM_FREE(ACPU_PID_ADS_DL, ADS_UL_GET_QUEUE_LINK_PTR(ucInstanceIndex, ucRabId)); /* 将队列信息更新到上行上下文 */ ADS_UL_SetQueue(ucInstanceIndex, ucRabId, VOS_FALSE, VOS_NULL_PTR, ADS_QCI_TYPE_BUTT, ADS_PDP_TYPE_BUTT); /* 队列操作完成解锁 */ VOS_SpinUnlockIntUnlock(ADS_UL_GET_QUEUE_LINK_SPINLOCK(ucInstanceIndex, ucRabId), ulLockLevel); /* 根据最新的队列管理进行排序 */ ADS_UL_UpdateQueueInPdpDeactived(ucInstanceIndex, ucRabId); }