|
|
| 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 |
|
|
|
| 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 |
NotifyRxDrop (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; |
|
|
| 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); |
|
|
| 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; |
|
|
| 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); |
|
|
| 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 |
|
|
|
| 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; |