author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Thu, 08 Nov 2007 15:25:57 +0100 | |
changeset 2090 | 3622fda1717b |
parent 2083 | c7541b84285e |
child 2139 | a2cf93c741c3 |
permissions | -rw-r--r-- |
1889 | 1 |
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
2 |
/* |
|
3 |
* Copyright (c) 2005,2006 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 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
|
19 |
*/ |
|
20 |
||
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
21 |
#ifndef WIFI_PHY_H |
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
22 |
#define WIFI_PHY_H |
1889 | 23 |
|
24 |
#include <vector> |
|
25 |
#include <list> |
|
26 |
#include <stdint.h> |
|
27 |
#include "ns3/callback.h" |
|
28 |
#include "ns3/event-id.h" |
|
29 |
#include "ns3/packet.h" |
|
2054
ba8e810bae4c
derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1988
diff
changeset
|
30 |
#include "ns3/object.h" |
1889 | 31 |
#include "ns3/callback-trace-source.h" |
32 |
#include "ns3/nstime.h" |
|
33 |
#include "ns3/ptr.h" |
|
34 |
#include "ns3/random-variable.h" |
|
1902
26a57487bb49
no need for ns3 prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1892
diff
changeset
|
35 |
#include "wifi-mode.h" |
1920
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
36 |
#include "wifi-preamble.h" |
1889 | 37 |
|
38 |
||
39 |
namespace ns3 { |
|
40 |
||
41 |
class RandomUniform; |
|
42 |
class RxEvent; |
|
43 |
class TraceContainer; |
|
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
44 |
class WifiNetDevice; |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
45 |
class WifiChannel; |
1889 | 46 |
|
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
47 |
class WifiPhyListener { |
1889 | 48 |
public: |
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
49 |
virtual ~WifiPhyListener (); |
1889 | 50 |
|
51 |
/* we have received the first bit of a packet. We decided |
|
52 |
* that we could synchronize on this packet. It does not mean |
|
53 |
* we will be able to successfully receive completely the |
|
54 |
* whole packet. It means we will report a BUSY status. |
|
55 |
* r.end will be invoked later to report whether or not |
|
56 |
* the packet was successfully received. |
|
57 |
*/ |
|
58 |
virtual void NotifyRxStart (Time duration) = 0; |
|
59 |
/* we have received the last bit of a packet for which |
|
60 |
* rxStart was invoked first. |
|
61 |
*/ |
|
62 |
virtual void NotifyRxEndOk (void) = 0; |
|
63 |
virtual void NotifyRxEndError (void) = 0; |
|
64 |
/* we start the transmission of a packet. |
|
65 |
*/ |
|
66 |
virtual void NotifyTxStart (Time duration) = 0; |
|
67 |
virtual void NotifyCcaBusyStart (Time duration) = 0; |
|
68 |
}; |
|
69 |
||
70 |
||
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
71 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
72 |
* \brief 802.11 PHY layer model |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
73 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
74 |
* This PHY implements a model of 802.11a. The model |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
75 |
* implemented here is based on the model described |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
76 |
* in "Yet Another Network Simulator", |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
77 |
* (http://cutebugs.net/files/wns2-yans.pdf). |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
78 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
79 |
* This PHY model depends on a channel loss and delay |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
80 |
* model as provided by the ns3::PropagationLossModel |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
81 |
* and ns3::PropagationDelayModel classes. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
82 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
83 |
*/ |
2054
ba8e810bae4c
derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1988
diff
changeset
|
84 |
class WifiPhy : public Object |
1889 | 85 |
{ |
86 |
public: |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
87 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
88 |
* The state of the PHY layer. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
89 |
*/ |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
90 |
enum State { |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
91 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
92 |
* The PHY layer is synchronized upon a packet. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
93 |
*/ |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
94 |
SYNC, |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
95 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
96 |
* The PHY layer is sending a packet. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
97 |
*/ |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
98 |
TX, |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
99 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
100 |
* The PHY layer has sense the medium busy through |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
101 |
* the CCA mechanism |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
102 |
*/ |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
103 |
CCA_BUSY, |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
104 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
105 |
* The PHY layer is IDLE. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
106 |
*/ |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
107 |
IDLE |
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
108 |
}; |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
109 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
110 |
* arg1: packet received successfully |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
111 |
* arg2: snr of packet |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
112 |
* arg3: mode of packet |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
113 |
* arg4: type of preamble used for packet. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
114 |
*/ |
1964
041240a915f8
build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1920
diff
changeset
|
115 |
typedef Callback<void,Packet, double, WifiMode, enum WifiPreamble> SyncOkCallback; |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
116 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
117 |
* arg1: packet received unsuccessfully |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
118 |
* arg2: snr of packet |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
119 |
*/ |
1964
041240a915f8
build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1920
diff
changeset
|
120 |
typedef Callback<void,Packet, double> SyncErrorCallback; |
1889 | 121 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
122 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
123 |
* \param device the device which contains this PHY. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
124 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
125 |
* Create a new PHY layer instance initialized with values |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
126 |
* coming from \valueref{WifiPhyEnergyDetectionThreshold}, |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
127 |
* \valueref{WifiPhyRxNoise}, \valueref{WifiPhyTxPowerBase}, |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
128 |
* \valueref{WifiPhyTxPowerEnd}, \valueref{WifiPhyTxPowerLevels}, |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
129 |
* \valueref{WifiPhyTxGain}, and, \valueref{WifiPhyRxGain} |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
130 |
*/ |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
131 |
WifiPhy (Ptr<WifiNetDevice> device); |
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
132 |
virtual ~WifiPhy (); |
1889 | 133 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
134 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
135 |
* \param channel the channel to connect to. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
136 |
*/ |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
137 |
void SetChannel (Ptr<WifiChannel> channel); |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
138 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
139 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
140 |
* \param callback the callback to invoke |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
141 |
* upon successful packet reception. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
142 |
*/ |
1889 | 143 |
void SetReceiveOkCallback (SyncOkCallback callback); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
144 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
145 |
* \param callback the callback to invoke |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
146 |
* upon erronous packet reception. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
147 |
*/ |
1889 | 148 |
void SetReceiveErrorCallback (SyncErrorCallback callback); |
149 |
||
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
150 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
151 |
* \param packet the packet to send |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
152 |
* \param mode the transmission mode to use to send this packet |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
153 |
* \param preamble the type of preamble to use to send this packet. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
154 |
* \param txPowerLevel a power level to use to send this packet. The real |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
155 |
* transmission power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
156 |
*/ |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
157 |
void SendPacket (Packet const packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel); |
1889 | 158 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
159 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
160 |
* \param listener the new listener |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
161 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
162 |
* Add the input listener to the list of objects to be notified of |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
163 |
* PHY-level events. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
164 |
*/ |
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
165 |
void RegisterListener (WifiPhyListener *listener); |
1889 | 166 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
167 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
168 |
* \returns true of the current state of the PHY layer is WifiPhy:LCCA_BUSY, false otherwise. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
169 |
*/ |
1889 | 170 |
bool IsStateCcaBusy (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
171 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
172 |
* \returns true of the current state of the PHY layer is WifiPhy::IDLE, false otherwise. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
173 |
*/ |
1889 | 174 |
bool IsStateIdle (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
175 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
176 |
* \returns true of the current state of the PHY layer is not WifiPhy::IDLE, false otherwise. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
177 |
*/ |
1889 | 178 |
bool IsStateBusy (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
179 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
180 |
* \returns true of the current state of the PHY layer is WifiPhy::SYNC, false otherwise. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
181 |
*/ |
1889 | 182 |
bool IsStateSync (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
183 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
184 |
* \returns true of the current state of the PHY layer is WifiPhy::TX, false otherwise. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
185 |
*/ |
1889 | 186 |
bool IsStateTx (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
187 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
188 |
* \returns the amount of time since the current state has started. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
189 |
*/ |
1889 | 190 |
Time GetStateDuration (void); |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
191 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
192 |
* \returns the predicted delay until this PHY can become WifiPhy::IDLE. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
193 |
* |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
194 |
* The PHY will never become WifiPhy::IDLE _before_ the delay returned by |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
195 |
* this method but it could become really idle later. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
196 |
*/ |
1889 | 197 |
Time GetDelayUntilIdle (void); |
198 |
||
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
199 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
200 |
* \param size the number of bytes in the packet to send |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
201 |
* \param payloadMode the transmission mode to use for this packet |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
202 |
* \param preamble the type of preamble to use for this packet. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
203 |
* \returns the total amount of time this PHY will stay busy for |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
204 |
* the transmission of these bytes. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
205 |
*/ |
1920
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
206 |
Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble) const; |
1889 | 207 |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
208 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
209 |
* \returns the number of transmission modes supported by this PHY. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
210 |
*/ |
1889 | 211 |
uint32_t GetNModes (void) const; |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
212 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
213 |
* \param mode index in array of supported modes |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
214 |
* \returns the mode whose index is specified. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
215 |
*/ |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
216 |
WifiMode GetMode (uint32_t mode) const; |
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
217 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
218 |
* \returns the number of tx power levels available for this PHY. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
219 |
*/ |
1889 | 220 |
uint32_t GetNTxpower (void) const; |
221 |
/* return snr: W/W */ |
|
2057
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
222 |
/** |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
223 |
* \param txMode the transmission mode |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
224 |
* \param ber the probability of bit error rate |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
225 |
* \returns the minimum snr which is required to achieve |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
226 |
* the requested ber for the specified transmission mode. |
73723aad7527
dox for WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2056
diff
changeset
|
227 |
*/ |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
228 |
double CalculateSnr (WifiMode txMode, double ber) const; |
1889 | 229 |
|
230 |
private: |
|
231 |
class NiChange { |
|
232 |
public: |
|
233 |
NiChange (Time time, double delta); |
|
234 |
Time GetTime (void) const; |
|
235 |
double GetDelta (void) const; |
|
236 |
bool operator < (NiChange const &o) const; |
|
237 |
private: |
|
238 |
Time m_time; |
|
239 |
double m_delta; |
|
240 |
}; |
|
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
241 |
typedef std::vector<WifiMode> Modes; |
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
242 |
typedef std::list<WifiPhyListener *> Listeners; |
1889 | 243 |
typedef std::list<Ptr<RxEvent> > Events; |
244 |
typedef std::vector <NiChange> NiChanges; |
|
245 |
||
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
246 |
private: |
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
247 |
// inherited from ns3::Object. |
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
248 |
virtual Ptr<TraceResolver> GetTraceResolver (void) const; |
2083
c7541b84285e
add the holland 802.11a set of modes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2071
diff
changeset
|
249 |
void Configure80211aParameters (void); |
c7541b84285e
add the holland 802.11a set of modes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2071
diff
changeset
|
250 |
void PrintModes (void) const; |
1964
041240a915f8
build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1920
diff
changeset
|
251 |
void Configure80211a (void); |
2083
c7541b84285e
add the holland 802.11a set of modes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2071
diff
changeset
|
252 |
void ConfigureHolland (void); |
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
253 |
char const *StateToString (enum State state); |
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
254 |
enum WifiPhy::State GetState (void); |
1889 | 255 |
double GetEdThresholdW (void) const; |
256 |
double DbmToW (double dbm) const; |
|
257 |
double DbToRatio (double db) const; |
|
258 |
Time GetMaxPacketDuration (void) const; |
|
259 |
void CancelRx (void); |
|
260 |
double GetPowerDbm (uint8_t power) const; |
|
261 |
void NotifyTxStart (Time duration); |
|
262 |
void NotifyWakeup (void); |
|
263 |
void NotifySyncStart (Time duration); |
|
264 |
void NotifySyncEndOk (void); |
|
265 |
void NotifySyncEndError (void); |
|
266 |
void NotifyCcaBusyStart (Time duration); |
|
267 |
void LogPreviousIdleAndCcaBusyStates (void); |
|
268 |
void SwitchToTx (Time txDuration); |
|
269 |
void SwitchToSync (Time syncDuration); |
|
270 |
void SwitchFromSync (void); |
|
271 |
void SwitchMaybeToCcaBusy (Time duration); |
|
272 |
void AppendEvent (Ptr<RxEvent> event); |
|
273 |
double CalculateNoiseInterferenceW (Ptr<RxEvent> event, NiChanges *ni) const; |
|
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
274 |
double CalculateSnr (double signal, double noiseInterference, WifiMode mode) const; |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
275 |
double CalculateChunkSuccessRate (double snir, Time delay, WifiMode mode) const; |
1889 | 276 |
double CalculatePer (Ptr<const RxEvent> event, NiChanges *ni) const; |
1919
46ed9ed9dac0
remove extra WifiPhy::SendPacket argument. Add header mode support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1902
diff
changeset
|
277 |
void EndSync (Packet const packet, Ptr<RxEvent> event); |
1892
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
278 |
double Log2 (double val) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
279 |
double GetBpskBer (double snr, uint32_t signalSpread, uint32_t phyRate) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
280 |
double GetQamBer (double snr, unsigned int m, uint32_t signalSpread, uint32_t phyRate) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
281 |
uint32_t Factorial (uint32_t k) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
282 |
double Binomial (uint32_t k, double p, uint32_t n) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
283 |
double CalculatePdOdd (double ber, unsigned int d) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
284 |
double CalculatePdEven (double ber, unsigned int d) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
285 |
double CalculatePd (double ber, unsigned int d) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
286 |
double GetFecBpskBer (double snr, double nbits, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
287 |
uint32_t signalSpread, uint32_t phyRate, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
288 |
uint32_t dFree, uint32_t adFree) const; |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
289 |
double GetFecQamBer (double snr, uint32_t nbits, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
290 |
uint32_t signalSpread, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
291 |
uint32_t phyRate, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
292 |
uint32_t m, uint32_t dfree, |
7833628614bf
implement WifiPhy::GetChunkSuccessRate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1891
diff
changeset
|
293 |
uint32_t adFree, uint32_t adFreePlusOne) const; |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
294 |
double GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const; |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
295 |
/* rxPower unit is Watt */ |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
296 |
void ReceivePacket (Packet packet, |
1988
210701141b08
convert to and from dbms when needed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1978
diff
changeset
|
297 |
double rxPowerDbm, |
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
298 |
WifiMode mode, |
1920
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
299 |
WifiPreamble preamble); |
1889 | 300 |
private: |
301 |
uint64_t m_txPrepareDelayUs; |
|
1920
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
302 |
uint64_t m_plcpLongPreambleDelayUs; |
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
303 |
uint64_t m_plcpShortPreambleDelayUs; |
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
304 |
WifiMode m_longPlcpHeaderMode; |
1d4864775cf8
replace header mode with preamble mode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1919
diff
changeset
|
305 |
WifiMode m_shortPlcpHeaderMode; |
1889 | 306 |
uint32_t m_plcpHeaderLength; |
307 |
Time m_maxPacketDuration; |
|
308 |
||
309 |
double m_edThresholdW; /* unit: W */ |
|
2071
122c95ffccdd
use dB instead of dbm where appropriate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2057
diff
changeset
|
310 |
double m_txGainDb; |
122c95ffccdd
use dB instead of dbm where appropriate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2057
diff
changeset
|
311 |
double m_rxGainDb; |
1889 | 312 |
double m_rxNoiseRatio; |
313 |
double m_txPowerBaseDbm; |
|
314 |
double m_txPowerEndDbm; |
|
315 |
uint32_t m_nTxPower; |
|
316 |
||
317 |
||
318 |
bool m_syncing; |
|
319 |
Time m_endTx; |
|
320 |
Time m_endSync; |
|
321 |
Time m_endCcaBusy; |
|
322 |
Time m_startTx; |
|
323 |
Time m_startSync; |
|
324 |
Time m_startCcaBusy; |
|
325 |
Time m_previousStateChangeTime; |
|
326 |
||
1891
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
327 |
Ptr<WifiChannel> m_channel; |
add6fb8761f3
use WifiMode rather than TransmissionMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1890
diff
changeset
|
328 |
Ptr<WifiNetDevice> m_device; |
1889 | 329 |
SyncOkCallback m_syncOkCallback; |
330 |
SyncErrorCallback m_syncErrorCallback; |
|
331 |
Modes m_modes; |
|
332 |
Listeners m_listeners; |
|
333 |
EventId m_endSyncEvent; |
|
334 |
Events m_events; |
|
335 |
UniformVariable m_random; |
|
2055
8899d6ef5d52
phy state logger
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2054
diff
changeset
|
336 |
CallbackTraceSource<Time,Time,enum WifiPhy::State> m_stateLogger; |
1889 | 337 |
}; |
338 |
||
1977
4303409f3d8e
remove uneeded trailing ';'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1964
diff
changeset
|
339 |
} // namespace ns3 |
1889 | 340 |
|
341 |
||
1890
a2b30c6456c9
Phy80211 -> WifiPhy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1889
diff
changeset
|
342 |
#endif /* WIFI_PHY_H */ |