📄 cdatams.cpp
字号:
}
////设置移动台是否已经加入成功接纳DCH移动台队列的标志
void CDataMs::SetIsInAdmittedList(bool bIsInAdmittedList)
{
m_bIsInAdmittedList = bIsInAdmittedList;
}
////获取Rate结构体指针
RATE2CI_TYPE* CDataMs::GetpstRate(void)
{
return m_pstRate;
}
////读取移动台当前是否在传输的标志
bool CDataMs::IsTransmitNow(void)
{
return m_bIsTransNow;
}
////读取移动台数据队列是否为空的标志
bool CDataMs::IsDataQueueEmpty(void)
{
return ( m_lDataQueueSize > 0 )? false:true;
}
////获取数据队列为空计时器的取值
int CDataMs::GetDataQueueEmptyTimer(void)
{
return m_iDataQueueEmptyTimer;
}
////设置数据队列为空计时器的取值
void CDataMs::SetDataQueueEmptyTimer(int iDataQueueTimer)
{
m_iDataQueueEmptyTimer = iDataQueueTimer;
}
////读取移动台成功传输比特数
long CDataMs::GetTotalSucfulBitNum(void)
{
return m_lTotalSucfulBitNum;
}
////读取移动台失败传输比特数 20051206
long CDataMs::GetTotalFailedBitNum(void)
{
return m_lTotalFailedBitNum;
}
////读取移动台成功传输的传输块数
int CDataMs::GetTotalSucfulBLNum(void)
{
return m_iTotalSucfulBLNum;
}
////读取移动台传输失败的传输块数
int CDataMs::GetTotalFailedBLNum(void)
{
return m_iTotalFailedBLNum;
}
////读取移动台AST计时器
int CDataMs::GetASTTimer(void)
{
return m_iASTTimer;
}
////设置移动台AST计时器
void CDataMs::SetASTTimer(int iTimer)
{
m_iASTTimer = iTimer;
}
////读取移动台Active Session Throughput
float CDataMs::GetAST(void)
{
return m_fAST;
}
////读取移动台吞吐量
float CDataMs::GetThrput(void)
{
return m_fServiceThrput;
}
////读取移动台成功传输的分组数
int CDataMs::GetTotalSucfulPacketNum(void)
{
return m_iTotalSucfulPacketNum;
}
////读取移动台传输失败的分组数
int CDataMs::GetTotalFailedPacketNum(void)
{
return m_iTotalFailedPacketNum;
}
////计算分组错误率
float CDataMs::GetPacketErrorRate(void)
{
m_fPacketErrorRate = float( m_iTotalFailedPacketNum/(m_iTotalFailedPacketNum + m_iTotalSucfulPacketNum) );
return m_fPacketErrorRate;
}
////读取和服务扇区的最近距离
float CDataMs::GetClosestSecDistance(void)
{
return m_fClosestServingSecDistance;
}
////计算分组时延
int CDataMs::GetTotalPacketDelay(void)
{
return m_iTotalPacketDelay;
}
////计算平均分组时延
float CDataMs::GetAveragePacketDelay(void)
{
return m_fAveragePacketDelay;
}
////读取分组呼叫传输成功比特数
long CDataMs::GetTotalPCSucfulBitNum(void)
{
return m_lTotalSucfulPCBitNum;
}
////读取分组呼叫时延数,以时隙为单位
int CDataMs::GetTotalPCDelay(void)
{
return m_iPacketCallDelay;
}
//读取平均分组时延,以s为单位
float CDataMs::GetAveragePCDelay(void)
{
return m_fAveragePCDelay;
}
////返回分组呼叫数
int CDataMs::GetTotalPCNum(void)
{
return m_iPacketCallNum;
}
////读取当前分组是否结束标志
bool CDataMs::GetIsCurrentPacketOver(void)
{
return m_bIsCurrentPacketOver;
}
////读取当前分组呼叫是否结束标志
bool CDataMs::GetIsCurrentPCOver(void)
{
return m_bIsCurrentPCOver;
}
////读取当前TTI内传对的比特数
int CDataMs::GetTTISucfulBitNum(void)
{
return m_iTTISucfulBitNum;
}
////读取当前TTI传输成功的传输块数
int CDataMs::GetTTISucfulBLNum(void)
{
return m_iTTISucfulBLNum;
}
////读取当前TTI
int CDataMs::GetTTIFailedBLNum(void)
{
return m_iTTIFailedBLNum;
}
////读取当前TTI内传输成功分组数
int CDataMs::GetTTISucfulPacketNum(void)
{
return m_iTTISucfulPacketNum;
}
////读取当前TTI内传输失败分组数
int CDataMs::GetTTIFailedPacketNum(void)
{
return m_iTTIFailedPacketNum;
}
////读取当前分组时延
int CDataMs::GetCurrentPacketDelay(void)
{
return m_iCurrentPacketDelay;
}
////读取当前分组呼叫时延
int CDataMs::GetCurrentPCDelay(void)
{
return m_iCurrentPCDelay;
}
////读取当前分组呼叫比特数
long CDataMs::GetCurrentPCBitNum(void)
{
return m_lCurrentPCBitNum;
}
//用于数据DCH用户drop的接口函数 add by slj
////读取DCH用户drop计时器值
int CDataMs::GetDCHDropTimer()
{
return m_iDCHDropTimer;
}
////设置DCH用户drop计时器值
void CDataMs::SetDCHDropTimer(int a)
{
m_iDCHDropTimer=a;
}
////读取DCH用户是否drop
bool CDataMs::DCHIsDropped()
{
return m_bDCHIsDropped;
}
////设置DCH用户是否drop标志
void CDataMs::SetDCHIsDropped(bool flag)
{
m_bDCHIsDropped=flag;
}
////读取DCH用户已经服务时隙数
int CDataMs::GetDCHServicedSlot()
{
return m_iDCHServicedSlot;
}
////设置DCH用户已经服务时隙数
void CDataMs::SetDCHServicedSlot(int a)
{
m_iDCHServicedSlot=a;
}
////private functions:
////b导频强度测量相关方法
/////////////////////////////////////////////////////////////////////////
//
// TITLE: DCH信道初始化函数
//
// PURPOSE: 清除原有属性,初始化DCH信道
//
// SAMPLE CALL: pHttpDataMs->DCHInitialize();
//
// CALLED BY FUNCTIONS: CDataMs::BestSecStrenMonitor()
//
// CALLING FUNCTIONS:
//
// AUTHOR: Chen Meiya
//
// DATE: 04/04(MM/YY)
//
// MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::DCHInitialize(void)
{
//清除信道状态相关属性
m_iHSDSCHPriority = -1;
m_iBestSecTimer = 0;
m_bIsInAdmittedList = false;
//设置DCH信道相关属性
m_iAdmitTimer = 7500;
m_bIsBlocked = false;
m_bIsAdmitted = false;
m_enCHSwitchState = NOSWITCH;
//清除激活集链表
POSITION postemp;
postemp = m_ActiveSetList.GetHeadPosition();
while (postemp != NULL)
{
delete m_ActiveSetList.GetNext(postemp);
}
m_ActiveSetList.RemoveAll();
//释放DCH信道功率,清除激活集消息队列
ReleaseDCHPower();
//清除软切换消息队列
postemp = m_SoftHandoffMessageList.GetHeadPosition();
while (postemp != NULL) //到链表尾则结束循环
{
delete m_SoftHandoffMessageList.GetNext(postemp);
}
m_SoftHandoffMessageList.RemoveAll();
//清除传输块相关属性
m_pstTFI = NULL;
m_pstRate = NULL;
m_bIsTransNow = false;
m_iSlotNumRemained = 0;
m_fRatePredictC2I = 0;
m_fTTIBLER = 0;
for ( int itemp = 0; itemp<MAXBLNUM; itemp++ )
{
m_iaBLTransNum[ itemp ] = 0; //TTI内各传输块的传输次数置零
}
for( itemp = 0; itemp < MAXTTISLOTNUM; ++itemp )
{
m_fSlotC2IindB[itemp] = 0.0; //TTI内各时隙C2I清零
}
//设定用户类型
m_pMsManager->m_iSwitchCounter++; //累加切换的次数
//设定传输块相关属性
RATEandTFIPredict(); //得到下行链路速率和TFI
//初始化处在DCH信道移动台的激活集,其中包括了对最佳扇区的接纳控制
InitActiveSet();
//Modified by Li Jing,20040714
if(m_bIsAdmitted)
{
BLERInitialization();
}
else
{
//do nothing
}
//有关DCH用户drop判断的初始化 add by slj
m_bDCHIsDropped = false; //初始化DCH用户未Drop
m_iDCHDropTimer = 0; //初始化DCH用户Drop计时器
m_iDCHServicedSlot = 0; //初始化DCH用户已经服务的时隙数
}
/////////////////////////////////////////////////////////////////////////
//
// TITLE: HSDSCH初始化函数
//
// PURPOSE: 清除相关属性,设定移动台处在HSDSCH信道
//
// SAMPLE CALL: pHttpDataMs->HSDSCHInitialize()
//
// CALLED BY FUNCTIONS:
//
// CALLING FUNCTIONS:
//
// AUTHOR: zhang lin
//
// DATE: 04/05(MM/YY)
//
// MODIFICATIONS SINCE 04/05(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::HSDSCHInitialize(void)
{
//清除信道状态相关属性
m_iAdmitTimer = 7500;
m_bIsBlocked = false;
m_bIsAdmitted = false;
m_iBestSecTimer = 0;
m_enCHSwitchState = NOSWITCH;
//清除激活集链表
POSITION postemp;
postemp = m_ActiveSetList.GetHeadPosition();
while (postemp != NULL)
{
delete m_ActiveSetList.GetNext(postemp);
}
m_ActiveSetList.RemoveAll();
//清除软切换消息队列
postemp = m_SoftHandoffMessageList.GetHeadPosition();
while (postemp != NULL)
{
delete m_SoftHandoffMessageList.GetNext(postemp);
}
m_SoftHandoffMessageList.RemoveAll();
//清除传输块相关属性
//m_pstHSRate2CI = NULL;
m_bIsTransNow = false;
m_iSlotNumRemained = 0;
m_fCurrentC2I = 0;
m_fTTIBLER = 0.;
for( int itemp = 0; itemp < HSDSCHTTISLOTNUM; ++itemp )
{
m_fHSDSCHSlotC2IindB[itemp] = 0.0; //TTI内各时隙C2I清零
}
//数据移动台的子信道初始化
m_iFreeSAWProcess=MAXSAWCHANNELNUM; //空闲子信道数为最大子信道数
m_iPrevChannelIndex=(int)-1;
m_iCurrChannelIndex=(int)-1;
for ( int i=0;i < MAXSAWCHANNELNUM;i++)
{
m_stSAWChannel[i].bNewDataIndicator=true;
m_stSAWChannel[i].bIsTTIGood=false;
m_stSAWChannel[i].iFeedbackTimer=0;
m_stSAWChannel[i].iTransCounter=0;
m_stSAWChannel[i].fChannelC2I=0.0;
m_stSAWChannel[i].pstRate2CI=NULL;
}
bool m_bIsTTIGood=false;
// m_pLinkPrediction->HSInitialization(); //by slj
}
/////////////////////////////////////////////////////////////////////////
//
// TITLE: DCHToDCH切换处理函数
//
// PURPOSE: 根据最佳导频对DCH移动台进行处理
// 移动台持续对DCH进行接纳控制或者接入到新的最佳扇区的DCH信道中
//
// SAMPLE CALL: pHttpDataMs->DCHToDCHProcess(int,int)
//
// CALLED BY FUNCTIONS: CDataMs::BestSecStrenMonitor()
//
// CALLING FUNCTIONS: CDataMs::DCHInitialize()
//
// AUTHOR: Chen Meiya
//
// DATE: 04/04(MM/YY)
//
// MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::DCHToDCHProcess( int iPreviousBestSecIndex, int iCurrentBestSecIndex )
{
if( m_bIsAdmitted == true )
{
//f.WriteString("在上一时隙移动台接纳控制成功,本时隙没有操作!\n");
//上一次成功接入最佳扇区的DCH信道,相关的操作在软切换中实现
}
else
{
//移动台可能处在DCHTODCH状态、DCHTODSCH状态、NOSWITCH状态
if( m_enCHSwitchState == NOSWITCH )
{
//f.WriteString("移动台处在NOSWITCH状态!\n");
//进行了DCH信道初始化,但是没有成功接入
if( iPreviousBestSecIndex == iCurrentBestSecIndex )
{
//f.WriteString("持续接入最佳导频DCH信道!\n");
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -