src/devices/wifi/wifi-phy-test.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 10 Dec 2008 01:47:59 -0800
changeset 4003 49a08376f196
parent 3912 4d1a61f80745
child 4038 c6f634d0fc6f
permissions -rw-r--r--
bug 405: add more context to wifi logging
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
     1
#include "wifi-net-device.h"
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
     2
#include "yans-wifi-channel.h"
3888
a15618dcd0eb rename WifiPhy to YansWifiPhy and add WifiPhy abstract base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3885
diff changeset
     3
#include "yans-wifi-phy.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "propagation-loss-model.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include "propagation-delay-model.h"
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
     6
#include "error-rate-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
#include "ns3/ptr.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
#include "ns3/mobility-model.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
#include "ns3/static-mobility-model.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
#include "ns3/vector.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
#include "ns3/packet.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
#include "ns3/simulator.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
#include "ns3/nstime.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
#include "ns3/command-line.h"
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    15
#include "ns3/flow-id-tag.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
using namespace ns3;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
class PsrExperiment
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
public:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
  struct Input
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
  {
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    24
    Input ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
    double distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
    std::string txMode;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
    uint8_t txPowerLevel;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
    uint32_t packetSize;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
    uint32_t nPackets;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
  struct Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
  {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
    uint32_t received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
  PsrExperiment ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  struct PsrExperiment::Output Run (struct PsrExperiment::Input input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
private:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  void Send (void);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
  void Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  Ptr<WifiPhy> m_tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  struct Input m_input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  struct Output m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
};
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
void 
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
PsrExperiment::Send (void)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  Ptr<Packet> p = Create<Packet> (m_input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  WifiMode mode = WifiMode (m_input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  m_tx->SendPacket (p, mode, WIFI_PREAMBLE_SHORT, m_input.txPowerLevel);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
void 
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
PsrExperiment::Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  m_output.received++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
PsrExperiment::PsrExperiment ()
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
{}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    63
PsrExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    64
  : distance (5.0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    65
    txMode ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    66
    txPowerLevel (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    67
    packetSize (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    68
    nPackets (400)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    69
{}
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
struct PsrExperiment::Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
PsrExperiment::Run (struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
  m_output.received = 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  m_input = input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  Ptr<MobilityModel> posTx = CreateObject<StaticMobilityModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  posTx->SetPosition (Vector (0.0, 0.0, 0.0));
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
  Ptr<MobilityModel> posRx = CreateObject<StaticMobilityModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  posRx->SetPosition (Vector (m_input.distance, 0.0, 0.0));
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
    82
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  channel->SetPropagationLossModel (log);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    87
  Ptr<YansWifiPhy> tx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    88
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    89
  Ptr<ErrorRateModel> error = CreateObject<ErrorRateModel> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    90
  tx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    91
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    92
  tx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    93
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    94
  tx->SetMobility (posTx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    95
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    96
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
    97
  rx->SetReceiveOkCallback (MakeCallback (&PsrExperiment::Receive, this));
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
      Simulator::Schedule (Seconds (i), &PsrExperiment::Send, this);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
  m_tx = tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
  Simulator::Run ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  return m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   108
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   109
class CollisionExperiment
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   110
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   111
public:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   112
  struct Input
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   113
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   114
    Input ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   115
    Time interval;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   116
    double xA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   117
    double xB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   118
    std::string txModeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   119
    std::string txModeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   120
    uint8_t txPowerLevelA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   121
    uint8_t txPowerLevelB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   122
    uint32_t packetSizeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   123
    uint32_t packetSizeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   124
    uint32_t nPackets;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   125
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   126
  struct Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   127
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   128
    uint32_t receivedA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   129
    uint32_t receivedB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   130
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   131
  CollisionExperiment ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   132
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   133
  struct CollisionExperiment::Output Run (struct CollisionExperiment::Input input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   134
private:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   135
  void SendA (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   136
  void SendB (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   137
  void Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   138
  Ptr<WifiPhy> m_txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   139
  Ptr<WifiPhy> m_txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   140
  uint32_t m_flowIdA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   141
  uint32_t m_flowIdB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   142
  struct Input m_input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   143
  struct Output m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   144
};
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   145
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   146
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   147
CollisionExperiment::SendA (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   148
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   149
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   150
  p->AddTag (FlowIdTag (m_flowIdA));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   151
  m_txA->SendPacket (p, WifiMode (m_input.txModeA), 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   152
		     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   153
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   154
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   155
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   156
CollisionExperiment::SendB (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   157
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   158
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   159
  p->AddTag (FlowIdTag (m_flowIdB));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   160
  m_txB->SendPacket (p, WifiMode (m_input.txModeB), 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   161
		     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   162
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   163
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   164
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   165
CollisionExperiment::Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   166
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   167
  FlowIdTag tag;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   168
  p->FindFirstMatchingTag (tag);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   169
  if (tag.GetFlowId () == m_flowIdA)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   170
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   171
      m_output.receivedA++;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   172
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   173
  else if (tag.GetFlowId () == m_flowIdB)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   174
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   175
      m_output.receivedB++;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   176
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   177
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   178
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   179
CollisionExperiment::CollisionExperiment ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   180
{}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   181
CollisionExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   182
  : interval (MicroSeconds (0)),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   183
    xA (-5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   184
    xB (5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   185
    txModeA ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   186
    txModeB ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   187
    txPowerLevelA (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   188
    txPowerLevelB (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   189
    packetSizeA (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   190
    packetSizeB (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   191
    nPackets (400)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   192
{}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   193
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   194
struct CollisionExperiment::Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   195
CollisionExperiment::Run (struct CollisionExperiment::Input input)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   196
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   197
  m_output.receivedA = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   198
  m_output.receivedB = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   199
  m_input = input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   200
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   201
  m_flowIdA = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   202
  m_flowIdB = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   203
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   204
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   205
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   206
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   207
  channel->SetPropagationLossModel (log);
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   208
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   209
  Ptr<MobilityModel> posTxA = CreateObject<StaticMobilityModel> ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   210
  posTxA->SetPosition (Vector (input.xA, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   211
  Ptr<MobilityModel> posTxB = CreateObject<StaticMobilityModel> ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   212
  posTxB->SetPosition (Vector (input.xB, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   213
  Ptr<MobilityModel> posRx = CreateObject<StaticMobilityModel> ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   214
  posRx->SetPosition (Vector (0, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   215
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   216
  Ptr<YansWifiPhy> txA = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   217
  Ptr<YansWifiPhy> txB = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   218
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   219
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   220
  Ptr<ErrorRateModel> error = CreateObject<ErrorRateModel> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   221
  txA->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   222
  txB->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   223
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   224
  txA->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   225
  txB->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   226
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   227
  txA->SetMobility (posTxA);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   228
  txB->SetMobility (posTxB);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   229
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   230
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   231
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   232
  rx->SetReceiveOkCallback (MakeCallback (&CollisionExperiment::Receive, this));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   233
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   234
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   235
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   236
      Simulator::Schedule (Seconds (i), &CollisionExperiment::SendA, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   237
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   238
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   239
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   240
      Simulator::Schedule (Seconds (i) + m_input.interval, &CollisionExperiment::SendB, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   241
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   242
  m_txA = txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   243
  m_txB = txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   244
  Simulator::Run ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   245
  return m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   246
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   247
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   248
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
static void PrintPsr (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
  PsrExperiment experiment;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   252
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  cmd.AddValue ("Distance", "The distance between two phys", input.distance);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  double psr = output.received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  psr /= input.nPackets ;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
  
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
  std::cout << psr << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
double CalcPsr (struct PsrExperiment::Output output, struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
  double psr = output.received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
  psr /= input.nPackets ;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  return psr;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
static void PrintPsrVsDistance (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
{
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   280
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);  
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
  for (input.distance = 1.0; input.distance < 165; input.distance += 2.0)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
      std::cout << input.distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
      PsrExperiment experiment;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
      struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
      input.txMode = "wifia-6mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
    
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
      input.txMode = "wifia-9mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
      input.txMode = "wifia-12mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
      input.txMode = "wifia-18mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
      input.txMode = "wifia-24mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
      input.txMode = "wifia-36mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
      input.txMode = "wifia-48mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
      input.txMode = "wifia-54mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
      std::cout << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
static void PrintSizeVsRange (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
{
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   331
  double targetPsr = 0.05;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   332
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);  
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   337
  cmd.AddValue ("TargetPsr", "The psr needed to assume that we are within range", targetPsr);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
  for (input.packetSize = 10; input.packetSize < 3000; input.packetSize += 40)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   341
      double precision = 0.1;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   342
      double low = 1.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   343
      double high = 200.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   344
      while (high - low > precision)
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
	{
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   346
	  double middle = low + (high - low) / 2;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
	  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
	  PsrExperiment experiment;
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   349
	  input.distance = middle;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
	  output = experiment.Run (input);
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   351
	  double psr = CalcPsr (output, input);
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   352
	  if (psr >= targetPsr)
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
	    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   354
	      low = middle;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   355
	    }
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   356
	  else
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   357
	    {
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   358
	      high = middle;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
	    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
	}
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   361
      std::cout << input.packetSize << " " << input.distance << std::endl;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   365
static void PrintPsrVsCollisionInterval (int argc, char *argv[])
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   366
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   367
  CollisionExperiment::Input input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   368
  input.nPackets = 100;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   369
  CommandLine cmd;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   370
  cmd.AddValue ("NPackets", "The number of packets to send for each transmitter", input.nPackets);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   371
  cmd.AddValue ("xA", "the position of transmitter A", input.xA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   372
  cmd.AddValue ("xB", "the position of transmitter B", input.xB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   373
  for (uint32_t i = 0; i < 100; i += 1)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   374
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   375
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   376
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   377
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   378
      output = experiment.Run (input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   379
      double perA = (output.receivedA+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   380
      double perB = (output.receivedB+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   381
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   382
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   383
  for (uint32_t i = 100; i < 4000; i += 50)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   384
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   385
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   386
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   387
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   388
      output = experiment.Run (input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   389
      double perA = (output.receivedA+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   390
      double perB = (output.receivedB+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   391
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   392
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   393
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   394
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   395
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   396
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   397
int main (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   398
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
  if (argc <= 1)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   401
      std::cout << "Available experiments: "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   402
		<< "Psr "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   403
		<< "SizeVsRange "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
		<< "PsrVsDistance "
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   405
		<< "PsrVsCollisionInterval "
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   406
		<< std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
      return -1;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
  std::string type = argv[1];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   410
  argc--;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   411
  argv[1] = argv[0];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
  argv++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
  if (type == "Psr")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
      PrintPsr (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   416
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
  else if (type == "SizeVsRange")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
      PrintSizeVsRange (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
  else if (type == "PsrVsDistance")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   422
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
      PrintPsrVsDistance (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
    }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   425
  else if (type == "PsrVsCollisionInterval")
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   426
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   427
      PrintPsrVsCollisionInterval (argc, argv);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   428
    }
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
  return 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
}