Radio

Package: inet.physicallayer.wireless.common.radio.packetlevel

compound module Radio

The radio model describes the physical device that is capable of transmitting and receiving signals on the medium. It contains an antenna model, a transmitter model, a receiver model, and an energy consumer model.

The radio model supports changing radio mode, transmission power, or bitrate via ConfigureRadioCommand, or with direct C++ function calls.

switchingTimes parameter should be regarded as a 5x5 matrix:

              OFF SLEEP RECEIVER TRANSMITTER TRANSCEIVER
OFF           0 0 0 0 0
SLEEP         0 0 0 0 0
RECEIVER      0 0 0 0 0
TRANSMITTER   0 0 0 0 0
TRANSCEIVER   0 0 0 0 0

The corresponding RadioMode pairs contain the time needed to switch from one state to another. For example: the 6th number identifies the time needed to switch from SLEEP to OFF.

The first entry of the switchingTimes string indicates the time-related metric prefix and it MUST be s, ms or ns.

Usage diagram

Inheritance diagram

Known subclasses

Name

Type

Description

NarrowbandRadioBase

compound module

Serves as a base module for narrowband radio models.

GenericRadio

compound module

This radio is part of the generic radio architecture.

Ieee802154UwbIrRadio

compound module

(no description)

Extends

Name

Type

Description

PhysicalLayerBase

simple module

Module base for different physical layers.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

radioMediumModule

string

“radioMedium”

Module path of the medium module where this radio communicates

energySourceModule

string

“”

Module path of the energy source module which provides energy to the radio

initialRadioMode

string

“off”

switchingTimes

string

“ms 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0”

Time parameters to switch between radio modes

sendRawBytes

bool

false

When true packets are serialized into a sequence of bytes before sending out

separateTransmissionParts

bool

false

When enabled the transmission of preamble, header and data part are simulated separately

separateReceptionParts

bool

false

When enabled the reception of preamble, header and data part are simulated separately

displayCommunicationRange

bool

false

If true communication range is displayed as a blue circle around the node

displayInterferenceRange

bool

false

If true interference range is displayed as a gray circle around the node

signalAnalogRepresentation

string

“scalar”

Properties

Name

Value

Description

class

Radio

display

i=block/wrxtx

Gates

Name

Direction

Size

Description

upperLayerIn

input

upperLayerOut

output

radioIn

input

Signals

Name

Type

Unit

Description

listeningChanged

packetDropped

cPacket

packetReceivedFromLower

cPacket

packetReceivedFromUpper

cPacket

packetSentToLower

cPacket

packetSentToUpper

cPacket

radioModeChanged

long

receivedSignalPartChanged

long

receptionEnded

receptionStarted

receptionStateChanged

long

transmissionEnded

transmissionStarted

transmissionStateChanged

long

transmittedSignalPartChanged

long

Statistics

Name

Title

Source

Record

Unit

Interpolation Mode

Description

bitErrorRate

Bit error rate

bitErrorRate(packetSentToUpper)

histogram

minSnir

Min SNIR

minimumSnir(packetSentToUpper)

histogram

packetErrorRate

Packet error rate

packetErrorRate(packetSentToUpper)

histogram

radioMode

Radio mode

radioModeChanged

count,vector

sample-hold

receptionState

Radio reception state

receptionStateChanged

count,vector

sample-hold

symbolErrorRate

Symbol error rate

symbolErrorRate(packetSentToUpper)

histogram

transmissionState

Radio transmission state

transmissionStateChanged

count,vector

sample-hold

Source code

//
// The radio model describes the physical device that is capable of transmitting
// and receiving signals on the medium. It contains an antenna model, a
// transmitter model, a receiver model, and an energy consumer model.
//
// The radio model supports changing radio mode, transmission power, or bitrate
// via ~ConfigureRadioCommand, or with direct C++ function calls.
//
// `switchingTimes` parameter should be regarded as a 5x5 matrix:
// <pre>
//               OFF SLEEP RECEIVER TRANSMITTER TRANSCEIVER
// OFF           0 0 0 0 0
// SLEEP         0 0 0 0 0
// RECEIVER      0 0 0 0 0
// TRANSMITTER   0 0 0 0 0
// TRANSCEIVER   0 0 0 0 0
// </pre>
// The corresponding `RadioMode` pairs contain the time needed to
// switch from one state to another.
// For example: the 6th number identifies the time needed to switch
// from SLEEP to OFF.
//
// The first entry of the `switchingTimes` string indicates the
// time-related metric prefix and it MUST be s, ms or ns.
//
module Radio extends PhysicalLayerBase like IRadio
{
    parameters:
        string radioMediumModule = default("radioMedium"); // Module path of the medium module where this radio communicates
        string energySourceModule = default("");           // Module path of the energy source module which provides energy to the radio

        string initialRadioMode @enum("off","sleep","receiver","transmitter","transceiver") = default("off");
        string switchingTimes = default("ms 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"); // Time parameters to switch between radio modes

        bool sendRawBytes = default(false); // When true packets are serialized into a sequence of bytes before sending out

        bool separateTransmissionParts = default(false); // When enabled the transmission of preamble, header and data part are simulated separately
        bool separateReceptionParts = default(false);    // When enabled the reception of preamble, header and data part are simulated separately

        bool displayCommunicationRange = default(false); // If true communication range is displayed as a blue circle around the node
        bool displayInterferenceRange = default(false);  // If true interference range is displayed as a gray circle around the node

        string signalAnalogRepresentation @enum("unitDisk", "scalar", "dimensional") = default("scalar");

        *.signalAnalogRepresentation = default(this.signalAnalogRepresentation);
        *.energySourceModule = default(absPath(this.energySourceModule));

        @class(Radio);

        @signal[packetSentToUpper](type=cPacket);
        @signal[packetReceivedFromUpper](type=cPacket);
        @signal[radioModeChanged](type=long);
        @signal[listeningChanged];
        @signal[receptionStateChanged](type=long);
        @signal[transmissionStateChanged](type=long);
        @signal[receivedSignalPartChanged](type=long);
        @signal[transmittedSignalPartChanged](type=long);
        @signal[transmissionStarted];
        @signal[transmissionEnded];
        @signal[receptionStarted];
        @signal[receptionEnded];

        @statistic[radioMode](title="Radio mode"; type=enum; enum=OFF, SLEEP, RECEIVER, TRANSMITTER, TRANSCEIVER, SWITCHING; source=radioModeChanged; record=count,vector; interpolationmode=sample-hold);
        @statistic[receptionState](title="Radio reception state"; type=enum; enum=UNDEFINED, IDLE, BUSY, RECEIVING; source=receptionStateChanged; record=count,vector; interpolationmode=sample-hold);
        @statistic[transmissionState](title="Radio transmission state"; type=enum; enum=UNDEFINED, IDLE, TRANSMITTING; source=transmissionStateChanged; record=count,vector; interpolationmode=sample-hold);

        @statistic[minSnir](title="Min SNIR"; source=minimumSnir(packetSentToUpper); record=histogram);
        @statistic[packetErrorRate](title="Packet error rate"; source=packetErrorRate(packetSentToUpper); record=histogram);
        @statistic[bitErrorRate](title="Bit error rate"; source=bitErrorRate(packetSentToUpper); record=histogram);
        @statistic[symbolErrorRate](title="Symbol error rate"; source=symbolErrorRate(packetSentToUpper); record=histogram);

    submodules:
        antenna: <default("IsotropicAntenna")> like IAntenna {
            parameters:
                @display("p=100,100");
        }
        transmitter: <> like ITransmitter {
            parameters:
                @display("p=100,200");
        }
        receiver: <> like IReceiver {
            parameters:
                @display("p=100,300");
        }
        energyConsumer: <default("")> like IEnergyConsumer if typename != "" {
            parameters:
                @display("p=100,400");
        }
}

File: src/inet/physicallayer/wireless/common/radio/packetlevel/Radio.ned