src/devices/wifi/propagation-delay-model.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 11 Oct 2007 15:43:47 +0200
changeset 1957 9ce0828c6a19
parent 1882 061f7f7f9992
child 1958 25e190091c5e
permissions -rw-r--r--
add default value support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "propagation-delay-model.h"
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "ns3/random-variable.h"
1957
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
     3
#include "ns3/default-value.h"
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
     4
#include "ns3/random-variable-default-value.h"
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
namespace ns3 {
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
1957
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
     8
enum ModelType
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
     9
{
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    10
  RANDOM,
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    11
  CONSTANT_SPEED
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    12
};
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    13
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    14
static EnumDefaultValue<enum ModelType> g_modelType
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    15
("PropagationDelayModelType",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    16
 "The type of propagation delay model to use.",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    17
 CONSTANT_SPEED, "ConstantSpeed",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    18
 RANDOM, "Random");
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    19
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    20
static NumericDefaultValue<double> g_speed
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    21
("PropagationDelayConstantSpeed",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    22
 "The speed (m/s) of propagation if a ConstantSpeed propagation delay model is used.",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    23
 300000000.0);
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    24
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    25
static RandomVariableDefaultValue g_random
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    26
("PropagationDelayRandomDistribution", 
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    27
 "The delay distribution to use if a Random propagation delay model is used.",
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    28
 "Uniform:0:1.0");
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    29
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    30
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
PropagationDelayModel::~PropagationDelayModel ()
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
{}
1957
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    33
Ptr<PropagationDelayModel> 
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    34
PropagationDelayModel::CreateDefault (void)
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    35
{
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    36
  switch (g_modelType.GetValue ()) {
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    37
  case CONSTANT_SPEED:
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    38
    return Create<ConstantSpeedPropagationDelayModel> (g_speed.GetValue ());
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    39
    break;
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    40
  case RANDOM:
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    41
    return Create<RandomPropagationDelayModel> ();
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    42
    break;
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    43
  default:
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    44
    NS_ASSERT (false);
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    45
    return 0;
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    46
    break;
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    47
  }
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    48
}
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    49
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    50
RandomPropagationDelayModel::RandomPropagationDelayModel ()
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    51
  : m_variable (g_random.GetCopy ())
9ce0828c6a19 add default value support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    52
{}
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
RandomPropagationDelayModel::RandomPropagationDelayModel (const RandomVariable &variable)
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  : m_variable (variable.Copy ())
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
{}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
RandomPropagationDelayModel::~RandomPropagationDelayModel ()
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  delete m_variable;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
Time 
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
RandomPropagationDelayModel::GetDelay (double distance) const
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  return Seconds (m_variable->GetValue ());
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
ConstantSpeedPropagationDelayModel::ConstantSpeedPropagationDelayModel (double speed)
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
  : m_speed (speed)
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
{}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
Time 
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
ConstantSpeedPropagationDelayModel::GetDelay (double distance) const
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
  double seconds = distance / m_speed;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
  return Seconds (seconds);
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
void 
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
ConstantSpeedPropagationDelayModel::SetSpeed (double speed)
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
  m_speed = speed;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
double 
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
ConstantSpeedPropagationDelayModel::GetSpeed (void) const
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  return m_speed;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
}
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
} // namespace ns3