|
|
| 75 |
MakeDoubleAccessor (&YansWifiPhy::SetRxGain, |
75 |
MakeDoubleAccessor (&YansWifiPhy::SetRxGain, |
| 76 |
&YansWifiPhy::GetRxGain), |
76 |
&YansWifiPhy::GetRxGain), |
| 77 |
MakeDoubleChecker<double> ()) |
77 |
MakeDoubleChecker<double> ()) |
| 78 |
.AddAttribute ("TxPowerLevels", |
78 |
.AddAttribute ("TxPower", |
| 79 |
"Number of transmission power levels available between " |
79 |
"TX power to be used (dBm).", |
| 80 |
"TxPowerBase and TxPowerEnd included.", |
|
|
| 81 |
UintegerValue (1), |
| 82 |
MakeUintegerAccessor (&YansWifiPhy::m_nTxPower), |
| 83 |
MakeUintegerChecker<uint32_t> ()) |
| 84 |
.AddAttribute ("TxPowerEnd", |
| 85 |
"Maximum available transmission level (dbm).", |
| 86 |
DoubleValue (16.0206), |
80 |
DoubleValue (16.0206), |
| 87 |
MakeDoubleAccessor (&YansWifiPhy::SetTxPowerEnd, |
81 |
MakeDoubleAccessor (&YansWifiPhy::SetTxPower, |
| 88 |
&YansWifiPhy::GetTxPowerEnd), |
82 |
&YansWifiPhy::GetTxPower), |
| 89 |
MakeDoubleChecker<double> ()) |
|
|
| 90 |
.AddAttribute ("TxPowerStart", |
| 91 |
"Minimum available transmission level (dbm).", |
| 92 |
DoubleValue (16.0206), |
| 93 |
MakeDoubleAccessor (&YansWifiPhy::SetTxPowerStart, |
| 94 |
&YansWifiPhy::GetTxPowerStart), |
| 95 |
MakeDoubleChecker<double> ()) |
83 |
MakeDoubleChecker<double> ()) |
| 96 |
.AddAttribute ("RxNoiseFigure", |
84 |
.AddAttribute ("RxNoiseFigure", |
| 97 |
"Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver." |
85 |
"Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver." |
|
|
| 191 |
m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb)); |
179 |
m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb)); |
| 192 |
} |
180 |
} |
| 193 |
void |
181 |
void |
| 194 |
YansWifiPhy::SetTxPowerStart (double start) |
182 |
YansWifiPhy::SetTxPower (double txPowerDbm) |
| 195 |
{ |
183 |
{ |
| 196 |
NS_LOG_FUNCTION (this << start); |
184 |
NS_LOG_FUNCTION (this << txPowerDbm); |
| 197 |
m_txPowerBaseDbm = start; |
185 |
m_txPowerDbm = txPowerDbm; |
| 198 |
} |
|
|
| 199 |
void |
| 200 |
YansWifiPhy::SetTxPowerEnd (double end) |
| 201 |
{ |
| 202 |
NS_LOG_FUNCTION (this << end); |
| 203 |
m_txPowerEndDbm = end; |
| 204 |
} |
| 205 |
void |
| 206 |
YansWifiPhy::SetNTxPower (uint32_t n) |
| 207 |
{ |
| 208 |
NS_LOG_FUNCTION (this << n); |
| 209 |
m_nTxPower = n; |
| 210 |
} |
186 |
} |
| 211 |
void |
187 |
void |
| 212 |
YansWifiPhy::SetTxGain (double gain) |
188 |
YansWifiPhy::SetTxGain (double gain) |
|
|
| 254 |
return RatioToDb (m_interference.GetNoiseFigure ()); |
230 |
return RatioToDb (m_interference.GetNoiseFigure ()); |
| 255 |
} |
231 |
} |
| 256 |
double |
232 |
double |
| 257 |
YansWifiPhy::GetTxPowerStart (void) const |
233 |
YansWifiPhy::GetTxPower (void) const |
| 258 |
{ |
234 |
{ |
| 259 |
return m_txPowerBaseDbm; |
235 |
return m_txPowerDbm; |
| 260 |
} |
|
|
| 261 |
double |
| 262 |
YansWifiPhy::GetTxPowerEnd (void) const |
| 263 |
{ |
| 264 |
return m_txPowerEndDbm; |
| 265 |
} |
236 |
} |
| 266 |
double |
237 |
double |
| 267 |
YansWifiPhy::GetTxGain (void) const |
238 |
YansWifiPhy::GetTxGain (void) const |
|
|
| 489 |
} |
460 |
} |
| 490 |
|
461 |
|
| 491 |
void |
462 |
void |
| 492 |
YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble, uint8_t txPower) |
463 |
YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble) |
| 493 |
{ |
464 |
{ |
| 494 |
NS_LOG_FUNCTION (this << packet << txMode << preamble << (uint32_t)txPower); |
465 |
NS_LOG_FUNCTION (this << packet << txMode << preamble); |
| 495 |
/* Transmission can happen if: |
466 |
/* Transmission can happen if: |
| 496 |
* - we are syncing on a packet. It is the responsability of the |
467 |
* - we are syncing on a packet. It is the responsability of the |
| 497 |
* MAC layer to avoid doing this but the PHY does nothing to |
468 |
* MAC layer to avoid doing this but the PHY does nothing to |
|
|
| 509 |
uint32_t dataRate500KbpsUnits = txMode.GetDataRate () / 500000; |
480 |
uint32_t dataRate500KbpsUnits = txMode.GetDataRate () / 500000; |
| 510 |
bool isShortPreamble = (WIFI_PREAMBLE_SHORT == preamble); |
481 |
bool isShortPreamble = (WIFI_PREAMBLE_SHORT == preamble); |
| 511 |
NotifyPromiscSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble); |
482 |
NotifyPromiscSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble); |
| 512 |
m_state->SwitchToTx (txDuration, packet, txMode, preamble, txPower); |
483 |
m_state->SwitchToTx (txDuration, packet, txMode, preamble, m_txPowerDbm); |
| 513 |
m_channel->Send (this, packet, GetPowerDbm (txPower) + m_txGainDb, txMode, preamble); |
484 |
m_channel->Send (this, packet, m_txPowerDbm + m_txGainDb, txMode, preamble); |
| 514 |
} |
485 |
} |
| 515 |
|
486 |
|
| 516 |
uint32_t |
487 |
uint32_t |
|
|
| 523 |
{ |
494 |
{ |
| 524 |
return m_deviceRateSet[mode]; |
495 |
return m_deviceRateSet[mode]; |
| 525 |
} |
496 |
} |
| 526 |
uint32_t |
|
|
| 527 |
YansWifiPhy::GetNTxPower (void) const |
| 528 |
{ |
| 529 |
return m_nTxPower; |
| 530 |
} |
| 531 |
|
497 |
|
| 532 |
void |
498 |
void |
| 533 |
YansWifiPhy::Configure80211a (void) |
499 |
YansWifiPhy::Configure80211a (void) |
|
|
| 727 |
return m_edThresholdW; |
693 |
return m_edThresholdW; |
| 728 |
} |
694 |
} |
| 729 |
|
695 |
|
| 730 |
double |
|
|
| 731 |
YansWifiPhy::GetPowerDbm (uint8_t power) const |
| 732 |
{ |
| 733 |
NS_ASSERT (m_txPowerBaseDbm <= m_txPowerEndDbm); |
| 734 |
NS_ASSERT (m_nTxPower > 0); |
| 735 |
double dbm; |
| 736 |
if (m_nTxPower > 1) |
| 737 |
{ |
| 738 |
dbm = m_txPowerBaseDbm + power * (m_txPowerEndDbm - m_txPowerBaseDbm) / (m_nTxPower - 1); |
| 739 |
} |
| 740 |
else |
| 741 |
{ |
| 742 |
NS_ASSERT_MSG (m_txPowerBaseDbm == m_txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1"); |
| 743 |
dbm = m_txPowerBaseDbm; |
| 744 |
} |
| 745 |
return dbm; |
| 746 |
} |
| 747 |
|
| 748 |
void |
696 |
void |
| 749 |
YansWifiPhy::EndReceive (Ptr<Packet> packet, Ptr<InterferenceHelper::Event> event) |
697 |
YansWifiPhy::EndReceive (Ptr<Packet> packet, Ptr<InterferenceHelper::Event> event) |
| 750 |
{ |
698 |
{ |