src/devices/wifi/wifi-phy-state-helper.cc
author Timo Bingmann <tbns@idlebox.net>
Mon, 30 Nov 2009 18:20:30 +0100
changeset 5819 514ec98954ab
parent 5189 8fcdf87a790a
child 5820 1c02054740eb
permissions -rw-r--r--
Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3898
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     2
/*
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     4
 *
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     7
 * published by the Free Software Foundation;
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     8
 *
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    12
 * GNU General Public License for more details.
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    13
 *
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    15
 * along with this program; if not, write to the Free Software
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    17
 *
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
0d0517e7a557 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3897
diff changeset
    19
 */
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "wifi-phy-state-helper.h"
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "ns3/log.h"
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "ns3/simulator.h"
3900
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    23
#include "ns3/trace-source-accessor.h"
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
NS_LOG_COMPONENT_DEFINE ("WifiPhyStateHelper");
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
namespace ns3 {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
    29
NS_OBJECT_ENSURE_REGISTERED (WifiPhyStateHelper);
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
    30
3900
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    31
TypeId 
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    32
WifiPhyStateHelper::GetTypeId (void)
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    33
{
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    34
  static TypeId tid = TypeId ("ns3::WifiPhyStateHelper")
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    35
    .SetParent<Object> ()
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    36
    .AddConstructor<WifiPhyStateHelper> ()
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    37
    .AddTraceSource ("State",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    38
                     "The state of the PHY layer",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    39
                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_stateLogger))
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    40
    .AddTraceSource ("RxOk",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    41
                     "A packet has been received successfully.",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    42
                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxOkTrace))
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    43
    .AddTraceSource ("RxError",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    44
                     "A packet has been received unsuccessfully.",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    45
                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxErrorTrace))
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    46
    .AddTraceSource ("Tx", "Packet transmission is starting.",
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    47
                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_txTrace))
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    48
    ;
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    49
  return tid;
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    50
}
1687492ff059 re-enable tracing of wifi phy state.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3899
diff changeset
    51
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
WifiPhyStateHelper::WifiPhyStateHelper ()
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  : m_syncing (false),
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    m_endTx (Seconds (0)),
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
    m_endSync (Seconds (0)),
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
    m_endCcaBusy (Seconds (0)),
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
    57
    m_endSwitching (Seconds (0)), 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
    m_startTx (Seconds (0)),
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
    m_startSync (Seconds (0)),
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
    m_startCcaBusy (Seconds (0)),
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
    61
    m_startSwitching (Seconds (0)), 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
    m_previousStateChangeTime (Seconds (0))
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  NS_LOG_FUNCTION (this);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
WifiPhyStateHelper::SetReceiveOkCallback (WifiPhy::SyncOkCallback callback)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  m_syncOkCallback = callback;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
WifiPhyStateHelper::SetReceiveErrorCallback (WifiPhy::SyncErrorCallback callback)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  m_syncErrorCallback = callback;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
WifiPhyStateHelper::RegisterListener (WifiPhyListener *listener)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  m_listeners.push_back (listener);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
bool 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
WifiPhyStateHelper::IsStateCcaBusy (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
  return GetState () == WifiPhy::CCA_BUSY;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
bool 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
WifiPhyStateHelper::IsStateIdle (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
    92
  return (GetState () == WifiPhy::IDLE);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
bool 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
WifiPhyStateHelper::IsStateBusy (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
    97
  return (GetState () != WifiPhy::IDLE);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
bool 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
WifiPhyStateHelper::IsStateSync (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   102
  return (GetState () == WifiPhy::SYNC);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
bool 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
WifiPhyStateHelper::IsStateTx (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   107
  return (GetState () == WifiPhy::TX);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
}
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   109
bool 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   110
WifiPhyStateHelper::IsStateSwitching (void)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   111
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   112
  return (GetState () == WifiPhy::SWITCHING);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   113
}
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
Time
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
WifiPhyStateHelper::GetStateDuration (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
  return Simulator::Now () - m_previousStateChangeTime;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
Time
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
WifiPhyStateHelper::GetDelayUntilIdle (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  Time retval;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
  switch (GetState ()) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  case WifiPhy::SYNC:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
    retval = m_endSync - Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  case WifiPhy::TX:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
    retval = m_endTx - Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
  case WifiPhy::CCA_BUSY:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
    retval = m_endCcaBusy - Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
    break;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   138
  case WifiPhy::SWITCHING: 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   139
    retval = m_endSwitching - Simulator::Now (); 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   140
    break;
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
  case WifiPhy::IDLE:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
    retval = Seconds (0);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
  default:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
    NS_ASSERT (false);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
    // NOTREACHED
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
    retval = Seconds (0);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
  retval = Max (retval, Seconds (0));
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
  return retval;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
Time 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
WifiPhyStateHelper::GetLastRxStartTime (void) const
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
  return m_startSync;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   160
const char *
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
WifiPhyStateHelper::StateToString (enum WifiPhy::State state)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
  switch (state) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
  case WifiPhy::TX:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
    return "TX";
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
  case WifiPhy::CCA_BUSY:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
    return "CCA_BUSY";
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
  case WifiPhy::IDLE:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
    return "IDLE";
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
  case WifiPhy::SYNC:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
    return "SYNC";
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
    break;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   176
  case WifiPhy::SWITCHING: 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   177
    return "SWITCHING";
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   178
    break;
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
  default:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
    NS_ASSERT (false);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
    // quiet compiler
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
    return "INVALID";
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
enum WifiPhy::State 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
WifiPhyStateHelper::GetState (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
  if (m_endTx > Simulator::Now ()) 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
    {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
      return WifiPhy::TX;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
    } 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
  else if (m_syncing) 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
    {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
      return WifiPhy::SYNC;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
    } 
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   198
  else if (m_endSwitching > Simulator::Now ())  
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   199
    { 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   200
      return WifiPhy::SWITCHING;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   201
    }
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
  else if (m_endCcaBusy > Simulator::Now ()) 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
    {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
      return WifiPhy::CCA_BUSY;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
    } 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
  else 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
    {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
      return WifiPhy::IDLE;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
    }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
WifiPhyStateHelper::NotifyTxStart (Time duration)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
    (*i)->NotifyTxStart (duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
WifiPhyStateHelper::NotifySyncStart (Time duration)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
    (*i)->NotifyRxStart (duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
WifiPhyStateHelper::NotifySyncEndOk (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
    (*i)->NotifyRxEndOk ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
WifiPhyStateHelper::NotifySyncEndError (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
    (*i)->NotifyRxEndError ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
void 
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
   242
WifiPhyStateHelper::NotifyMaybeCcaBusyStart (Time duration)
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
   245
    (*i)->NotifyMaybeCcaBusyStart (duration);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
}
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   248
void 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   249
WifiPhyStateHelper::NotifySwitchingStart (Time duration)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   250
{
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   251
  for (Listeners::const_iterator i = m_listeners.begin (); i != m_listeners.end (); i++) {
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   252
    (*i)->NotifySwitchingStart (duration);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   253
  }
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   254
}
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
void
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
WifiPhyStateHelper::LogPreviousIdleAndCcaBusyStates (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
  Time now = Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
  Time idleStart = Max (m_endCcaBusy, m_endSync);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
  idleStart = Max (idleStart, m_endTx);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   262
  idleStart = Max (idleStart, m_endSwitching); 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  NS_ASSERT (idleStart <= now);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
  if (m_endCcaBusy > m_endSync && 
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   265
      m_endCcaBusy > m_endSwitching &&  
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
      m_endCcaBusy > m_endTx) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
    Time ccaBusyStart = Max (m_endTx, m_endSync);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
    ccaBusyStart = Max (ccaBusyStart, m_startCcaBusy);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   269
    ccaBusyStart = Max (ccaBusyStart, m_endSwitching); 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
    m_stateLogger (ccaBusyStart, idleStart - ccaBusyStart, WifiPhy::CCA_BUSY);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
  m_stateLogger (idleStart, now - idleStart, WifiPhy::IDLE);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
void
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
WifiPhyStateHelper::SwitchToTx (Time txDuration, Ptr<const Packet> packet, WifiMode txMode, 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
			  WifiPreamble preamble, uint8_t txPower)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
  m_txTrace (packet, txMode, preamble, txPower);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
  NotifyTxStart (txDuration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
  Time now = Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
  switch (GetState ()) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
  case WifiPhy::SYNC:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
    /* The packet which is being received as well
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
     * as its endSync event are cancelled by the caller.
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
     */
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
    m_syncing = false;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
    m_stateLogger (m_startSync, now - m_startSync, WifiPhy::SYNC);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
    m_endSync = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
  case WifiPhy::CCA_BUSY: {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
    Time ccaStart = Max (m_endSync, m_endTx);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
    ccaStart = Max (ccaStart, m_startCcaBusy);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   294
    ccaStart = Max (ccaStart, m_endSwitching); 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
    m_stateLogger (ccaStart, now - ccaStart, WifiPhy::CCA_BUSY);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
  } break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
  case WifiPhy::IDLE:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
    LogPreviousIdleAndCcaBusyStates ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
    break;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   300
  case WifiPhy::SWITCHING: 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  default:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
    NS_ASSERT (false);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
  m_stateLogger (now, txDuration, WifiPhy::TX);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
  m_previousStateChangeTime = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
  m_endTx = now + txDuration;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
  m_startTx = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
void
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
WifiPhyStateHelper::SwitchToSync (Time rxDuration)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
  NS_ASSERT (IsStateIdle () || IsStateCcaBusy ());
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
  NS_ASSERT (!m_syncing);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
  NotifySyncStart (rxDuration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
  Time now = Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
  switch (GetState ()) {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
  case WifiPhy::IDLE:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
    LogPreviousIdleAndCcaBusyStates ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
  case WifiPhy::CCA_BUSY: {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
    Time ccaStart = Max (m_endSync, m_endTx);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
    ccaStart = Max (ccaStart, m_startCcaBusy);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   324
    ccaStart = Max (ccaStart, m_endSwitching); 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
    m_stateLogger (ccaStart, now - ccaStart, WifiPhy::CCA_BUSY);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
  } break;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   327
  case WifiPhy::SWITCHING: 
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
  case WifiPhy::SYNC:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
  case WifiPhy::TX:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
    NS_ASSERT (false);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
  m_previousStateChangeTime = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
  m_syncing = true;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
  m_startSync = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
  m_endSync = now + rxDuration;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
  NS_ASSERT (IsStateSync ());
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
}
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   339
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   340
void 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   341
WifiPhyStateHelper::SwitchToChannelSwitching (Time switchingDuration)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   342
{ 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   343
  NotifySwitchingStart (switchingDuration); 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   344
  Time now = Simulator::Now ();
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   345
  switch (GetState ()) {
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   346
  case WifiPhy::SYNC:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   347
    /* The packet which is being received as well
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   348
     * as its endSync event are cancelled by the caller.
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   349
     */
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   350
    m_syncing = false;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   351
    m_stateLogger (m_startSync, now - m_startSync, WifiPhy::SYNC);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   352
    m_endSync = now;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   353
    break;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   354
  case WifiPhy::CCA_BUSY: {
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   355
    Time ccaStart = Max (m_endSync, m_endTx);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   356
    ccaStart = Max (ccaStart, m_startCcaBusy);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   357
    ccaStart = Max (ccaStart, m_endSwitching);  
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   358
    m_stateLogger (ccaStart, now - ccaStart, WifiPhy::CCA_BUSY);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   359
  } break;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   360
  case WifiPhy::IDLE:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   361
    LogPreviousIdleAndCcaBusyStates (); 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   362
    break;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   363
  case WifiPhy::TX:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   364
  case WifiPhy::SWITCHING:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   365
  default:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   366
    NS_ASSERT (false);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   367
    break;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   368
  }
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   369
  
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   370
  if (now < m_endCcaBusy)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   371
    {
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   372
      m_endCcaBusy = now; 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   373
    }
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   374
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   375
  m_stateLogger (now, switchingDuration, WifiPhy::SWITCHING);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   376
  m_previousStateChangeTime = now;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   377
  m_startSwitching = now;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   378
  m_endSwitching = now + switchingDuration;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   379
  NS_ASSERT (IsStateSwitching ());
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   380
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   381
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
WifiPhyStateHelper::SwitchFromSyncEndOk (Ptr<Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
  m_rxOkTrace (packet, snr, mode, preamble);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
  NotifySyncEndOk ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   387
  DoSwitchFromSync ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
  if (!m_syncOkCallback.IsNull ())
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
    {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
      m_syncOkCallback (packet, snr, mode, preamble);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   391
    }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   392
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   393
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   394
void 
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   395
WifiPhyStateHelper::SwitchFromSyncEndError (Ptr<const Packet> packet, double snr)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   396
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   397
  m_rxErrorTrace (packet, snr);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   398
  NotifySyncEndError ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
  DoSwitchFromSync ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
  if (!m_syncErrorCallback.IsNull ())
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   401
    {
3899
804d92c1f7c3 constify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3898
diff changeset
   402
      m_syncErrorCallback (packet, snr);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   403
    }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   405
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   406
void
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
WifiPhyStateHelper::DoSwitchFromSync (void)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
  NS_ASSERT (IsStateSync ());
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   410
  NS_ASSERT (m_syncing);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   411
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
  Time now = Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
  m_stateLogger (m_startSync, now - m_startSync, WifiPhy::SYNC);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
  m_previousStateChangeTime = now;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
  m_syncing = false;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   416
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
  NS_ASSERT (IsStateIdle () || IsStateCcaBusy ());
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
void
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
WifiPhyStateHelper::SwitchMaybeToCcaBusy (Time duration)
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
{
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
   422
  NotifyMaybeCcaBusyStart (duration);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
  Time now = Simulator::Now ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
  switch (GetState ()) {
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   425
  case WifiPhy::SWITCHING: 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 3905
diff changeset
   426
    break;
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   427
  case WifiPhy::IDLE:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   428
    LogPreviousIdleAndCcaBusyStates ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
  break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
  case WifiPhy::CCA_BUSY:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
  case WifiPhy::SYNC:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   433
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
  case WifiPhy::TX:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
    break;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   436
  }
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   437
  m_startCcaBusy = now;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3900
diff changeset
   438
  m_endCcaBusy = std::max (m_endCcaBusy, now + duration);
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
}
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   441
} // namespace ns3