View | Details | Raw Unified | Return to bug 2386
Collapse All | Expand All

(-)a/src/uan/model/acoustic-modem-energy-model.cc (-3 / +45 lines)
 Lines 190-195    Link Here 
190
}
190
}
191
191
192
void
192
void
193
AcousticModemEnergyModel::SetEnergyRechargeCallback (
194
  AcousticModemEnergyRechargeCallback callback)
195
{
196
  NS_LOG_FUNCTION (this);
197
  if (callback.IsNull ())
198
    {
199
      NS_LOG_DEBUG ("AcousticModemEnergyModel:Setting NULL energy recharge callback!");
200
    }
201
  m_energyRechargeCallback = callback;
202
}
203
204
void
193
AcousticModemEnergyModel::ChangeState (int newState)
205
AcousticModemEnergyModel::ChangeState (int newState)
194
{
206
{
195
  NS_LOG_FUNCTION (this << newState);
207
  NS_LOG_FUNCTION (this << newState);
 Lines 215-220    Link Here 
215
    case UanPhy::SLEEP:
227
    case UanPhy::SLEEP:
216
      energyToDecrease = duration.GetSeconds () * m_sleepPowerW;
228
      energyToDecrease = duration.GetSeconds () * m_sleepPowerW;
217
      break;
229
      break;
230
    case UanPhy::DISABLED:
231
      energyToDecrease = 0;
232
      break;
218
    default:
233
    default:
219
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
234
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
220
    }
235
    }
 Lines 228-235    Link Here 
228
  // notify energy source
243
  // notify energy source
229
  m_source->UpdateEnergySource ();
244
  m_source->UpdateEnergySource ();
230
245
231
  // update current state & last update time stamp
246
  if (m_currentState != UanPhy::DISABLED)
232
  SetMicroModemState (newState);
247
    {
248
      // update current state & last update time stamp
249
      SetMicroModemState (newState);
250
    }
233
251
234
  // some debug message
252
  // some debug message
235
  NS_LOG_DEBUG ("AcousticModemEnergyModel:Total energy consumption at node #" <<
253
  NS_LOG_DEBUG ("AcousticModemEnergyModel:Total energy consumption at node #" <<
 Lines 250-255    Link Here 
250
  // invoke the phy energy depletion handler
268
  // invoke the phy energy depletion handler
251
  Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
269
  Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
252
  dev->GetPhy ()->EnergyDepletionHandler ();
270
  dev->GetPhy ()->EnergyDepletionHandler ();
271
  SetMicroModemState(UanPhy::DISABLED);
272
}
273
274
void
275
AcousticModemEnergyModel::HandleEnergyRecharged (void)
276
{
277
  NS_LOG_FUNCTION (this);
278
  NS_LOG_DEBUG ("AcousticModemEnergyModel:Energy is recharged at node #" <<
279
                m_node->GetId ());
280
  // invoke energy recharge callback, if set.
281
  if (!m_energyRechargeCallback.IsNull ())
282
    {
283
      m_energyRechargeCallback ();
284
    }
285
  // invoke the phy energy recharge handler
286
  Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
287
  dev->GetPhy ()->EnergyRechargeHandler ();
288
  SetMicroModemState(UanPhy::IDLE);
253
}
289
}
254
290
255
/*
291
/*
 Lines 269-275    Link Here 
269
AcousticModemEnergyModel::DoGetCurrentA (void) const
305
AcousticModemEnergyModel::DoGetCurrentA (void) const
270
{
306
{
271
  NS_LOG_FUNCTION (this);
307
  NS_LOG_FUNCTION (this);
272
308
  
273
  double supplyVoltage = m_source->GetSupplyVoltage ();
309
  double supplyVoltage = m_source->GetSupplyVoltage ();
274
  NS_ASSERT (supplyVoltage != 0.0);
310
  NS_ASSERT (supplyVoltage != 0.0);
275
  double stateCurrent = 0.0;
311
  double stateCurrent = 0.0;
 Lines 287-292    Link Here 
287
    case UanPhy::SLEEP:
323
    case UanPhy::SLEEP:
288
      stateCurrent = m_sleepPowerW / supplyVoltage;
324
      stateCurrent = m_sleepPowerW / supplyVoltage;
289
      break;
325
      break;
326
    case UanPhy::DISABLED:
327
      stateCurrent = 0.0;
328
      break;
290
    default:
329
    default:
291
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
330
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
292
    }
331
    }
 Lines 323-328    Link Here 
323
        case UanPhy::SLEEP:
362
        case UanPhy::SLEEP:
324
          stateName = "SLEEP";
363
          stateName = "SLEEP";
325
          break;
364
          break;
365
        case UanPhy::DISABLED:
366
          stateName = "DISABLED";
367
          break;
326
        }
368
        }
327
      NS_LOG_DEBUG ("AcousticModemEnergyModel:Switching to state: " << stateName <<
369
      NS_LOG_DEBUG ("AcousticModemEnergyModel:Switching to state: " << stateName <<
328
                    " at time = " << Simulator::Now ());
370
                    " at time = " << Simulator::Now ());
(-)a/src/uan/model/acoustic-modem-energy-model.h (-3 / +14 lines)
 Lines 57-62    Link Here 
57
public:
57
public:
58
  /** Callback type for energy depletion handling. */
58
  /** Callback type for energy depletion handling. */
59
  typedef Callback<void> AcousticModemEnergyDepletionCallback;
59
  typedef Callback<void> AcousticModemEnergyDepletionCallback;
60
  
61
  /** Callback type for energy recharge handling. */
62
  typedef Callback<void> AcousticModemEnergyRechargeCallback;
60
63
61
public:  
64
public:  
62
  /**
65
  /**
 Lines 156-161    Link Here 
156
   * Sets callback for energy depletion handling.
159
   * Sets callback for energy depletion handling.
157
   */
160
   */
158
  void SetEnergyDepletionCallback (AcousticModemEnergyDepletionCallback callback);
161
  void SetEnergyDepletionCallback (AcousticModemEnergyDepletionCallback callback);
162
  
163
  /**
164
   * \param callback Callback function.
165
   *
166
   * Sets callback for energy recharge handling.
167
   */
168
  void SetEnergyRechargeCallback (AcousticModemEnergyRechargeCallback callback);
159
169
160
  /**
170
  /**
161
   * Changes state of the AcousticModemEnergyModel.
171
   * Changes state of the AcousticModemEnergyModel.
 Lines 174-182    Link Here 
174
   *
184
   *
175
   * Not implemented
185
   * Not implemented
176
   */
186
   */
177
  virtual void HandleEnergyRecharged (void)
187
  virtual void HandleEnergyRecharged (void);
178
  {
179
  }
180
188
181
189
182
private:
190
private:
 Lines 222-227    Link Here 
222
230
223
  /** Energy depletion callback. */
231
  /** Energy depletion callback. */
224
  AcousticModemEnergyDepletionCallback m_energyDepletionCallback;
232
  AcousticModemEnergyDepletionCallback m_energyDepletionCallback;
233
  
234
  /** Energy recharge callback. */
235
  AcousticModemEnergyRechargeCallback m_energyRechargeCallback;
225
236
226
};  // class AcousticModemEnergyModel
237
};  // class AcousticModemEnergyModel
227
238
(-)a/src/uan/model/uan-phy-dual.cc (+6 lines)
 Lines 253-258    Link Here 
253
}
253
}
254
254
255
void
255
void
256
UanPhyDual::EnergyRechargeHandler ()
257
{
258
  NS_LOG_DEBUG ("Not Implemented");
259
}
260
261
void
256
UanPhyDual::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
262
UanPhyDual::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
257
{
263
{
258
  if (modeNum <= m_phy1->GetNModes () - 1)
264
  if (modeNum <= m_phy1->GetNModes () - 1)
(-)a/src/uan/model/uan-phy-dual.h (+1 lines)
 Lines 96-101    Link Here 
96
  // Inherited methods:
96
  // Inherited methods:
97
  virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback callback);
97
  virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback callback);
98
  virtual void EnergyDepletionHandler (void);
98
  virtual void EnergyDepletionHandler (void);
99
  virtual void EnergyRechargeHandler (void);
99
  virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
100
  virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
100
101
101
  /**
102
  /**
(-)a/src/uan/model/uan-phy-gen.cc (-13 / +33 lines)
 Lines 358-365    Link Here 
358
    m_rxThreshDb (0),
358
    m_rxThreshDb (0),
359
    m_ccaThreshDb (0),
359
    m_ccaThreshDb (0),
360
    m_pktRx (0),
360
    m_pktRx (0),
361
    m_cleared (false),
361
    m_pktTx (0),
362
    m_disabled (false)
362
    m_cleared (false)
363
{
363
{
364
  m_pg = CreateObject<UniformRandomVariable> ();
364
  m_pg = CreateObject<UniformRandomVariable> ();
365
365
 Lines 513-527    Link Here 
513
  NS_LOG_FUNCTION (this);
513
  NS_LOG_FUNCTION (this);
514
  NS_LOG_DEBUG ("Energy depleted at node " << m_device->GetNode ()->GetId () <<
514
  NS_LOG_DEBUG ("Energy depleted at node " << m_device->GetNode ()->GetId () <<
515
                ", stopping rx/tx activities");
515
                ", stopping rx/tx activities");
516
  
517
  m_state = DISABLED;
518
  if(m_txEndEvent.IsRunning ())
519
    {
520
      Simulator::Cancel (m_txEndEvent);
521
      NotifyTxDrop (m_pktTx);
522
      m_pktTx = 0;
523
    }
524
  if(m_rxEndEvent.IsRunning ())
525
    {
526
      Simulator::Cancel (m_rxEndEvent);
527
      NotifyRxDrop (m_pktRx);
528
      m_pktRx = 0;
529
    }
530
}
516
531
517
  m_disabled = true;
532
void
533
UanPhyGen::EnergyRechargeHandler ()
534
{
535
  NS_LOG_FUNCTION (this);
536
  NS_LOG_DEBUG ("Energy recharged at node " << m_device->GetNode ()->GetId () <<
537
                ", restoring rx/tx activities");
538
539
  m_state = IDLE;
518
}
540
}
519
541
520
void
542
void
521
UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
543
UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
522
{
544
{
523
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << ": Transmitting packet");
545
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << ": Transmitting packet");
524
  if (m_disabled)
546
  if (m_state == DISABLED)
525
    {
547
    {
526
      NS_LOG_DEBUG ("Energy depleted, node cannot transmit any packet. Dropping.");
548
      NS_LOG_DEBUG ("Energy depleted, node cannot transmit any packet. Dropping.");
527
      return;
549
      return;
 Lines 550-556    Link Here 
550
  m_state = TX;
572
  m_state = TX;
551
  UpdatePowerConsumption (TX);
573
  UpdatePowerConsumption (TX);
552
  double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
574
  double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
553
  Simulator::Schedule (Seconds (txdelay), &UanPhyGen::TxEndEvent, this);
575
  m_pktTx = pkt;
576
  m_txEndEvent = Simulator::Schedule (Seconds (txdelay), &UanPhyGen::TxEndEvent, this);
554
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << " notifying listeners");
577
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << " notifying listeners");
555
  NotifyListenersTxStart (Seconds (txdelay));
578
  NotifyListenersTxStart (Seconds (txdelay));
556
  m_txLogger (pkt, m_txPwrDb, txMode);
579
  m_txLogger (pkt, m_txPwrDb, txMode);
 Lines 559-565    Link Here 
559
void
582
void
560
UanPhyGen::TxEndEvent ()
583
UanPhyGen::TxEndEvent ()
561
{
584
{
562
  if (m_state == SLEEP || m_disabled == true)
585
  if (m_state == SLEEP || m_state == DISABLED)
563
    {
586
    {
564
      NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
587
      NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
565
      return;
588
      return;
 Lines 588-602    Link Here 
588
void
611
void
589
UanPhyGen::StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp)
612
UanPhyGen::StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp)
590
{
613
{
591
  if (m_disabled)
614
  switch (m_state)
592
    {
615
    {
616
    case DISABLED:
593
      NS_LOG_DEBUG ("Energy depleted, node cannot receive any packet. Dropping.");
617
      NS_LOG_DEBUG ("Energy depleted, node cannot receive any packet. Dropping.");
594
      NotifyRxDrop(pkt);    // traced source netanim
618
      NotifyRxDrop(pkt);    // traced source netanim
595
      return;
619
      return;
596
    }
597
598
  switch (m_state)
599
    {
600
    case TX:
620
    case TX:
601
      NotifyRxDrop(pkt);    // traced source netanim
621
      NotifyRxDrop(pkt);    // traced source netanim
602
      NS_ASSERT (false);
622
      NS_ASSERT (false);
 Lines 644-650    Link Here 
644
            m_pktRxMode = txMode;
664
            m_pktRxMode = txMode;
645
            m_pktRxPdp = pdp;
665
            m_pktRxPdp = pdp;
646
            double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
666
            double txdelay = pkt->GetSize () * 8.0 / txMode.GetDataRateBps ();
647
            Simulator::Schedule (Seconds (txdelay), &UanPhyGen::RxEndEvent, this, pkt, rxPowerDb, txMode);
667
            m_rxEndEvent = Simulator::Schedule (Seconds (txdelay), &UanPhyGen::RxEndEvent, this, pkt, rxPowerDb, txMode);
648
            NotifyListenersRxStart ();
668
            NotifyListenersRxStart ();
649
          }
669
          }
650
670
 Lines 672-678    Link Here 
672
      return;
692
      return;
673
    }
693
    }
674
694
675
  if (m_disabled || m_state == SLEEP)
695
  if (m_state == DISABLED || m_state == SLEEP)
676
    {
696
    {
677
      NS_LOG_DEBUG ("Sleep mode or dead. Dropping packet");
697
      NS_LOG_DEBUG ("Sleep mode or dead. Dropping packet");
678
      m_pktRx = 0;
698
      m_pktRx = 0;
(-)a/src/uan/model/uan-phy-gen.h (-1 / +6 lines)
 Lines 28-33    Link Here 
28
#include "ns3/nstime.h"
28
#include "ns3/nstime.h"
29
#include "ns3/device-energy-model.h"
29
#include "ns3/device-energy-model.h"
30
#include "ns3/random-variable-stream.h"
30
#include "ns3/random-variable-stream.h"
31
#include "ns3/event-id.h"
31
#include <list>
32
#include <list>
32
33
33
namespace ns3 {
34
namespace ns3 {
 Lines 240-245    Link Here 
240
  // Inherited methods
241
  // Inherited methods
241
  virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback cb);
242
  virtual void SetEnergyModelCallback (DeviceEnergyModel::ChangeStateCallback cb);
242
  virtual void EnergyDepletionHandler (void);
243
  virtual void EnergyDepletionHandler (void);
244
  virtual void EnergyRechargeHandler (void);
243
  virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
245
  virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
244
  virtual void RegisterListener (UanPhyListener *listener);
246
  virtual void RegisterListener (UanPhyListener *listener);
245
  virtual void StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
247
  virtual void StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
 Lines 298-303    Link Here 
298
  double m_ccaThreshDb;             //!< CCA busy threshold.
300
  double m_ccaThreshDb;             //!< CCA busy threshold.
299
301
300
  Ptr<Packet> m_pktRx;              //!< Received packet.
302
  Ptr<Packet> m_pktRx;              //!< Received packet.
303
  Ptr<Packet> m_pktTx;              //!< Sent packet.
301
  double m_minRxSinrDb;             //!< Minimum receive SINR during packet reception.
304
  double m_minRxSinrDb;             //!< Minimum receive SINR during packet reception.
302
  double m_rxRecvPwrDb;             //!< Receiver power.
305
  double m_rxRecvPwrDb;             //!< Receiver power.
303
  Time m_pktRxArrTime;              //!< Packet arrival time.
306
  Time m_pktRxArrTime;              //!< Packet arrival time.
 Lines 305-311    Link Here 
305
  UanTxMode m_pktRxMode;            //!< Packet transmission mode at receiver.
308
  UanTxMode m_pktRxMode;            //!< Packet transmission mode at receiver.
306
309
307
  bool m_cleared;                   //!< Flag when we've been cleared.
310
  bool m_cleared;                   //!< Flag when we've been cleared.
308
  bool m_disabled;                  //!< Energy depleted. 
311
  
312
  EventId m_txEndEvent;             //!< Tx event
313
  EventId m_rxEndEvent;             //!< Rx event
309
314
310
  /** Provides uniform random variables. */
315
  /** Provides uniform random variables. */
311
  Ptr<UniformRandomVariable> m_pg;
316
  Ptr<UniformRandomVariable> m_pg;
(-)a/src/uan/model/uan-phy.h (-1 / +6 lines)
 Lines 182-188    Link Here 
182
    CCABUSY,  //!< Channel busy.
182
    CCABUSY,  //!< Channel busy.
183
    RX,       //!< Receiving.
183
    RX,       //!< Receiving.
184
    TX,       //!< Transmitting.
184
    TX,       //!< Transmitting.
185
    SLEEP     //!< Sleeping.
185
    SLEEP,    //!< Sleeping.
186
    DISABLED  //!< Disabled.
186
  };
187
  };
187
188
188
  /**
189
  /**
 Lines 224-229    Link Here 
224
   */
225
   */
225
  virtual void EnergyDepletionHandler (void) = 0;
226
  virtual void EnergyDepletionHandler (void) = 0;
226
  /**
227
  /**
228
   * Handle the energy recharge event.
229
   */
230
  virtual void EnergyRechargeHandler (void) = 0;
231
  /**
227
   * Send a packet using a specific transmission mode.
232
   * Send a packet using a specific transmission mode.
228
   *
233
   *
229
   * \param pkt  Packet to transmit.
234
   * \param pkt  Packet to transmit.

Return to bug 2386