Bug-fix UL Allocation Map storing for UL-CQI
authorMarco Miozzo <marco.miozzo@cttc.es>
Mon, 14 Nov 2011 12:25:16 +0100
changeset 8321 c674feef9d5f
parent 8320 756e0218720d
child 8322 466802e3cafb
Bug-fix UL Allocation Map storing for UL-CQI
src/lte/model/pf-ff-mac-scheduler.cc
src/lte/model/rr-ff-mac-scheduler.cc
--- a/src/lte/model/pf-ff-mac-scheduler.cc	Mon Nov 14 10:40:05 2011 +0100
+++ b/src/lte/model/pf-ff-mac-scheduler.cc	Mon Nov 14 12:25:16 2011 +0100
@@ -971,25 +971,29 @@
 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;
     }
-  subframeNo = (subframeNo - m_schedTtiDelay) % 10;
-  //NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo);
+  else
+    {
+      subframeNo = (subframeNo - m_schedTtiDelay) % 11;
+    }
   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 <uint16_t, std::vector <uint16_t> >::iterator itMap;
   std::map <uint16_t, std::vector <double> >::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 @@
 
     }
   // remove obsolete info on allocation
-  m_allocationMaps.erase (m_allocationMaps.begin (), ++itMap);
+  m_allocationMaps.erase (itMap);
 
   return;
 }
--- a/src/lte/model/rr-ff-mac-scheduler.cc	Mon Nov 14 10:40:05 2011 +0100
+++ b/src/lte/model/rr-ff-mac-scheduler.cc	Mon Nov 14 12:25:16 2011 +0100
@@ -814,18 +814,22 @@
 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;
     }
-  subframeNo = (subframeNo - m_schedTtiDelay) % 10;
-  //NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo);
+  else
+    {
+      subframeNo = (subframeNo - m_schedTtiDelay) % 11;
+    }
   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 <uint16_t, std::vector <uint16_t> >::iterator itMap;
   std::map <uint16_t, std::vector <double> >::iterator itCqi;
@@ -874,7 +878,7 @@
 
     }
   // remove obsolete info on allocation
-  m_allocationMaps.erase (m_allocationMaps.begin (), ++itMap);
+  m_allocationMaps.erase (itMap);
 
   return;
 }