src/devices/wifi/wifi-mode.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 24 Aug 2007 16:27:59 +0200
changeset 1885 9ccfbfb25477
child 1909 4d1214bb8bc0
permissions -rw-r--r--
get a few more files to compile
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1885
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#ifndef WIFI_MODE_H
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#define WIFI_MODE_H
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include <stdint.h>
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include <string>
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
#include <vector>
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
namespace ns3 {
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
class WifiMode
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
{
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 public:
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
  enum ModulationType {
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
    BPSK,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
    QAM
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
  };
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
  
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
   * \returns the number of Hz used by this signal
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
  uint32_t GetBandwidth (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
   * \returns the physical bit rate of this signal.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
   *
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
   * If a transmission mode uses 1/2 FEC, and if its
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
   * data rate is 3Mbs, the phy rate is 6Mbs
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
  uint32_t GetPhyRate (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
   * \returns the data bit rate of this signal.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
  uint32_t GetDataRate (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
   * \returns true if this mode uses a bpsk modulation, false
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
   *          otherwise.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  bool IsModulationBpsk (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
   * \returns true if this mode uses a qam modulation, false
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
   *          otherwise.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  bool IsModulationQam (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
   * \returns the size of the modulation constellation.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
  uint8_t GetConstellationSize (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
  /**
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
   * \returns the uid associated to this wireless mode.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
   *
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
   * Each specific wireless mode should have a different uid.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
   * For example, the 802.11b 1Mbs and the 802.11b 2Mbs modes
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
   * should have different uids.
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
   */
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  uint32_t GetUid (void) const;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
private:
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  friend class WifiModeFactory;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  WifiMode ();
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  WifiMode (uint32_t uid);
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  uint32_t m_uid;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
};
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
class WifiModeFactory
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
{
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
public:
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
  static WifiMode CreateBpsk (std::string uniqueName,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
			      uint32_t bandwidth,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
			      uint32_t dataRate,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
			      uint32_t phyRate);
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  static WifiMode CreateQam (std::string uniqueName,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
			     uint32_t bandwidth,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
			     uint32_t dataRate,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
			     uint32_t phyRate,
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
			     uint8_t constellationSize);
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
private:
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
  friend class WifiMode;  
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  static WifiModeFactory *GetFactory ();
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  WifiModeFactory ();
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  struct WifiModeItem {
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
    std::string uniqueUid;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
    uint32_t bandwidth;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
    uint32_t dataRate;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
    uint32_t phyRate;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
    enum WifiMode::ModulationType modulation;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
    uint8_t constellationSize;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
  };
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
  uint32_t AllocateUid (std::string uniqueName);
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
  WifiModeItem *Get (uint32_t uid);
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
  typedef std::vector<struct WifiModeItem> WifiModeItemList;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  WifiModeItemList m_itemList;
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
};
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
} // namespace ns3
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
9ccfbfb25477 get a few more files to compile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
#endif /* WIFI_MODE_H */