--- /home/alfonso/modelos/inet/src/inet/physicallayer/wireless/ieee80211/mode/Ieee80211Band.h +++ /home/alfonso/modelos/inetmanet-4.x/src/inet/physicallayer/wireless/ieee80211/mode/Ieee80211Band.h @@ -25,6 +25,7 @@ virtual int getNumChannels() const = 0; virtual Hz getCenterFrequency(int channelNumber) const = 0; virtual Hz getSpacing() const = 0; + virtual Hz getBandwith() const = 0; }; class INET_API Ieee80211BandBase : public IIeee80211Band @@ -49,6 +50,7 @@ virtual int getNumChannels() const override { return centers.size(); } virtual Hz getCenterFrequency(int channelNumber) const override; virtual Hz getSpacing() const override { return Hz(NaN); } + virtual Hz getBandwith() const override { return Hz(NaN); } }; class INET_API Ieee80211ArithmeticalBand : public Ieee80211BandBase @@ -56,14 +58,16 @@ protected: Hz start; Hz spacing; + Hz bandwith; int numChannels; public: - Ieee80211ArithmeticalBand(const char *name, Hz start, Hz spacing, int numChannels); + Ieee80211ArithmeticalBand(const char *name, Hz start, Hz spacing, Hz bandwith, int numChannels); virtual int getNumChannels() const override { return numChannels; } virtual Hz getCenterFrequency(int channelNumber) const override; virtual Hz getSpacing() const override { return spacing; } + virtual Hz getBandwith() const override { return bandwith; } }; class INET_API Ieee80211CompliantBands --- /home/alfonso/modelos/inet/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Receiver.cc +++ /home/alfonso/modelos/inetmanet-4.x/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Receiver.cc @@ -78,6 +78,10 @@ { if (this->band != band) { this->band = band; + if (!std::isnan(this->band->getBandwith().get())) + setBandwidth(this->band->getBandwith()); + else + setBandwidth(Hz(par("bandwidth")));// Default bandwidth if (channel != nullptr) setChannel(new Ieee80211Channel(band, channel->getChannelNumber())); } @@ -89,6 +93,10 @@ delete this->channel; this->channel = channel; setCenterFrequency(channel->getCenterFrequency()); + if (!std::isnan(this->band->getBandwith().get())) + setBandwidth(channel->getBand()->getBandwith()); + else + setBandwidth(Hz(par("bandwidth"))); // Default bandwidth } } --- /home/alfonso/modelos/inet/src/inet/physicallayer/wireless/ieee80211/mode/Ieee80211Band.cc +++ /home/alfonso/modelos/inetmanet-4.x/src/inet/physicallayer/wireless/ieee80211/mode/Ieee80211Band.cc @@ -29,10 +29,11 @@ return centers[channelNumber]; } -Ieee80211ArithmeticalBand::Ieee80211ArithmeticalBand(const char *name, Hz start, Hz spacing, int numChannels) : +Ieee80211ArithmeticalBand::Ieee80211ArithmeticalBand(const char *name, Hz start, Hz spacing, Hz bandwith, int numChannels) : Ieee80211BandBase(name), start(start), spacing(spacing), + bandwith(bandwith), numChannels(numChannels) { } @@ -62,17 +63,17 @@ GHz(2.484), // 14, this channel is intentionally further away from the previous than the others, see 802.11 specification }); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz("5 GHz", GHz(5), MHz(5), 200); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz("5 GHz", GHz(5), MHz(5), MHz(20), 200); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz20MHz("5 GHz (20 MHz)", GHz(5), MHz(20), 25); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz20MHz("5 GHz (20 MHz)", GHz(5), MHz(20), MHz(20), 25); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz40MHz("5 GHz (40 MHz)", GHz(5), MHz(40), 12); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz40MHz("5 GHz (40 MHz)", GHz(5), MHz(40), MHz(40), 12); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz80MHz("5 GHz (80 MHz)", GHz(5), MHz(80), 5); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz80MHz("5 GHz (80 MHz)", GHz(5), MHz(80), MHz(80), 5); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz160MHz("5 GHz (160 MHz)", GHz(5), MHz(160), 2); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5GHz160MHz("5 GHz (160 MHz)", GHz(5), MHz(160), MHz(160), 2); -const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5_9GHz("5.9 GHz", GHz(5.855), MHz(10), 7); +const Ieee80211ArithmeticalBand Ieee80211CompliantBands::band5_9GHz("5.9 GHz", GHz(5.855), MHz(10), MHz(10), 7); const std::vector Ieee80211CompliantBands::bands = { &band2_4GHz, &band5GHz, &band5GHz20MHz, &band5GHz40MHz, &band5GHz80MHz, &band5GHz160MHz, &band5_9GHz };