Bug 1010 - Uan model Sleep patch

This commit is contained in:
Andrea Sacco
2011-08-16 20:22:40 +02:00
parent 5ad75505bc
commit b5f518191c
6 changed files with 56 additions and 1 deletions

View File

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

View File

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

View File

@@ -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)
*/

View File

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

View File

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

View File

@@ -374,6 +374,8 @@ public:
* Clears all pointer references
*/
virtual void Clear (void) = 0;
virtual void SetSleepMode (bool sleep) = 0;
};
}