From 63013bcb41f1f97c0f26658d5088bf034a9300aa Mon Sep 17 00:00:00 2001 From: Marco Miozzo Date: Mon, 14 Nov 2011 12:25:16 +0100 Subject: [PATCH] Bug-fix UL Allocation Map storing for UL-CQI --- src/lte/model/pf-ff-mac-scheduler.cc | 20 ++++++++++++-------- src/lte/model/rr-ff-mac-scheduler.cc | 16 ++++++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/lte/model/pf-ff-mac-scheduler.cc b/src/lte/model/pf-ff-mac-scheduler.cc index f991898b6..2ed93392f 100644 --- a/src/lte/model/pf-ff-mac-scheduler.cc +++ b/src/lte/model/pf-ff-mac-scheduler.cc @@ -971,25 +971,29 @@ void PfFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters& params) { NS_LOG_FUNCTION (this); - //NS_LOG_DEBUG (this << " RX UL CQI at " << params.m_sfnSf); +// NS_LOG_DEBUG (this << " RX SFNID " << params.m_sfnSf << " delay " << (uint32_t)m_schedTtiDelay); // correlate info on UL-CQIs with previous scheduling -> calculate m_sfnSf of transmission - uint32_t frameNo = (0x3FF & params.m_sfnSf) >> 4; + uint32_t frameNo = (0x3FF & (params.m_sfnSf >> 4)); uint32_t subframeNo = (0xF & params.m_sfnSf); - //NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo); - if (subframeNo - m_schedTtiDelay < 0) +// NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo); + if (subframeNo <= m_schedTtiDelay) { frameNo--; + subframeNo = (10 + subframeNo - m_schedTtiDelay) % 11; + } + else + { + subframeNo = (subframeNo - m_schedTtiDelay) % 11; } - subframeNo = (subframeNo - m_schedTtiDelay) % 10; - //NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo); uint16_t sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo); +// NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo << " sfnSf " << sfnSf); // retrieve the allocation for this subframe std::map >::iterator itMap; std::map >::iterator itCqi; itMap = m_allocationMaps.find (sfnSf); if (itMap == m_allocationMaps.end ()) { - NS_LOG_DEBUG (this << " Does not find info on allocation"); + NS_LOG_DEBUG (this << " Does not find info on allocation, size : " << m_allocationMaps.size ()); return; } for (uint32_t i = 0; i < (*itMap).second.size (); i++) @@ -1033,7 +1037,7 @@ PfFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::Sched } // remove obsolete info on allocation - m_allocationMaps.erase (m_allocationMaps.begin (), ++itMap); + m_allocationMaps.erase (itMap); return; } diff --git a/src/lte/model/rr-ff-mac-scheduler.cc b/src/lte/model/rr-ff-mac-scheduler.cc index 1e17aeec6..ffd8fa127 100644 --- a/src/lte/model/rr-ff-mac-scheduler.cc +++ b/src/lte/model/rr-ff-mac-scheduler.cc @@ -814,18 +814,22 @@ void RrFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters& params) { NS_LOG_FUNCTION (this); - //NS_LOG_DEBUG (this << " RX UL CQI at " << params.m_sfnSf); +// NS_LOG_DEBUG (this << " RX SFNID " << params.m_sfnSf); // correlate info on UL-CQIs with previous scheduling -> calculate m_sfnSf of transmission - uint32_t frameNo = (0x3FF & params.m_sfnSf) >> 4; + uint32_t frameNo = (0x3FF & (params.m_sfnSf >> 4)); uint32_t subframeNo = (0xF & params.m_sfnSf); //NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo); - if (subframeNo - m_schedTtiDelay < 0) + if (subframeNo <= m_schedTtiDelay) { frameNo--; + subframeNo = (10 + subframeNo - m_schedTtiDelay) % 11; + } + else + { + subframeNo = (subframeNo - m_schedTtiDelay) % 11; } - subframeNo = (subframeNo - m_schedTtiDelay) % 10; - //NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo); uint16_t sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo); +// NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo << " sfnSf " << sfnSf); // retrieve the allocation for this subframe std::map >::iterator itMap; std::map >::iterator itCqi; @@ -874,7 +878,7 @@ RrFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::Sched } // remove obsolete info on allocation - m_allocationMaps.erase (m_allocationMaps.begin (), ++itMap); + m_allocationMaps.erase (itMap); return; }