From 533cedb9df85225d29fdbd895f7cf66ad8fb6212 Mon Sep 17 00:00:00 2001 From: mmiozzo Date: Tue, 29 Mar 2011 17:20:57 +0200 Subject: [PATCH] PUSCH based UL-CQI generation at eNB PHY side --- src/lte/model/lte-enb-mac.cc | 20 ++++++++++++++++++++ src/lte/model/lte-enb-mac.h | 6 ++++++ src/lte/model/lte-enb-phy.cc | 26 ++++++++++++++++++++++++++ src/lte/model/lte-enb-phy.h | 7 +++++++ 4 files changed, 59 insertions(+) diff --git a/src/lte/model/lte-enb-mac.cc b/src/lte/model/lte-enb-mac.cc index a0871738b..0f5dd3c90 100644 --- a/src/lte/model/lte-enb-mac.cc +++ b/src/lte/model/lte-enb-mac.cc @@ -471,6 +471,11 @@ LteEnbMac::DoReceiveIdealControlMessage (Ptr msg) Ptr dlcqi = DynamicCast (msg); ReceiveDlCqiIdealControlMessage (dlcqi); } + else if (msg->GetMessageType () == IdealControlMessage::UL_CQI) + { + Ptr ulcqi = DynamicCast (msg); + ReceiveUlCqiIdealControlMessage (ulcqi); + } else if (msg->GetMessageType () == IdealControlMessage::BSR) { Ptr bsr = DynamicCast (msg); @@ -495,6 +500,21 @@ LteEnbMac::ReceiveDlCqiIdealControlMessage (Ptr msg) } +void +LteEnbMac::ReceiveUlCqiIdealControlMessage (Ptr msg) +{ + NS_LOG_FUNCTION (this << msg); + + UlCqi_s ulcqi = msg->GetUlCqi (); + if (ulcqi.m_type == UlCqi_s::PUSCH) + { + NS_LOG_DEBUG(this << " eNB rxed an PUSCH UL-CQI"); + } + // TODO store UL-CQI to send them to scheduler + //m_dlCqiReceived.push_back (dlcqi); + +} + void LteEnbMac::ReceiveBsrMessage (MacCeListElement_s bsr) { diff --git a/src/lte/model/lte-enb-mac.h b/src/lte/model/lte-enb-mac.h index 4124d2f64..8f06d6bb3 100644 --- a/src/lte/model/lte-enb-mac.h +++ b/src/lte/model/lte-enb-mac.h @@ -34,6 +34,7 @@ namespace ns3 { class DlCqiIdealControlMessage; +class UlCqiIdealControlMessage; class PdcchMapIdealControlMessage; @@ -128,6 +129,11 @@ public: * \param msg the DL CQI message */ void ReceiveDlCqiIdealControlMessage (Ptr msg); + /** + * \brief Receive a UL CQI ideal control message + * \param msg the UL CQI message + */ + void ReceiveUlCqiIdealControlMessage (Ptr msg); void DoReceiveIdealControlMessage (Ptr msg); /** diff --git a/src/lte/model/lte-enb-phy.cc b/src/lte/model/lte-enb-phy.cc index 8e472baa1..3b24b7c11 100644 --- a/src/lte/model/lte-enb-phy.cc +++ b/src/lte/model/lte-enb-phy.cc @@ -370,6 +370,32 @@ void LteEnbPhy::GenerateCqiFeedback (const SpectrumValue& sinr) { NS_LOG_FUNCTION (this << sinr); + Ptr thisDevice = GetDevice ()->GetObject (); + Ptr msg = CreateUlCqiFeedbackMessage (sinr); + m_enbPhySapUser->ReceiveIdealControlMessage (msg); + + +} + + +Ptr +LteEnbPhy::CreateUlCqiFeedbackMessage (const SpectrumValue& sinr) +{ + NS_LOG_FUNCTION (this << sinr); + Values::const_iterator it; + UlCqi_s ulcqi; + ulcqi.m_type = UlCqi_s::PUSCH; + int i = 0; + for (it = sinr.ConstValuesBegin (); it != sinr.ConstValuesEnd (); it++) + { + ulcqi.m_sinr.push_back ((*it)); + NS_LOG_DEBUG(this << " RB " << i << " SINR " << (*it)); + i++; + } + Ptr msg = Create (); + msg->SetUlCqi (ulcqi); + return (msg); + } }; diff --git a/src/lte/model/lte-enb-phy.h b/src/lte/model/lte-enb-phy.h index 0f860ede2..36ee37435 100644 --- a/src/lte/model/lte-enb-phy.h +++ b/src/lte/model/lte-enb-phy.h @@ -98,6 +98,13 @@ public: * \param msg the received message */ virtual void ReceiveIdealControlMessage (Ptr msg); + + /** + * \brief Create the UL CQI feedback from SINR values perceived at + * the physical layer with the signal received from eNB + * \param sinr SINR values vector + */ + Ptr CreateUlCqiFeedbackMessage (const SpectrumValue& sinr); void DoSendIdealControlMessage (Ptr msg);