ChannelControl.h Source File

Simu5G: ChannelControl.h Source File
Simu5G
ChannelControl.h
1//
2// Simu5G
3//
4// Copyright (C) 2006 Levente Meszaros, 2005 Andras Varga
5// Copyright (C) 2019-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa)
6// Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa)
7//
8// This file is part of a software released under the license included in file
9// "license.pdf". Please read LICENSE and README files before using it.
10// The above files and the present reference are part of the software itself,
11// and cannot be removed from it.
12//
13
14#ifndef CHANNELCONTROL_H
15#define CHANNELCONTROL_H
16
17#include <vector>
18#include <list>
19#include <set>
20
21#include <inet/common/INETDefs.h>
22#include <inet/common/geometry/common/Coord.h>
23
24#include "simu5g/world/radio/IChannelControl.h"
25
26namespace simu5g {
27
28using namespace omnetpp;
29
30// Forward declarations
31class AirFrame;
32
33#define TRANSMISSION_PURGE_INTERVAL 1.0
34
41 opp_component_ptr<cModule> radioModule; // the module that registered this radio interface
42 cGate *radioInGate = nullptr; // gate on host module used to receive airframes
43 int channel;
44 inet::Coord pos; // cached radio position
45
46 struct Compare {
47 bool operator()(const RadioRef& lhs, const RadioRef& rhs) const {
48 ASSERT(lhs != nullptr);
49 ASSERT(rhs != nullptr);
50 return lhs->radioModule->getId() < rhs->radioModule->getId();
51 }
52 };
53 // we cache neighbors set in a std::vector, because std::set iteration is slow;
54 // std::vector is created and updated on demand
55 std::set<RadioRef, Compare> neighbors; // cached neighbor list
56 std::vector<RadioRef> neighborList;
57 bool isNeighborListValid;
58 bool isActive;
59};
60
67class ChannelControl : public cSimpleModule, public IChannelControl
68{
69 protected:
70 typedef std::list<RadioEntry> RadioList;
71 typedef std::vector<RadioRef> RadioRefVector;
72
73 RadioList radios;
74
79 typedef std::vector<TransmissionList> ChannelTransmissionLists;
80 ChannelTransmissionLists transmissions; // indexed by channel number (size=numChannels)
81
84
85 friend std::ostream& operator<<(std::ostream&, const RadioEntry&);
86 friend std::ostream& operator<<(std::ostream&, const TransmissionList&);
87
90
93
94 protected:
95 virtual void updateConnections(RadioRef h);
96
98 virtual double calcInterfDist();
99
101 void initialize(int stage) override;
102 int numInitStages() const override { return inet::NUM_INIT_STAGES; }
103
106
108 virtual void checkChannel(int channel);
109
111 virtual const RadioRefVector& getNeighbors(RadioRef h);
112
114 virtual void addOngoingTransmission(RadioRef h, AirFrame *frame);
115
117 virtual RadioRef lookupRadio(cModule *radioModule);
118
119 public:
120 ~ChannelControl() override;
121
123 RadioRef registerRadio(cModule *radioModule, cGate *radioInGate = nullptr) override;
124
126 void unregisterRadio(RadioRef r) override;
127
129 cModule *getRadioModule(RadioRef r) const override { return r->radioModule; }
130
132 cGate *getRadioGate(RadioRef r) const override { return r->radioInGate; }
133
135 int getRadioChannel(RadioRef r) const override { return r->channel; }
136
138 void setRadioPosition(RadioRef r, const inet::Coord& pos) override;
139
141 void setRadioChannel(RadioRef r, int channel) override;
142
144 int getNumChannels() override { return numChannels; }
145
147 const TransmissionList& getOngoingTransmissions(int channel) override;
148
150 void sendToChannel(RadioRef srcRadio, AirFrame *airFrame) override;
151
153 double getInterferenceRange(RadioRef r) override { return maxInterferenceDistance; }
154
156 void disableReception(RadioRef r) override { r->isActive = false; };
157
159 void enableReception(RadioRef r) override { r->isActive = true; };
160
162 double getPropagationSpeed() override { return SPEED_OF_LIGHT; }
163};
164
165} //namespace
166
167#endif
168
Definition ChannelControl.h:68
void setRadioChannel(RadioRef r, int channel) override
virtual RadioRef lookupRadio(cModule *radioModule)
cModule * getRadioModule(RadioRef r) const override
Definition ChannelControl.h:129
int getRadioChannel(RadioRef r) const override
Definition ChannelControl.h:135
std::vector< TransmissionList > ChannelTransmissionLists
Definition ChannelControl.h:79
cGate * getRadioGate(RadioRef r) const override
Definition ChannelControl.h:132
simtime_t lastOngoingTransmissionsUpdate
Definition ChannelControl.h:83
virtual void addOngoingTransmission(RadioRef h, AirFrame *frame)
virtual double calcInterfDist()
RadioRef registerRadio(cModule *radioModule, cGate *radioInGate=nullptr) override
void sendToChannel(RadioRef srcRadio, AirFrame *airFrame) override
void initialize(int stage) override
int numChannels
Definition ChannelControl.h:92
void disableReception(RadioRef r) override
Definition ChannelControl.h:156
double getPropagationSpeed() override
Definition ChannelControl.h:162
void enableReception(RadioRef r) override
Definition ChannelControl.h:159
virtual const RadioRefVector & getNeighbors(RadioRef h)
virtual void checkChannel(int channel)
void setRadioPosition(RadioRef r, const inet::Coord &pos) override
const TransmissionList & getOngoingTransmissions(int channel) override
virtual void purgeOngoingTransmissions()
int getNumChannels() override
Definition ChannelControl.h:144
double maxInterferenceDistance
Definition ChannelControl.h:89
void unregisterRadio(RadioRef r) override
double getInterferenceRange(RadioRef r) override
Definition ChannelControl.h:153
Definition IChannelControl.h:34
Definition AlertReceiver.h:24
Definition ChannelControl.h:40