Bug 1010 - Uan model Sleep patch
This commit is contained in:
@@ -389,5 +389,11 @@ UanNetDevice::SetAddress (Address address)
|
||||
m_mac->SetAddress (UanAddress::ConvertFrom (address));
|
||||
}
|
||||
|
||||
void
|
||||
UanNetDevice::SetSleepMode (bool sleep)
|
||||
{
|
||||
m_phy->SetSleepMode (sleep);
|
||||
}
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
|
||||
@@ -101,6 +101,8 @@ public:
|
||||
*/
|
||||
void Clear (void);
|
||||
|
||||
void SetSleepMode (bool sleep);
|
||||
|
||||
// Purely virtual functions from base class
|
||||
virtual void SetIfIndex (const uint32_t index);
|
||||
virtual uint32_t GetIfIndex (void) const;
|
||||
|
||||
@@ -248,6 +248,11 @@ public:
|
||||
*/
|
||||
void SetSinrModelPhy2 (Ptr<UanPhyCalcSinr> calcSinr);
|
||||
|
||||
virtual void SetSleepMode (bool sleep)
|
||||
{
|
||||
//TODO This method has to be implemented
|
||||
}
|
||||
|
||||
/**
|
||||
* \returns Packet currently being received on Phy1 (Null Ptr if none)
|
||||
*/
|
||||
|
||||
@@ -522,6 +522,11 @@ UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
|
||||
NS_LOG_DEBUG ("PHY requested to TX while already Transmitting. Dropping packet.");
|
||||
return;
|
||||
}
|
||||
else if (m_state == SLEEP)
|
||||
{
|
||||
NS_LOG_DEBUG ("PHY requested to TX while sleeping. Dropping packet.");
|
||||
return;
|
||||
}
|
||||
|
||||
UanTxMode txMode = GetMode (modeNum);
|
||||
|
||||
@@ -544,6 +549,12 @@ UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
|
||||
void
|
||||
UanPhyGen::TxEndEvent ()
|
||||
{
|
||||
if (m_state == SLEEP || m_disabled == true)
|
||||
{
|
||||
NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
|
||||
return;
|
||||
}
|
||||
|
||||
NS_ASSERT (m_state == TX);
|
||||
if (GetInterferenceDb ( (Ptr<Packet>) 0) > m_ccaThreshDb)
|
||||
{
|
||||
@@ -626,7 +637,7 @@ UanPhyGen::StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, U
|
||||
}
|
||||
break;
|
||||
case SLEEP:
|
||||
NS_FATAL_ERROR ("SLEEP state handling not yet implemented!");
|
||||
NS_LOG_DEBUG ("Sleep mode. Dropping packet.");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -646,6 +657,13 @@ UanPhyGen::RxEndEvent (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode)
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_disabled || m_state == SLEEP)
|
||||
{
|
||||
NS_LOG_DEBUG ("Sleep mode or dead. Dropping packet");
|
||||
m_pktRx = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetInterferenceDb ( (Ptr<Packet>) 0) > m_ccaThreshDb)
|
||||
{
|
||||
m_state = CCABUSY;
|
||||
@@ -811,6 +829,26 @@ UanPhyGen::SetTransducer (Ptr<UanTransducer> trans)
|
||||
m_transducer->AddPhy (this);
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyGen::SetSleepMode (bool sleep)
|
||||
{
|
||||
if (sleep)
|
||||
{
|
||||
m_state = SLEEP;
|
||||
if (!m_energyCallback.IsNull ())
|
||||
{
|
||||
m_energyCallback (SLEEP);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_state = IDLE;
|
||||
if (!m_energyCallback.IsNull ())
|
||||
{
|
||||
m_energyCallback (IDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyGen::NotifyTransStartTx (Ptr<Packet> packet, double txPowerDb, UanTxMode txMode)
|
||||
|
||||
@@ -203,6 +203,8 @@ public:
|
||||
virtual Ptr<Packet> GetPacketRx (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
virtual void SetSleepMode (bool sleep);
|
||||
|
||||
private:
|
||||
typedef std::list<UanPhyListener *> ListenerList;
|
||||
|
||||
|
||||
@@ -374,6 +374,8 @@ public:
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void) = 0;
|
||||
|
||||
virtual void SetSleepMode (bool sleep) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user