src/devices/wifi/wifi-phy-state-helper.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 12 Jun 2008 11:05:46 -0700
changeset 3897 44645cec42f2
child 3898 0d0517e7a557
permissions -rw-r--r--
split state management in a helper class
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3897
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#ifndef WIFI_PHY_STATE_HELPER_H
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#define WIFI_PHY_STATE_HELPER_H
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "wifi-phy.h"
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include "ns3/traced-callback.h"
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
#include <vector>
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
namespace ns3 {
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
class WifiPhyStateHelper
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
{
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
public:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
  WifiPhyStateHelper ();
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
  void SetReceiveOkCallback (WifiPhy::SyncOkCallback callback);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
  void SetReceiveErrorCallback (WifiPhy::SyncErrorCallback callback);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
  void RegisterListener (WifiPhyListener *listener);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
  enum WifiPhy::State GetState (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
  bool IsStateCcaBusy (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
  bool IsStateIdle (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
  bool IsStateBusy (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
  bool IsStateSync (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
  bool IsStateTx (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
  Time GetStateDuration (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
  Time GetDelayUntilIdle (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
  Time GetLastRxStartTime (void) const;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
  void SwitchToTx (Time txDuration, Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble, uint8_t txPower);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
  void SwitchToSync (Time syncDuration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
  void 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
    31
  void 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
    32
  void SwitchMaybeToCcaBusy (Time duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
private:
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
  typedef std::vector<WifiPhyListener *> Listeners;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  char const *StateToString (enum WifiPhy::State state);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  void LogPreviousIdleAndCcaBusyStates (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  void NotifyTxStart (Time duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
  void NotifyWakeup (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  void NotifySyncStart (Time duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  void NotifySyncEndOk (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  void NotifySyncEndError (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
  void NotifyCcaBusyStart (Time duration);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
  void DoSwitchFromSync (void);
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
  bool m_syncing;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
  Time m_endTx;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  Time m_endSync;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  Time m_endCcaBusy;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  Time m_startTx;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  Time m_startSync;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
  Time m_startCcaBusy;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  Time m_previousStateChangeTime;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  TracedCallback<Time,Time,enum WifiPhy::State> m_stateLogger;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  Listeners m_listeners;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  TracedCallback<Ptr<const Packet>, double, WifiMode, enum WifiPreamble> m_rxOkTrace;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  TracedCallback<Ptr<const Packet>, double> m_rxErrorTrace;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  TracedCallback<Ptr<const Packet>,WifiMode,WifiPreamble,uint8_t> m_txTrace;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
  WifiPhy::SyncOkCallback m_syncOkCallback;
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  WifiPhy::SyncErrorCallback m_syncErrorCallback;
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
44645cec42f2 split state management in a helper class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
} // namespace ns3
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
#endif /* WIFI_PHY_STATE_HELPER_H */