Bug 1048: MatrixPropagationLossModel API changed from Ptr<Object> to Ptr<MobilityModel>

This commit is contained in:
Pavel Boyko
2011-02-06 12:42:35 +03:00
parent f4214ff52f
commit a0df72a405
5 changed files with 11 additions and 16 deletions

View File

@@ -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> ();

View File

@@ -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),

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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");