Class representing a simple LoRa transceiver, with an error model based on receiver sensitivity and a SIR table. More...
#include "simple-end-device-lora-phy.h"
Public Member Functions | |
SimpleEndDeviceLoraPhy () | |
Default constructor. | |
~SimpleEndDeviceLoraPhy () override | |
Destructor. | |
void | EndReceive (Ptr< Packet > packet, Ptr< LoraInterferenceHelper::Event > event) override |
Finish reception of a packet. | |
void | Send (Ptr< Packet > packet, LoraTxParameters txParams, double frequencyMHz, double txPowerDbm) override |
Instruct the PHY to send a packet according to some parameters. | |
void | StartReceive (Ptr< Packet > packet, double rxPowerDbm, uint8_t sf, Time duration, double frequencyMHz) override |
Start receiving a packet. | |
Public Member Functions inherited from ns3::lorawan::EndDeviceLoraPhy | |
EndDeviceLoraPhy () | |
Default constructor. | |
~EndDeviceLoraPhy () override | |
Destructor. | |
void | EndReceive (Ptr< Packet > packet, Ptr< LoraInterferenceHelper::Event > event) override=0 |
Finish reception of a packet. | |
uint8_t | GetSpreadingFactor () const |
Get the Spreading Factor this end device is listening for. | |
EndDeviceLoraPhy::State | GetState () |
Return the state this end device is currently in. | |
bool | IsOnFrequency (double frequencyMHz) override |
Whether this device is listening on the specified frequency or not. | |
bool | IsTransmitting () override |
Whether this device is transmitting or not. | |
void | RegisterListener (EndDeviceLoraPhyListener *listener) |
Add the input listener to the list of objects to be notified of PHY-level events. | |
void | Send (Ptr< Packet > packet, LoraTxParameters txParams, double frequencyMHz, double txPowerDbm) override=0 |
Instruct the PHY to send a packet according to some parameters. | |
void | SetFrequency (double frequencyMHz) |
Set the frequency this end device will listen on. | |
void | SetSpreadingFactor (uint8_t sf) |
Set the Spreading Factor this end device will listen for. | |
void | StartReceive (Ptr< Packet > packet, double rxPowerDbm, uint8_t sf, Time duration, double frequencyMHz) override=0 |
Start receiving a packet. | |
void | SwitchToSleep () |
Switch to the SLEEP state. | |
void | SwitchToStandby () |
Switch to the STANDBY state. | |
void | UnregisterListener (EndDeviceLoraPhyListener *listener) |
Remove the input listener from the list of objects to be notified of PHY-level events. | |
Public Member Functions inherited from ns3::lorawan::LoraPhy | |
LoraPhy () | |
Default constructor. | |
~LoraPhy () override | |
Destructor. | |
virtual void | EndReceive (Ptr< Packet > packet, Ptr< LoraInterferenceHelper::Event > event)=0 |
Finish reception of a packet. | |
Ptr< LoraChannel > | GetChannel () const |
Get the channel instance associated to this PHY. | |
Ptr< NetDevice > | GetDevice () const |
Get the NetDevice associated to this PHY. | |
Ptr< MobilityModel > | GetMobility () |
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< Object > | GetObject () 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< Object > | GetObject (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. | |
SimpleRefCount & | operator= (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 TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::lorawan::EndDeviceLoraPhy | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::lorawan::LoraPhy | |
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. | |
Additional Inherited Members | |
Public Types inherited from ns3::lorawan::EndDeviceLoraPhy | |
enum | State { SLEEP , STANDBY , TX , RX } |
An enumeration of the possible states of an EndDeviceLoraPhy. More... | |
Public Types inherited from ns3::lorawan::LoraPhy | |
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. | |
Static Public Attributes inherited from ns3::lorawan::EndDeviceLoraPhy | |
static const double | sensitivity [6] = {-124, -127, -130, -133, -135, -137} |
The sensitivity vector of this device to different SFs. | |
Protected Types inherited from ns3::lorawan::EndDeviceLoraPhy | |
typedef std::vector< EndDeviceLoraPhyListener * > | Listeners |
typedef for a list of EndDeviceLoraPhyListener. | |
typedef std::vector< EndDeviceLoraPhyListener * >::iterator | ListenersI |
typedef for a list of EndDeviceLoraPhyListener iterator. | |
Protected Member Functions inherited from ns3::lorawan::EndDeviceLoraPhy | |
void | SwitchToRx () |
Switch to the RX state. | |
void | SwitchToTx (double txPowerDbm) |
Switch to the TX state. | |
void | TxFinished (Ptr< const Packet > packet) override |
Signals the end of a transmission by the EndDeviceLoraPhy. | |
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. | |
Protected Attributes inherited from ns3::lorawan::EndDeviceLoraPhy | |
double | m_frequency |
The frequency this device is listening on. | |
Listeners | m_listeners |
PHY listeners. | |
uint8_t | m_sf |
The Spreading Factor this device is listening for. | |
TracedValue< State > | m_state |
The state this PHY is currently in. | |
TracedCallback< Ptr< const Packet >, uint32_t > | m_wrongFrequency |
Trace source for when a packet is lost because it was transmitted on a frequency different from the one this EndDeviceLoraPhy was configured to listen on. | |
TracedCallback< Ptr< const Packet >, uint32_t > | m_wrongSf |
Trace source for when a packet is lost because it was using a spreading factor different from the one this EndDeviceLoraPhy was configured to listen for. | |
Protected Attributes inherited from ns3::lorawan::LoraPhy | |
Ptr< LoraChannel > | m_channel |
The channel this PHY transmits on. | |
Ptr< NetDevice > | m_device |
The net device this PHY is attached to. | |
TracedCallback< Ptr< const Packet >, uint32_t > | m_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_t > | m_startSending |
The trace source fired when a packet is sent. | |
TracedCallback< Ptr< const Packet >, uint32_t > | m_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_t > | m_underSensitivity |
The trace source fired when a packet cannot be received because its power is below the sensitivity threshold. | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Class representing a simple LoRa transceiver, with an error model based on receiver sensitivity and a SIR table.
Definition at line 45 of file simple-end-device-lora-phy.h.
ns3::lorawan::SimpleEndDeviceLoraPhy::SimpleEndDeviceLoraPhy | ( | ) |
Default constructor.
Definition at line 51 of file simple-end-device-lora-phy.cc.
|
override |
Destructor.
Definition at line 55 of file simple-end-device-lora-phy.cc.
|
overridevirtual |
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.
packet | The received packet. |
event | The event that is tied to this packet in the LoraInterferenceHelper. |
Implements ns3::lorawan::EndDeviceLoraPhy.
Definition at line 243 of file simple-end-device-lora-phy.cc.
References ns3::lorawan::LoraInterferenceHelper::IsDestroyedByInterference(), ns3::Callback< R, UArgs >::IsNull(), ns3::lorawan::LoraPhy::m_device, ns3::lorawan::LoraPhy::m_interferedPacket, ns3::lorawan::LoraPhy::m_interference, ns3::lorawan::LoraPhy::m_phyRxEndTrace, ns3::lorawan::LoraPhy::m_rxFailedCallback, ns3::lorawan::LoraPhy::m_rxOkCallback, ns3::lorawan::LoraPhy::m_successfullyReceivedPacket, NS_LOG_FUNCTION, NS_LOG_INFO, and ns3::lorawan::EndDeviceLoraPhy::SwitchToStandby().
|
static |
Register this type.
Definition at line 39 of file simple-end-device-lora-phy.cc.
References ns3::TypeId::SetParent().
|
overridevirtual |
Instruct the PHY to send a packet according to some parameters.
packet | The packet to send. |
txParams | The desired transmission parameters. |
frequencyMHz | The frequency on which to transmit. |
txPowerDbm | The power in dBm with which to transmit the packet. |
Implements ns3::lorawan::EndDeviceLoraPhy.
Definition at line 60 of file simple-end-device-lora-phy.cc.
References ns3::lorawan::LoraPhy::GetOnAirTime(), ns3::lorawan::LoraPhy::m_channel, ns3::lorawan::LoraPhy::m_device, ns3::lorawan::LoraPhy::m_startSending, ns3::lorawan::EndDeviceLoraPhy::m_state, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::Simulator::Schedule(), ns3::lorawan::LoraTag::SetSpreadingFactor(), ns3::lorawan::LoraTxParameters::sf, ns3::lorawan::EndDeviceLoraPhy::SLEEP, ns3::lorawan::EndDeviceLoraPhy::STANDBY, ns3::lorawan::EndDeviceLoraPhy::SwitchToTx(), and ns3::lorawan::EndDeviceLoraPhy::TxFinished().
Referenced by PhyConnectivityTest::DoRun().
|
overridevirtual |
Start receiving a packet.
This method is typically called by LoraChannel.
packet | The packet that is arriving at this PHY layer. |
rxPowerDbm | The power of the arriving packet (assumed to be constant for the whole reception). |
sf | The Spreading Factor of the arriving packet. |
duration | The on air time of this packet. |
frequencyMHz | The frequency this packet is being transmitted on. |
Implements ns3::lorawan::EndDeviceLoraPhy.
Definition at line 107 of file simple-end-device-lora-phy.cc.
References ns3::lorawan::LoraInterferenceHelper::Add(), ns3::lorawan::LoraPhy::EndReceive(), ns3::Time::GetSeconds(), ns3::lorawan::EndDeviceLoraPhy::IsOnFrequency(), ns3::lorawan::LoraPhy::m_device, ns3::lorawan::EndDeviceLoraPhy::m_frequency, ns3::lorawan::LoraPhy::m_interference, ns3::lorawan::LoraPhy::m_phyRxBeginTrace, ns3::lorawan::EndDeviceLoraPhy::m_sf, ns3::lorawan::EndDeviceLoraPhy::m_state, ns3::lorawan::LoraPhy::m_underSensitivity, ns3::lorawan::EndDeviceLoraPhy::m_wrongFrequency, ns3::lorawan::EndDeviceLoraPhy::m_wrongSf, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::lorawan::EndDeviceLoraPhy::RX, ns3::Simulator::Schedule(), ns3::lorawan::EndDeviceLoraPhy::sensitivity, ns3::lorawan::EndDeviceLoraPhy::SLEEP, ns3::lorawan::EndDeviceLoraPhy::STANDBY, ns3::lorawan::EndDeviceLoraPhy::SwitchToRx(), and ns3::lorawan::EndDeviceLoraPhy::TX.