diff --git a/src/lte/model/lte-rrc-header.cc b/src/lte/model/lte-rrc-header.cc index 80baa7f10..bcc545a22 100644 --- a/src/lte/model/lte-rrc-header.cc +++ b/src/lte/model/lte-rrc-header.cc @@ -1538,6 +1538,7 @@ RrcAsn1Header::SerializeMeasConfig (LteRrcSap::MeasConfig measConfig) const break; case LteRrcSap::MeasGapConfig::SETUP: default: + SerializeChoice (2, 1, false); SerializeSequence (std::bitset<0> (),false); switch (measConfig.measGapConfig.gapOffsetChoice) { @@ -4573,6 +4574,76 @@ RrcConnectionReconfigurationHeader::Print (std::ostream &os) const { os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl; os << "haveMeasConfig: " << m_haveMeasConfig << std::endl; + if (m_haveMobilityControlInfo) + { + if(!m_measConfig.measObjectToRemoveList.empty()) + { + os << " measObjectToRemoveList: " ; + std::list auxList = m_measConfig.measObjectToRemoveList; + std::list::iterator it = auxList.begin (); + for ( ; it != auxList.end(); it++) + { + os << (int) *it << ", "; + } + os << std::endl; + } + if(!m_measConfig.reportConfigToRemoveList.empty()) + { + os << " reportConfigToRemoveList: " ; + std::list auxList = m_measConfig.reportConfigToRemoveList; + std::list::iterator it = auxList.begin (); + for ( ; it != auxList.end(); it++) + { + os << (int) *it << ", "; + } + os << std::endl; + } + if(!m_measConfig.measIdToRemoveList.empty()) + { + os << " measIdToRemoveList: " ; + std::list auxList = m_measConfig.measIdToRemoveList; + std::list::iterator it = auxList.begin (); + for ( ; it != auxList.end(); it++) + { + os << (int) *it << ", "; + } + os << std::endl; + } + + os << " haveQuantityConfig: " << m_measConfig.haveQuantityConfig << std::endl; + if (m_measConfig.haveQuantityConfig) + { + os << " filterCoefficientRSRP: " << (int)m_measConfig.quantityConfig.filterCoefficientRSRP << std::endl; + os << " filterCoefficientRSRQ:" << (int)m_measConfig.quantityConfig.filterCoefficientRSRQ << std::endl; + } + + os << " haveMeasGapConfig: " << m_measConfig.haveMeasGapConfig << std::endl; + if (m_measConfig.haveMeasGapConfig) + { + os << " measGapConfig.type: " << m_measConfig.measGapConfig.type << std::endl; + os << " measGapConfig.gap (gap0/1,value): (" << m_measConfig.measGapConfig.gapOffsetChoice + << "," << (int) m_measConfig.measGapConfig.gapOffsetValue << ")" << std::endl; + } + + os << " haveSmeasure: " << m_measConfig.haveSmeasure << std::endl; + if (m_measConfig.haveSmeasure) + { + os << " sMeasure: " << (int) m_measConfig.sMeasure << std::endl; + } + + os << " haveSpeedStatePars: " << m_measConfig.haveSpeedStatePars << std::endl; + if (m_measConfig.haveSpeedStatePars) + { + os << " speedStatePars.type: " << m_measConfig.speedStatePars.type << std::endl; + os << " speedStatePars.mobilityStateParameters.tEvaluation: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tEvaluation << std::endl; + os << " speedStatePars.mobilityStateParameters.tHystNormal: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tHystNormal << std::endl; + os << " speedStatePars.mobilityStateParameters.nCellChangeMedium: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeMedium << std::endl; + os << " speedStatePars.mobilityStateParameters.nCellChangeHigh: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeHigh << std::endl; + os << " speedStatePars.timeToTriggerSf.sfMedium: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfMedium << std::endl; + os << " speedStatePars.timeToTriggerSf.sfHigh: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfHigh << std::endl; + } + } + os << "haveMobilityControlInfo: " << m_haveMobilityControlInfo << std::endl; if (m_haveMobilityControlInfo) { diff --git a/src/lte/test/test-asn1-encoding.cc b/src/lte/test/test-asn1-encoding.cc index 1e9ce8fe3..7a6f95944 100644 --- a/src/lte/test/test-asn1-encoding.cc +++ b/src/lte/test/test-asn1-encoding.cc @@ -450,7 +450,43 @@ RrcConnectionReconfigurationTestCase::DoRun (void) LteRrcSap::RrcConnectionReconfiguration msg; msg.rrcTransactionIdentifier = 2; - msg.haveMeasConfig = false; + msg.haveMeasConfig = true; + + msg.measConfig.haveQuantityConfig = true; + msg.measConfig.quantityConfig.filterCoefficientRSRP = 8; + msg.measConfig.quantityConfig.filterCoefficientRSRQ = 7; + + msg.measConfig.haveMeasGapConfig = true; + msg.measConfig.measGapConfig.type = LteRrcSap::MeasGapConfig::SETUP; + msg.measConfig.measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::gp0; + msg.measConfig.measGapConfig.gapOffsetValue = 21; + + msg.measConfig.haveSmeasure = true; + msg.measConfig.sMeasure = 57; + + msg.measConfig.haveSpeedStatePars = true; + msg.measConfig.speedStatePars.type = LteRrcSap::SpeedStatePars::SETUP; + msg.measConfig.speedStatePars.mobilityStateParameters.tEvaluation = 240; + msg.measConfig.speedStatePars.mobilityStateParameters.tHystNormal = 60; + msg.measConfig.speedStatePars.mobilityStateParameters.nCellChangeMedium = 5; + msg.measConfig.speedStatePars.mobilityStateParameters.nCellChangeHigh = 13; + msg.measConfig.speedStatePars.timeToTriggerSf.sfMedium = 25; + msg.measConfig.speedStatePars.timeToTriggerSf.sfHigh = 75; + + msg.measConfig.measObjectToRemoveList.push_back(23); + msg.measConfig.measObjectToRemoveList.push_back(13); + + msg.measConfig.reportConfigToRemoveList.push_back(7); + msg.measConfig.reportConfigToRemoveList.push_back(16); + + msg.measConfig.measIdToRemoveList.push_back(4); + msg.measConfig.measIdToRemoveList.push_back(18); + + // TODO: Test the following: + // std::list measObjectToAddModList; + // std::list reportConfigToAddModList; + // std::list measIdToAddModList; + msg.haveMobilityControlInfo = true; msg.mobilityControlInfo.targetPhysCellId = 4; msg.mobilityControlInfo.haveCarrierFreq = true;