A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::lorawan::LoraPhy Class Referenceabstract

Base class for PHY layers implementing the LoRa modulation scheme. More...

#include "lora-phy.h"

+ Inheritance diagram for ns3::lorawan::LoraPhy:
+ Collaboration diagram for ns3::lorawan::LoraPhy:

Public Types

typedef Callback< void, Ptr< const Packet > > RxFailedCallback
 Type definition for a callback for when a packet reception fails.
 
typedef Callback< void, Ptr< const Packet > > RxOkCallback
 Type definition for a callback for when a packet is correctly received.
 
typedef Callback< void, Ptr< const Packet > > TxFinishedCallback
 Type definition for a callback to call when a packet has finished sending.
 

Public Member Functions

 LoraPhy ()
 Default constructor.
 
 ~LoraPhy () override
 Destructor.
 
virtual void EndReceive (Ptr< Packet > packet, Ptr< LoraInterferenceHelper::Event > event)=0
 Finish reception of a packet.
 
Ptr< LoraChannelGetChannel () const
 Get the channel instance associated to this PHY.
 
Ptr< NetDeviceGetDevice () const
 Get the NetDevice associated to this PHY.
 
Ptr< MobilityModelGetMobility ()
 Get the mobility model associated to this PHY.
 
virtual bool IsOnFrequency (double frequency)=0
 Whether this device is listening on the specified frequency or not.
 
virtual bool IsTransmitting ()=0
 Whether this device is transmitting or not.
 
virtual void Send (Ptr< Packet > packet, LoraTxParameters txParams, double frequencyMHz, double txPowerDbm)=0
 Instruct the PHY to send a packet according to some parameters.
 
void SetChannel (Ptr< LoraChannel > channel)
 Set the LoraChannel instance PHY transmits on.
 
void SetDevice (Ptr< NetDevice > device)
 Set the NetDevice that owns this PHY.
 
void SetMobility (Ptr< MobilityModel > mobility)
 Set the mobility model associated to this PHY.
 
void SetReceiveFailedCallback (RxFailedCallback callback)
 Set the callback to call upon failed reception of a packet we were previously locked on.
 
void SetReceiveOkCallback (RxOkCallback callback)
 Set the callback to call upon successful reception of a packet.
 
void SetTxFinishedCallback (TxFinishedCallback callback)
 Set the callback to call after transmission of a packet.
 
virtual void StartReceive (Ptr< Packet > packet, double rxPowerDbm, uint8_t sf, Time duration, double frequencyMHz)=0
 Start receiving a packet.
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor.
 
 ~Object () override
 Destructor.
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
 
void Dispose ()
 Dispose of this Object.
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
 
bool IsInitialized () const
 Check if the object has been initialized.
 
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor.
 
uint32_t GetReferenceCount () const
 Get the reference count of the object.
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
 
void Ref () const
 Increment the reference count.
 
void Unref () const
 Decrement the reference count.
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
 
virtual TypeId GetInstanceTypeId () const =0
 Get the most derived TypeId for this Object.
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.
 

Static Public Member Functions

static Time GetOnAirTime (Ptr< Packet > packet, LoraTxParameters txParams)
 Compute the time that a packet with certain characteristics will take to be transmitted.
 
static Time GetTSym (LoraTxParameters txParams)
 Compute the symbol time from spreading factor and bandwidth.
 
static TypeId GetTypeId ()
 Register this type.
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type.
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.
 

Protected Attributes

Ptr< LoraChannelm_channel
 The channel this PHY transmits on.
 
Ptr< NetDevicem_device
 The net device this PHY is attached to.
 
TracedCallback< Ptr< const Packet >, uint32_tm_interferedPacket
 The trace source fired when a packet cannot be correctly received because of interference.
 
LoraInterferenceHelper m_interference
 The LoraInterferenceHelper associated to this PHY.
 
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
 The trace source fired when a packet begins the reception process from the medium.
 
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
 The trace source fired when a packet reception ends.
 
RxFailedCallback m_rxFailedCallback
 The callback to perform upon failed reception of a packet we were locked on.
 
RxOkCallback m_rxOkCallback
 The callback to perform upon correct reception of a packet.
 
TracedCallback< Ptr< const Packet >, uint32_tm_startSending
 The trace source fired when a packet is sent.
 
TracedCallback< Ptr< const Packet >, uint32_tm_successfullyReceivedPacket
 The trace source fired when a packet was correctly received.
 
TxFinishedCallback m_txFinishedCallback
 The callback to perform upon the end of a transmission.
 
TracedCallback< Ptr< const Packet >, uint32_tm_underSensitivity
 The trace source fired when a packet cannot be received because its power is below the sensitivity threshold.
 

Private Member Functions

virtual void TxFinished (Ptr< const Packet > packet)=0
 Internal call when transmission of a packet finishes.
 

Private Attributes

Ptr< MobilityModelm_mobility
 The mobility model associated to this PHY.
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
virtual void DoDispose ()
 Destructor implementation.
 
virtual void DoInitialize ()
 Initialize() implementation.
 
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated.
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.
 

Detailed Description

Base class for PHY layers implementing the LoRa modulation scheme.

This class features common callbacks and defines the interfaces that are used to send and receive packets at the PHY layer. Furthermore, it features an implementation of the GetOnAirTime function, used to compute the actual duration of a packet based on a series of parameters that are collected in LoraTxParameters objects.

Definition at line 75 of file lora-phy.h.

Member Typedef Documentation

◆ RxFailedCallback

Type definition for a callback for when a packet reception fails.

This callback can be set by an upper layer that wishes to be informed of failed reception events.

Definition at line 101 of file lora-phy.h.

◆ RxOkCallback

Type definition for a callback for when a packet is correctly received.

This callback can be set by an upper layer that wishes to be informed of correct reception events.

Definition at line 93 of file lora-phy.h.

◆ TxFinishedCallback

Type definition for a callback to call when a packet has finished sending.

This callback is used by the MAC layer, to determine when to open a receive window.

Definition at line 109 of file lora-phy.h.

Constructor & Destructor Documentation

◆ LoraPhy()

ns3::lorawan::LoraPhy::LoraPhy ( )

Default constructor.

Definition at line 79 of file lora-phy.cc.

◆ ~LoraPhy()

ns3::lorawan::LoraPhy::~LoraPhy ( )
override

Destructor.

Definition at line 83 of file lora-phy.cc.

Member Function Documentation

◆ EndReceive()

virtual void ns3::lorawan::LoraPhy::EndReceive ( Ptr< Packet packet,
Ptr< LoraInterferenceHelper::Event event 
)
pure virtual

Finish reception of a packet.

This method is scheduled by StartReceive, based on the packet duration. By passing a LoraInterferenceHelper Event to this method, the class will be able to identify the packet that is being received among all those that were registered as interference by StartReceive.

Parameters
packetThe received packet.
eventThe event that is tied to this packet in the LoraInterferenceHelper.

Implemented in ns3::lorawan::SimpleEndDeviceLoraPhy, ns3::lorawan::SimpleGatewayLoraPhy, ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

Referenced by ns3::lorawan::SimpleEndDeviceLoraPhy::StartReceive(), and ns3::lorawan::SimpleGatewayLoraPhy::StartReceive().

+ Here is the caller graph for this function:

◆ GetChannel()

Ptr< LoraChannel > ns3::lorawan::LoraPhy::GetChannel ( ) const

Get the channel instance associated to this PHY.

Returns
The LoraChannel instance this PHY transmits on.

Definition at line 102 of file lora-phy.cc.

References m_channel, and NS_LOG_FUNCTION_NOARGS.

◆ GetDevice()

Ptr< NetDevice > ns3::lorawan::LoraPhy::GetDevice ( ) const

Get the NetDevice associated to this PHY.

Returns
The NetDevice associated to this PHY.

Definition at line 88 of file lora-phy.cc.

References m_device.

◆ GetMobility()

Ptr< MobilityModel > ns3::lorawan::LoraPhy::GetMobility ( )

Get the mobility model associated to this PHY.

Returns
The MobilityModel associated to this PHY.

Definition at line 110 of file lora-phy.cc.

References m_device, m_mobility, and NS_LOG_FUNCTION_NOARGS.

Referenced by PhyConnectivityTest::DoRun().

+ Here is the caller graph for this function:

◆ GetOnAirTime()

Time ns3::lorawan::LoraPhy::GetOnAirTime ( Ptr< Packet packet,
LoraTxParameters  txParams 
)
static

Compute the time that a packet with certain characteristics will take to be transmitted.

Besides from the ones saved in LoraTxParameters, the packet's payload (obtained through a GetSize () call to account for the presence of Headers and Trailers, too) also influences the packet transmit time.

Parameters
packetThe packet that needs to be transmitted.
txParamsThe set of parameters that will be used for transmission.
Returns
The time necessary to transmit the packet.

Definition at line 167 of file lora-phy.cc.

References ns3::lorawan::LoraTxParameters::codingRate, ns3::lorawan::LoraTxParameters::crcEnabled, ns3::Time::GetSeconds(), GetTSym(), ns3::lorawan::LoraTxParameters::headerDisabled, ns3::lorawan::LoraTxParameters::lowDataRateOptimizationEnabled, ns3::lorawan::LoraTxParameters::nPreamble, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Seconds(), and ns3::lorawan::LoraTxParameters::sf.

Referenced by TimeOnAirTest::DoRun(), ns3::lorawan::SimpleEndDeviceLoraPhy::Send(), and ns3::lorawan::SimpleGatewayLoraPhy::Send().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetTSym()

Time ns3::lorawan::LoraPhy::GetTSym ( LoraTxParameters  txParams)
static

Compute the symbol time from spreading factor and bandwidth.

Parameters
txParamsThe parameters for transmission.
Returns
TSym, the time required to send a LoRa modulation symbol.

Definition at line 161 of file lora-phy.cc.

References ns3::lorawan::LoraTxParameters::bandwidthHz, ns3::Seconds(), and ns3::lorawan::LoraTxParameters::sf.

Referenced by GetOnAirTime(), ns3::lorawan::GatewayLorawanMac::Send(), and ns3::lorawan::ClassAEndDeviceLorawanMac::SendToPhy().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetTypeId()

TypeId ns3::lorawan::LoraPhy::GetTypeId ( )
static

Register this type.

Returns
The object TypeId.

Definition at line 37 of file lora-phy.cc.

References m_interferedPacket, m_phyRxBeginTrace, m_phyRxEndTrace, m_startSending, m_successfullyReceivedPacket, m_underSensitivity, ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ IsOnFrequency()

virtual bool ns3::lorawan::LoraPhy::IsOnFrequency ( double  frequency)
pure virtual

Whether this device is listening on the specified frequency or not.

Parameters
frequencyThe frequency to query.
Returns
True if the device is listening on that frequency, false otherwise.

Implemented in ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

◆ IsTransmitting()

virtual bool ns3::lorawan::LoraPhy::IsTransmitting ( )
pure virtual

Whether this device is transmitting or not.

Returns
True if the device is currently transmitting a packet, false otherwise.

Implemented in ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

◆ Send()

virtual void ns3::lorawan::LoraPhy::Send ( Ptr< Packet packet,
LoraTxParameters  txParams,
double  frequencyMHz,
double  txPowerDbm 
)
pure virtual

Instruct the PHY to send a packet according to some parameters.

Parameters
packetThe packet to send.
txParamsThe desired transmission parameters.
frequencyMHzThe frequency on which to transmit.
txPowerDbmThe power in dBm with which to transmit the packet.

Implemented in ns3::lorawan::SimpleEndDeviceLoraPhy, ns3::lorawan::SimpleGatewayLoraPhy, ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

◆ SetChannel()

void ns3::lorawan::LoraPhy::SetChannel ( Ptr< LoraChannel channel)

Set the LoraChannel instance PHY transmits on.

Typically, there is only one instance per simulation.

Parameters
channelThe LoraChannel instance this PHY will transmit on.

Definition at line 135 of file lora-phy.cc.

References m_channel, and NS_LOG_FUNCTION.

Referenced by PhyConnectivityTest::Reset().

+ Here is the caller graph for this function:

◆ SetDevice()

void ns3::lorawan::LoraPhy::SetDevice ( Ptr< NetDevice device)

Set the NetDevice that owns this PHY.

Parameters
deviceThe NetDevice this PHY will reference as its owner.

Definition at line 94 of file lora-phy.cc.

References m_device, and NS_LOG_FUNCTION.

◆ SetMobility()

void ns3::lorawan::LoraPhy::SetMobility ( Ptr< MobilityModel mobility)

Set the mobility model associated to this PHY.

Parameters
mobilityThe mobility model to associate to this PHY.

Definition at line 127 of file lora-phy.cc.

References m_mobility, and NS_LOG_FUNCTION_NOARGS.

Referenced by PhyConnectivityTest::Reset().

+ Here is the caller graph for this function:

◆ SetReceiveFailedCallback()

void ns3::lorawan::LoraPhy::SetReceiveFailedCallback ( RxFailedCallback  callback)

Set the callback to call upon failed reception of a packet we were previously locked on.

This method is typically called by an upper MAC layer that wants to be notified after the failed reception of a packet.

Parameters
callbackThe RxFailedCallback instance.

Definition at line 149 of file lora-phy.cc.

References m_rxFailedCallback.

◆ SetReceiveOkCallback()

void ns3::lorawan::LoraPhy::SetReceiveOkCallback ( RxOkCallback  callback)

Set the callback to call upon successful reception of a packet.

This method is typically called by an upper MAC layer that wants to be notified after the successful reception of a packet.

Parameters
callbackThe RxOkCallback instance.

Definition at line 143 of file lora-phy.cc.

References m_rxOkCallback.

◆ SetTxFinishedCallback()

void ns3::lorawan::LoraPhy::SetTxFinishedCallback ( TxFinishedCallback  callback)

Set the callback to call after transmission of a packet.

This method is typically called by an upper MAC layer that wants to be notified after the transmission of a packet.

Parameters
callbackThe TxFinishedCallback instance.

Definition at line 155 of file lora-phy.cc.

References m_txFinishedCallback.

◆ StartReceive()

virtual void ns3::lorawan::LoraPhy::StartReceive ( Ptr< Packet packet,
double  rxPowerDbm,
uint8_t  sf,
Time  duration,
double  frequencyMHz 
)
pure virtual

Start receiving a packet.

This method is typically called by LoraChannel.

Parameters
packetThe packet that is arriving at this PHY layer.
rxPowerDbmThe power of the arriving packet (assumed to be constant for the whole reception).
sfThe Spreading Factor of the arriving packet.
durationThe on air time of this packet.
frequencyMHzThe frequency this packet is being transmitted on.

Implemented in ns3::lorawan::SimpleEndDeviceLoraPhy, ns3::lorawan::SimpleGatewayLoraPhy, ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

◆ TxFinished()

virtual void ns3::lorawan::LoraPhy::TxFinished ( Ptr< const Packet packet)
privatepure virtual

Internal call when transmission of a packet finishes.

Calls to this function are typically scheduled by the Send function.

Parameters
packetA pointer to the packet that has been transmitted.

Implemented in ns3::lorawan::EndDeviceLoraPhy, and ns3::lorawan::GatewayLoraPhy.

Member Data Documentation

◆ m_channel

Ptr<LoraChannel> ns3::lorawan::LoraPhy::m_channel
protected

The channel this PHY transmits on.

Definition at line 287 of file lora-phy.h.

Referenced by GetChannel(), ns3::lorawan::SimpleEndDeviceLoraPhy::Send(), ns3::lorawan::SimpleGatewayLoraPhy::Send(), and SetChannel().

◆ m_device

◆ m_interferedPacket

TracedCallback<Ptr<const Packet>, uint32_t> ns3::lorawan::LoraPhy::m_interferedPacket
protected

The trace source fired when a packet cannot be correctly received because of interference.

Definition at line 324 of file lora-phy.h.

Referenced by ns3::lorawan::SimpleEndDeviceLoraPhy::EndReceive(), ns3::lorawan::SimpleGatewayLoraPhy::EndReceive(), and GetTypeId().

◆ m_interference

◆ m_mobility

Ptr<MobilityModel> ns3::lorawan::LoraPhy::m_mobility
private

The mobility model associated to this PHY.

Definition at line 280 of file lora-phy.h.

Referenced by GetMobility(), and SetMobility().

◆ m_phyRxBeginTrace

TracedCallback<Ptr<const Packet> > ns3::lorawan::LoraPhy::m_phyRxBeginTrace
protected

The trace source fired when a packet begins the reception process from the medium.

Definition at line 302 of file lora-phy.h.

Referenced by GetTypeId(), ns3::lorawan::SimpleEndDeviceLoraPhy::StartReceive(), and ns3::lorawan::SimpleGatewayLoraPhy::StartReceive().

◆ m_phyRxEndTrace

TracedCallback<Ptr<const Packet> > ns3::lorawan::LoraPhy::m_phyRxEndTrace
protected

◆ m_rxFailedCallback

RxFailedCallback ns3::lorawan::LoraPhy::m_rxFailedCallback
protected

The callback to perform upon failed reception of a packet we were locked on.

Definition at line 336 of file lora-phy.h.

Referenced by ns3::lorawan::SimpleEndDeviceLoraPhy::EndReceive(), and SetReceiveFailedCallback().

◆ m_rxOkCallback

RxOkCallback ns3::lorawan::LoraPhy::m_rxOkCallback
protected

The callback to perform upon correct reception of a packet.

Definition at line 331 of file lora-phy.h.

Referenced by ns3::lorawan::SimpleEndDeviceLoraPhy::EndReceive(), ns3::lorawan::SimpleGatewayLoraPhy::EndReceive(), and SetReceiveOkCallback().

◆ m_startSending

TracedCallback<Ptr<const Packet>, uint32_t> ns3::lorawan::LoraPhy::m_startSending
protected

The trace source fired when a packet is sent.

Definition at line 296 of file lora-phy.h.

Referenced by GetTypeId(), ns3::lorawan::SimpleEndDeviceLoraPhy::Send(), and ns3::lorawan::SimpleGatewayLoraPhy::Send().

◆ m_successfullyReceivedPacket

TracedCallback<Ptr<const Packet>, uint32_t> ns3::lorawan::LoraPhy::m_successfullyReceivedPacket
protected

The trace source fired when a packet was correctly received.

Definition at line 312 of file lora-phy.h.

Referenced by ns3::lorawan::SimpleEndDeviceLoraPhy::EndReceive(), ns3::lorawan::SimpleGatewayLoraPhy::EndReceive(), and GetTypeId().

◆ m_txFinishedCallback

TxFinishedCallback ns3::lorawan::LoraPhy::m_txFinishedCallback
protected

The callback to perform upon the end of a transmission.

Definition at line 341 of file lora-phy.h.

Referenced by SetTxFinishedCallback(), and ns3::lorawan::EndDeviceLoraPhy::TxFinished().

◆ m_underSensitivity

TracedCallback<Ptr<const Packet>, uint32_t> ns3::lorawan::LoraPhy::m_underSensitivity
protected

The trace source fired when a packet cannot be received because its power is below the sensitivity threshold.

Definition at line 318 of file lora-phy.h.

Referenced by GetTypeId(), ns3::lorawan::SimpleEndDeviceLoraPhy::StartReceive(), and ns3::lorawan::SimpleGatewayLoraPhy::StartReceive().


The documentation for this class was generated from the following files: