merge
authorMarco Miozzo <marco.miozzo@cttc.es>
Fri, 01 Mar 2013 09:33:18 +0100
changeset 9994 9bc8e1488619
parent 9993 7377894ac3b0 (current diff)
parent 9991 3d1c37a99e73 (diff)
child 9995 32e393c01fdb
child 9996 62697fe2165d
merge
--- a/src/lte/model/lte-enb-rrc.cc	Fri Mar 01 09:31:26 2013 +0100
+++ b/src/lte/model/lte-enb-rrc.cc	Fri Mar 01 09:33:18 2013 +0100
@@ -520,6 +520,7 @@
         LteRrcSap::HandoverPreparationInfo hpi;
         hpi.asConfig.sourceUeIdentity = m_rnti;
         hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn;
+        hpi.asConfig.sourceMeasConfig = BuildMeasConfig ();
         hpi.asConfig.sourceRadioResourceConfig = GetRadioResourceConfigForHandoverPreparationInfo ();
         hpi.asConfig.sourceMasterInformationBlock.dlBandwidth = m_rrc->m_dlBandwidth;
         hpi.asConfig.sourceMasterInformationBlock.systemFrameNumber = 0;
@@ -1024,10 +1025,79 @@
   msg.haveRadioResourceConfigDedicated = true;
   msg.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
   msg.haveMobilityControlInfo = false;
-  msg.haveMeasConfig = false;
+  msg.haveMeasConfig = true;
+  msg.measConfig = BuildMeasConfig ();
+
   return msg;
 }
 
+LteRrcSap::MeasConfig
+UeManager::BuildMeasConfig ()
+{
+  // Just intra-frequency measurements are supported,
+  // so just one measurement object is created
+  LteRrcSap::MeasObjectToAddMod measObject;
+  measObject.measObjectId = 1;
+  measObject.measObjectEutra.carrierFreq = m_rrc->m_dlEarfcn;
+  measObject.measObjectEutra.allowedMeasBandwidth = m_rrc->m_dlBandwidth;
+  measObject.measObjectEutra.presenceAntennaPort1 = false;
+  measObject.measObjectEutra.neighCellConfig = 0;
+  measObject.measObjectEutra.offsetFreq = 0;
+  measObject.measObjectEutra.haveCellForWhichToReportCGI = false;
+
+  // Just event A2 and event A4 are supported
+  LteRrcSap::ReportConfigToAddMod reportConfigA2;
+  reportConfigA2.reportConfigId = 1;
+  reportConfigA2.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::event;
+  reportConfigA2.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA2;
+  reportConfigA2.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::thresholdRsrq;
+  reportConfigA2.reportConfigEutra.threshold1.range = m_rrc->m_eventA2Threshold;
+  reportConfigA2.reportConfigEutra.hysteresis = 0;
+  reportConfigA2.reportConfigEutra.timeToTrigger = 0;
+  reportConfigA2.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrq;
+  reportConfigA2.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity; 
+  reportConfigA2.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
+  reportConfigA2.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms480;
+  reportConfigA2.reportConfigEutra.reportAmount = 255;
+
+  LteRrcSap::ReportConfigToAddMod reportConfigA4;
+  reportConfigA4.reportConfigId = 2;
+  reportConfigA4.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::event;
+  reportConfigA4.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA4;
+  reportConfigA4.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::thresholdRsrq;
+  reportConfigA4.reportConfigEutra.threshold1.range = m_rrc->m_eventA4Threshold;
+  reportConfigA4.reportConfigEutra.hysteresis = 0;
+  reportConfigA4.reportConfigEutra.timeToTrigger = 0;
+  reportConfigA4.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrq;
+  reportConfigA4.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity; 
+  reportConfigA4.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
+  reportConfigA4.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms480;
+  reportConfigA4.reportConfigEutra.reportAmount = 255;
+
+  LteRrcSap::MeasIdToAddMod measId[2];
+  measId[0].measId = 1;
+  measId[0].measObjectId = 1;
+  measId[0].reportConfigId = 1;
+  measId[1].measId = 2;
+  measId[1].measObjectId = 1;
+  measId[1].reportConfigId = 2;
+
+  LteRrcSap::MeasConfig measConfig;
+  measConfig.measObjectToAddModList.push_back (measObject);
+  measConfig.reportConfigToAddModList.push_back (reportConfigA2);
+  measConfig.reportConfigToAddModList.push_back (reportConfigA4);
+  measConfig.measIdToAddModList.push_back (measId[0]);
+  measConfig.measIdToAddModList.push_back (measId[1]);
+  measConfig.haveQuantityConfig = true;
+  measConfig.quantityConfig.filterCoefficientRSRP = 4; // default = fc4 (See TS 36.331)
+  measConfig.quantityConfig.filterCoefficientRSRQ = 4; // default = fc4 (See TS 36.331)
+  measConfig.haveMeasGapConfig = false;
+  measConfig.haveSmeasure = false;
+  measConfig.haveSpeedStatePars = false;
+
+  return measConfig;
+}
+
 LteRrcSap::RadioResourceConfigDedicated
 UeManager::BuildRadioResourceConfigDedicated ()
 {
@@ -1239,7 +1309,17 @@
                    "Whether to admit a connection request from a Ue",
                    BooleanValue (true),  
                    MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest),
-                   MakeBooleanChecker ()) 
+                   MakeBooleanChecker ())
+    .AddAttribute ("EventA2Threshold",
+                   "Threshold of the event A2 (Serving becomes worse than threshold)",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&LteEnbRrc::m_eventA2Threshold),
+                   MakeUintegerChecker<uint8_t> ())   
+    .AddAttribute ("EventA4Threshold",
+                   "Threshold of the event A4 (Neighbour becomes better than threshold)",
+                   UintegerValue (255),
+                   MakeUintegerAccessor (&LteEnbRrc::m_eventA4Threshold),
+                   MakeUintegerChecker<uint8_t> ())   
     .AddTraceSource ("NewUeContext",
                      "trace fired upon creation of a new UE context",
                      MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace))
--- a/src/lte/model/lte-enb-rrc.h	Fri Mar 01 09:31:26 2013 +0100
+++ b/src/lte/model/lte-enb-rrc.h	Fri Mar 01 09:33:18 2013 +0100
@@ -315,6 +315,13 @@
    */
   LteRrcSap::RadioResourceConfigDedicated BuildRadioResourceConfigDedicated ();
 
+  /** 
+   * 
+   * \return a MeasConfig struct built based on the
+   * current configuration
+   */
+  LteRrcSap::MeasConfig BuildMeasConfig ();
+
 
   /** 
    * 
@@ -765,8 +772,12 @@
   uint16_t m_lastAllocatedConfigurationIndex;
   bool m_reconfigureUes;
 
+  // Handover related attributes
   bool m_admitHandoverRequest;
   bool m_admitRrcConnectionRequest;
+  uint8_t m_eventA2Threshold;
+  uint8_t m_eventA4Threshold;
+
 
   //             cellid    rnti   
   TracedCallback<uint16_t, uint16_t> m_newUeContextTrace;
--- a/src/lte/model/lte-rrc-header.cc	Fri Mar 01 09:31:26 2013 +0100
+++ b/src/lte/model/lte-rrc-header.cc	Fri Mar 01 09:33:18 2013 +0100
@@ -4722,7 +4722,7 @@
 {
   os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
   os << "haveMeasConfig: " << m_haveMeasConfig << std::endl;
-  if (m_haveMobilityControlInfo)
+  if (m_haveMeasConfig)
     {
       if (!m_measConfig.measObjectToRemoveList.empty ())
         {
--- a/src/lte/model/lte-rrc-sap.h	Fri Mar 01 09:31:26 2013 +0100
+++ b/src/lte/model/lte-rrc-sap.h	Fri Mar 01 09:33:18 2013 +0100
@@ -55,8 +55,12 @@
 
   virtual ~LteRrcSap ();
 
+  // Constraint values
+
+  static const uint8_t MaxReportCells = 255;
+
   // Information Elements
-  
+
   struct PlmnIdentityInfo
   {
     uint32_t plmnIdentity;