--- a/src/uan/model/uan-phy-gen.cc Tue Aug 16 19:45:08 2011 +0200
+++ b/src/uan/model/uan-phy-gen.cc Tue Aug 16 20:22:40 2011 +0200
@@ -522,6 +522,11 @@
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 @@
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 @@
}
break;
case SLEEP:
- NS_FATAL_ERROR ("SLEEP state handling not yet implemented!");
+ NS_LOG_DEBUG ("Sleep mode. Dropping packet.");
break;
}
@@ -646,6 +657,13 @@
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 @@
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)