50 { |
50 { |
51 m_delay = delay; |
51 m_delay = delay; |
52 } |
52 } |
53 |
53 |
54 void |
54 void |
55 WifiChannel::Add (Ptr<NetDevice> device, ReceiveCallback callback) |
55 WifiChannel::Add (Ptr<NetDevice> device, Ptr<WifiPhy> phy) |
56 { |
56 { |
57 m_deviceList.push_back (std::make_pair (device, callback)); |
57 m_deviceList.push_back (std::make_pair (device, phy)); |
58 } |
58 } |
59 void |
59 void |
60 WifiChannel::Send (Ptr<NetDevice> sender, Ptr<const Packet> packet, double txPowerDbm, |
60 WifiChannel::Send (Ptr<WifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm, |
61 WifiMode wifiMode, WifiPreamble preamble) const |
61 WifiMode wifiMode, WifiPreamble preamble) const |
62 { |
62 { |
63 Ptr<MobilityModel> senderMobility = sender->GetNode ()->GetObject<MobilityModel> (); |
63 Ptr<MobilityModel> senderMobility = 0; |
|
64 for (DeviceList::const_iterator i = m_deviceList.begin (); i != m_deviceList.end (); i++) |
|
65 { |
|
66 if (sender == i->second) |
|
67 { |
|
68 senderMobility = i->first->GetNode ()->GetObject<MobilityModel> (); |
|
69 break; |
|
70 } |
|
71 } |
|
72 NS_ASSERT (senderMobility != 0); |
64 uint32_t j = 0; |
73 uint32_t j = 0; |
65 for (DeviceList::const_iterator i = m_deviceList.begin (); i != m_deviceList.end (); i++) |
74 for (DeviceList::const_iterator i = m_deviceList.begin (); i != m_deviceList.end (); i++) |
66 { |
75 { |
67 if (sender != i->first) |
76 if (sender != i->second) |
68 { |
77 { |
69 Ptr<MobilityModel> receiverMobility = i->first->GetNode ()->GetObject<MobilityModel> (); |
78 Ptr<MobilityModel> receiverMobility = i->first->GetNode ()->GetObject<MobilityModel> (); |
70 Time delay = m_delay->GetDelay (senderMobility, receiverMobility); |
79 Time delay = m_delay->GetDelay (senderMobility, receiverMobility); |
71 double rxPowerDbm = m_loss->GetRxPower (txPowerDbm, senderMobility, receiverMobility); |
80 double rxPowerDbm = m_loss->GetRxPower (txPowerDbm, senderMobility, receiverMobility); |
72 NS_LOG_DEBUG ("propagation: txPower="<<txPowerDbm<<"dbm, rxPower="<<rxPowerDbm<<"dbm, "<< |
81 NS_LOG_DEBUG ("propagation: txPower="<<txPowerDbm<<"dbm, rxPower="<<rxPowerDbm<<"dbm, "<< |
81 |
90 |
82 void |
91 void |
83 WifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm, |
92 WifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm, |
84 WifiMode txMode, WifiPreamble preamble) const |
93 WifiMode txMode, WifiPreamble preamble) const |
85 { |
94 { |
86 m_deviceList[i].second (packet, rxPowerDbm, txMode, preamble); |
95 m_deviceList[i].second->StartReceivePacket (packet, rxPowerDbm, txMode, preamble); |
87 } |
96 } |
88 |
97 |
89 uint32_t |
98 uint32_t |
90 WifiChannel::GetNDevices (void) const |
99 WifiChannel::GetNDevices (void) const |
91 { |
100 { |