22 #include <ns3/waveform-generator.h>
23 #include <ns3/object-factory.h>
26 #include <ns3/simulator.h>
27 #include "ns3/spectrum-error-model.h"
29 #include "lte-net-device.h"
36 NS_OBJECT_ENSURE_REGISTERED (LtePhy);
46 : m_downlinkSpectrumPhy (dlPhy),
47 m_uplinkSpectrumPhy (ulPhy),
60 LtePhy::GetTypeId (
void)
78 m_packetBurstQueue.clear ();
79 m_controlMessagesQueue.clear ();
80 m_downlinkSpectrumPhy->Dispose ();
81 m_downlinkSpectrumPhy = 0;
82 m_uplinkSpectrumPhy->Dispose ();
83 m_uplinkSpectrumPhy = 0;
106 return m_downlinkSpectrumPhy;
112 return m_uplinkSpectrumPhy;
120 m_downlinkSpectrumPhy->SetChannel (c);
127 m_uplinkSpectrumPhy->SetChannel (c);
150 uint16_t SrsPeriodicity[9] = {0, 2, 5, 10, 20, 40, 80, 160, 320};
151 uint16_t SrsCiLow[9] = {0, 0, 2, 7, 17, 37, 77, 157, 317};
152 uint16_t SrsCiHigh[9] = {0, 1, 6, 16, 36, 76, 156, 316, 636};
154 for (i = 8; i > 0; i --)
156 if ((srcCi>=SrsCiLow[i])&&(srcCi<=SrsCiHigh[i]))
161 return SrsPeriodicity[i];
168 uint16_t SrsSubframeOffset[9] = {0, 0, 2, 7, 17, 37, 77, 157, 317};
169 uint16_t SrsCiLow[9] = {0, 0, 2, 7, 17, 37, 77, 157, 317};
170 uint16_t SrsCiHigh[9] = {0, 1, 6, 16, 36, 76, 156, 316, 636};
172 for (i = 8; i > 0; i --)
174 if ((srcCi>=SrsCiLow[i])&&(srcCi<=SrsCiHigh[i]))
179 return (srcCi - SrsSubframeOffset[i]);
191 m_packetBurstQueue.at (m_packetBurstQueue.size () - 1)->AddPacket (p);
197 if (m_packetBurstQueue.at (0)->GetSize () > 0)
200 m_packetBurstQueue.erase (m_packetBurstQueue.begin ());
201 m_packetBurstQueue.push_back (CreateObject <PacketBurst> ());
206 m_packetBurstQueue.erase (m_packetBurstQueue.begin ());
207 m_packetBurstQueue.push_back (CreateObject <PacketBurst> ());
218 m_controlMessagesQueue.at (m_controlMessagesQueue.size () - 1).push_back (m);
221 std::list<Ptr<LteControlMessage> >
225 if (m_controlMessagesQueue.at (0).size () > 0)
227 std::list<Ptr<LteControlMessage> > ret = m_controlMessagesQueue.at (0);
228 m_controlMessagesQueue.erase (m_controlMessagesQueue.begin ());
229 std::list<Ptr<LteControlMessage> > newlist;
230 m_controlMessagesQueue.push_back (newlist);
235 m_controlMessagesQueue.erase (m_controlMessagesQueue.begin ());
236 std::list<Ptr<LteControlMessage> > newlist;
237 m_controlMessagesQueue.push_back (newlist);
238 std::list<Ptr<LteControlMessage> > emptylist;
248 m_downlinkSpectrumPhy->SetCellId (cellId);
249 m_uplinkSpectrumPhy->SetCellId (cellId);
void SetDevice(Ptr< LteNetDevice > d)
Set the device where the phy layer is attached.
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
void DoSetCellId(uint16_t cellId)
uint16_t GetSrsPeriodicity(uint16_t srcCi) const
double GetTti(void) const
#define NS_LOG_COMPONENT_DEFINE(name)
void SetUplinkChannel(Ptr< SpectrumChannel > c)
Ptr< LteSpectrumPhy > GetUplinkSpectrumPhy()
virtual void DoDispose(void)
Ptr< LteNetDevice > GetDevice()
Get the device where the phy layer is attached.
#define NS_FATAL_ERROR(msg)
fatal error handling
uint16_t GetSrsSubframeOffset(uint16_t srcCi) const
uint8_t GetRbgSize(void) const
void SetDownlinkChannel(Ptr< SpectrumChannel > c)
Ptr< LteSpectrumPhy > GetDownlinkSpectrumPhy()
void SetControlMessages(Ptr< LteControlMessage > m)
std::list< Ptr< LteControlMessage > > GetControlMessages(void)
Ptr< PacketBurst > GetPacketBurst(void)
a base class which provides memory management and object aggregation
void SetMacPdu(Ptr< Packet > p)
a unique identifier for an interface.
void SetTti(double tti)
Receive SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel.
TypeId SetParent(TypeId tid)