A Discrete-Event Network Simulator
API
wifi-mode.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005,2006,2007 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  * Sébastien Deronne <sebastien.deronne@gmail.com>
20  */
21 
22 #ifndef WIFI_MODE_H
23 #define WIFI_MODE_H
24 
25 #include <stdint.h>
26 #include <string>
27 #include <vector>
28 #include <ostream>
29 #include "ns3/attribute-helper.h"
30 #include "ns3/wifi-phy-standard.h"
31 
32 namespace ns3 {
33 
34 class WifiTxVector;
35 
41 {
65 };
66 
75 {
86 };
87 
99 class WifiMode
100 {
101 public:
113  uint64_t GetPhyRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const;
122  uint64_t GetPhyRate (WifiTxVector txVector) const;
131  uint64_t GetDataRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const;
137  uint64_t GetDataRate (WifiTxVector txVector) const;
141  enum WifiCodeRate GetCodeRate (void) const;
145  uint16_t GetConstellationSize (void) const;
149  uint8_t GetMcsValue (void) const;
154  std::string GetUniqueName (void) const;
159  bool IsMandatory (void) const;
167  uint32_t GetUid (void) const;
182  uint64_t GetNonHtReferenceRate (void) const;
187  bool IsHigherCodeRate (WifiMode mode) const;
192  bool IsHigherDataRate (WifiMode mode) const;
193 
200  WifiMode ();
207  WifiMode (std::string name);
208 
209 
210 private:
211  friend class WifiModeFactory;
217  WifiMode (uint32_t uid);
218  uint32_t m_uid;
219 };
220 
221 bool operator == (const WifiMode &a, const WifiMode &b);
222 std::ostream & operator << (std::ostream & os, const WifiMode &mode);
223 std::istream & operator >> (std::istream &is, WifiMode &mode);
224 
226 
233 typedef std::vector<WifiMode> WifiModeList;
237 typedef WifiModeList::const_iterator WifiModeListIterator;
238 
246 {
247 public:
264  static WifiMode CreateWifiMode (std::string uniqueName,
265  enum WifiModulationClass modClass,
266  bool isMandatory,
267  enum WifiCodeRate codingRate,
268  uint16_t constellationSize);
269 
280  static WifiMode CreateWifiMcs (std::string uniqueName,
281  uint8_t mcsValue,
282  enum WifiModulationClass modClass);
283 
284 
285 private:
286  friend class WifiMode;
287  friend std::istream & operator >> (std::istream &is, WifiMode &mode);
288 
294  static WifiModeFactory* GetFactory ();
295  WifiModeFactory ();
296 
303  {
304  std::string uniqueUid;
309  uint8_t mcsValue;
310  };
311 
319  WifiMode Search (std::string name);
327  uint32_t AllocateUid (std::string uniqueUid);
335  WifiModeItem* Get (uint32_t uid);
336 
340  typedef std::vector<struct WifiModeItem> WifiModeItemList;
341  WifiModeItemList m_itemList;
342 };
343 
344 } //namespace ns3
345 
346 #endif /* WIFI_MODE_H */
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Definition: angles.cc:48
WifiMode()
Create an invalid WifiMode.
Definition: wifi-mode.cc:528
ERP-OFDM PHY (19.5)
Definition: wifi-mode.h:58
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiCodeRate
This enumeration defines the various convolutional coding rates used for the OFDM transmission modes ...
Definition: wifi-mode.h:74
DSSS-OFDM PHY (19.7)
Definition: wifi-mode.h:56
enum WifiModulationClass GetModulationClass() const
Definition: wifi-mode.cc:386
VHT PHY (Clause 22)
Definition: wifi-mode.h:64
HR/DSSS PHY (Clause 18)
Definition: wifi-mode.h:52
ERP-PBCC PHY (19.6)
Definition: wifi-mode.h:54
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:99
bool IsMandatory(void) const
Definition: wifi-mode.cc:357
static WifiMode CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, enum WifiModulationClass modClass)
Definition: wifi-mode.cc:588
Modulation class unknown or unspecified.
Definition: wifi-mode.h:44
WifiModeItem * Get(uint32_t uid)
Return a WifiModeItem at the given uid index.
Definition: wifi-mode.cc:664
uint64_t GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const
Definition: wifi-mode.cc:74
Frequency-hopping spread spectrum (FHSS) PHY (Clause 14)
Definition: wifi-mode.h:48
uint16_t GetConstellationSize(void) const
Definition: wifi-mode.cc:296
bool IsHigherDataRate(WifiMode mode) const
Definition: wifi-mode.cc:472
uint32_t m_uid
Definition: wifi-mode.h:218
enum WifiCodeRate GetCodeRate(void) const
Definition: wifi-mode.cc:244
HT PHY (Clause 20)
Definition: wifi-mode.h:62
uint8_t GetMcsValue(void) const
Definition: wifi-mode.cc:364
std::string GetUniqueName(void) const
Definition: wifi-mode.cc:349
WifiModeItemList m_itemList
Definition: wifi-mode.h:341
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition: angles.cc:42
Infrared (IR) (Clause 16)
Definition: wifi-mode.h:46
Every class exported by the ns3 library is enclosed in the ns3 namespace.
WifiModeList::const_iterator WifiModeListIterator
An iterator for WifiModeList vector.
Definition: wifi-mode.h:237
uint64_t GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const
Definition: wifi-mode.cc:109
std::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes...
Definition: wifi-mode.h:225
uint64_t GetNonHtReferenceRate(void) const
Definition: wifi-mode.cc:393
std::vector< struct WifiModeItem > WifiModeItemList
typedef for a vector of WifiModeItem.
Definition: wifi-mode.h:340
static WifiMode CreateWifiMode(std::string uniqueName, enum WifiModulationClass modClass, bool isMandatory, enum WifiCodeRate codingRate, uint16_t constellationSize)
Definition: wifi-mode.cc:550
No explicit coding (e.g., DSSS rates)
Definition: wifi-mode.h:77
create WifiMode class instances and keep track of them.
Definition: wifi-mode.h:245
WifiModulationClass
This enumeration defines the modulation classes per (Table 9-4 "Modulation classes"; IEEE 802...
Definition: wifi-mode.h:40
bool IsHigherCodeRate(WifiMode mode) const
Definition: wifi-mode.cc:452
OFDM PHY (Clause 17)
Definition: wifi-mode.h:60
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.cc:95
static WifiModeFactory * GetFactory()
Return a WifiModeFactory.
Definition: wifi-mode.cc:671
uint32_t AllocateUid(std::string uniqueUid)
Allocate a WifiModeItem from a given uniqueUid.
Definition: wifi-mode.cc:646
enum WifiModulationClass modClass
Definition: wifi-mode.h:305
uint32_t GetUid(void) const
Definition: wifi-mode.cc:380
friend std::istream & operator>>(std::istream &is, WifiMode &mode)
Serialize WifiMode from istream (human-readable).
Definition: wifi-mode.cc:65
WifiMode Search(std::string name)
Search and return WifiMode from a given name.
Definition: wifi-mode.cc:611
#define ATTRIBUTE_HELPER_HEADER(type)
Declare the attribute value, accessor and checkers for class type.
This is the data associated to a unique WifiMode.
Definition: wifi-mode.h:302
DSSS PHY (Clause 15)
Definition: wifi-mode.h:50