Bug 1048: MatrixPropagationLossModel API changed from Ptr<Object> to Ptr<MobilityModel>
This commit is contained in:
@@ -58,8 +58,8 @@ void experiment (bool enableCtsRts)
|
||||
// 3. Create propagation loss matrix
|
||||
Ptr<MatrixPropagationLossModel> lossModel = CreateObject<MatrixPropagationLossModel> ();
|
||||
lossModel->SetDefaultLoss (200); // set default loss to 200 dB (no link)
|
||||
lossModel->SetLoss (nodes.Get (0), nodes.Get (1), 50); // set symmetric loss 0 <-> 1 to 50 dB
|
||||
lossModel->SetLoss (nodes.Get (2), nodes.Get (1), 50); // set symmetric loss 2 <-> 1 to 50 dB
|
||||
lossModel->SetLoss (nodes.Get (0)->GetObject<MobilityModel>(), nodes.Get (1)->GetObject<MobilityModel>(), 50); // set symmetric loss 0 <-> 1 to 50 dB
|
||||
lossModel->SetLoss (nodes.Get (2)->GetObject<MobilityModel>(), nodes.Get (1)->GetObject<MobilityModel>(), 50); // set symmetric loss 2 <-> 1 to 50 dB
|
||||
|
||||
// 4. Create & setup wifi channel
|
||||
Ptr<YansWifiChannel> wifiChannel = CreateObject <YansWifiChannel> ();
|
||||
|
||||
@@ -258,7 +258,7 @@ InterferenceHelperSequenceTest::DoRun (void)
|
||||
Ptr<Node> senderA = CreateOne (Vector (5.0, 0.0, 0.0), channel);
|
||||
Ptr<Node> senderB = CreateOne (Vector (-5.0, 0.0, 0.0), channel);
|
||||
|
||||
propLoss->SetLoss (senderB, rxOnly, 0, true);
|
||||
propLoss->SetLoss (senderB->GetObject<MobilityModel>(), rxOnly->GetObject<MobilityModel>(), 0, true);
|
||||
propLoss->SetDefaultLoss (999);
|
||||
|
||||
Simulator::Schedule (Seconds (1.0),
|
||||
|
||||
@@ -747,10 +747,8 @@ MatrixPropagationLossModel::SetDefaultLoss (double loss)
|
||||
}
|
||||
|
||||
void
|
||||
MatrixPropagationLossModel::SetLoss (Ptr<Object> a, Ptr<Object> b, double loss, bool symmetric)
|
||||
MatrixPropagationLossModel::SetLoss (Ptr<MobilityModel> ma, Ptr<MobilityModel> mb, double loss, bool symmetric)
|
||||
{
|
||||
Ptr<MobilityModel> ma = a->GetObject<MobilityModel> ();
|
||||
Ptr<MobilityModel> mb = b->GetObject<MobilityModel> ();
|
||||
NS_ASSERT (ma != 0 && mb != 0);
|
||||
|
||||
MobilityPair p = std::make_pair(ma, mb);
|
||||
@@ -767,7 +765,7 @@ MatrixPropagationLossModel::SetLoss (Ptr<Object> a, Ptr<Object> b, double loss,
|
||||
|
||||
if (symmetric)
|
||||
{
|
||||
SetLoss (b, a, loss, false);
|
||||
SetLoss (mb, ma, loss, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -497,12 +497,12 @@ public:
|
||||
* \brief Set loss (in dB, positive) between pair of ns-3 objects
|
||||
* (typically, nodes).
|
||||
*
|
||||
* \param a Source object
|
||||
* \param b Destination object
|
||||
* \param ma Source mobility model
|
||||
* \param mb Destination mobility model
|
||||
* \param loss a -> b path loss, positive in dB
|
||||
* \param symmetric If true (default), both a->b and b->a paths will be affected
|
||||
*/
|
||||
void SetLoss (Ptr<Object> a, Ptr<Object> b, double loss, bool symmetric = true);
|
||||
void SetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b, double loss, bool symmetric = true);
|
||||
/// Set default loss (in dB, positive) to be used, infinity if not set
|
||||
void SetDefaultLoss (double);
|
||||
|
||||
|
||||
@@ -368,23 +368,20 @@ MatrixPropagationLossModelTestCase::~MatrixPropagationLossModelTestCase ()
|
||||
void
|
||||
MatrixPropagationLossModelTestCase::DoRun (void)
|
||||
{
|
||||
Ptr<Object> n[3];
|
||||
Ptr<MobilityModel> m[3];
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
n[i] = CreateObject<Object> ();
|
||||
m[i] = CreateObject<ConstantPositionMobilityModel> ();
|
||||
n[i]->AggregateObject (m[i]);
|
||||
}
|
||||
|
||||
MatrixPropagationLossModel loss;
|
||||
// no loss by default
|
||||
loss.SetDefaultLoss (0);
|
||||
// -10 dB for 0 -> 1 and 1 -> 0
|
||||
loss.SetLoss (n[0], n[1], 10);
|
||||
loss.SetLoss (m[0], m[1], 10);
|
||||
// -30 dB from 0 to 2 and -100 dB from 2 to 0
|
||||
loss.SetLoss (n[0], n[2], 30, /*symmetric = */false);
|
||||
loss.SetLoss (n[2], n[0], 100, /*symmetric = */false);
|
||||
loss.SetLoss (m[0], m[2], 30, /*symmetric = */false);
|
||||
loss.SetLoss (m[2], m[0], 100, /*symmetric = */false);
|
||||
// default from 1 to 2
|
||||
|
||||
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[0], m[1]), -10, "Loss 0 -> 1 incorrect");
|
||||
|
||||
Reference in New Issue
Block a user