Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

EnergyModel Class Reference

#include <energy-model.h>

Inheritance diagram for EnergyModel:

Inheritance graph
[legend]
Collaboration diagram for EnergyModel:

Collaboration graph
[legend]
List of all members.

Public Types

enum  SleepState { WAITING = 0, POWERSAVING = 1, INROUTE = 2 }

Public Member Functions

 EnergyModel (MobileNode *n, double energy, double l1, double l2)
double energy () const
double initialenergy () const
double level1 () const
double level2 () const
void setenergy (double e)
virtual void DecrTxEnergy (double txtime, double P_tx)
virtual void DecrRcvEnergy (double rcvtime, double P_rcv)
virtual void DecrIdleEnergy (double idletime, double P_idle)
virtual double MaxTxtime (double P_tx)
virtual double MaxRcvtime (double P_rcv)
virtual double MaxIdletime (double P_idle)
void add_neighbor (u_int32_t)
void scan_neighbor ()
int getneighbors ()
double level1 ()
double level2 ()
int sleep ()
int state ()
float state_start_time ()
float & max_inroute_time ()
int & adaptivefidelity ()
int & powersavingflag ()
bool & node_on ()
float & total_sndtime ()
float & total_rcvtime ()
float & total_sleeptime ()
AdaptiveFidelityEntityafe ()
int & maxttl ()
virtual void set_node_sleep (int)
virtual void set_node_state (int)
virtual void add_rcvtime (float t)
virtual void add_sndtime (float t)
void start_powersaving ()

Protected Attributes

double energy_
double initialenergy_
double level1_
double level2_
MobileNodenode_
struct {
   int   neighbor_cnt_
   neighbor_list_item *   head
neighbor_list
SoftNeighborHandlersnh_
int sleep_mode_
float total_sleeptime_
float total_rcvtime_
float total_sndtime_
int powersavingflag_
float last_time_gosleep
float max_inroute_time_
int maxttl_
int state_
float state_start_time_
int adaptivefidelity_
AdaptiveFidelityEntityafe_
bool node_on_

Member Enumeration Documentation

enum EnergyModel::SleepState
 

Enumeration values:
WAITING 
POWERSAVING 
INROUTE 

Definition at line 148 of file energy-model.h.

00148 { WAITING = 0, POWERSAVING = 1, INROUTE = 2 };


Constructor & Destructor Documentation

EnergyModel::EnergyModel MobileNode n,
double  energy,
double  l1,
double  l2
[inline]
 

Definition at line 90 of file energy-model.h.

References adaptivefidelity_, energy_, initialenergy_, last_time_gosleep, level1_, level2_, max_inroute_time_, maxttl_, neighbor_list, node_, node_on_, powersavingflag_, sleep_mode_, total_rcvtime_, total_sleeptime_, and total_sndtime_.

00090                                                                         :
00091                 energy_(energy), initialenergy_(energy), 
00092                 level1_(l1), level2_(l2), node_(n), 
00093                 sleep_mode_(0), total_sleeptime_(0), total_rcvtime_(0), 
00094                 total_sndtime_(0), powersavingflag_(0), 
00095                 last_time_gosleep(0), max_inroute_time_(300), maxttl_(5), 
00096                 adaptivefidelity_(0), node_on_(true) 
00097         {
00098                 neighbor_list.neighbor_cnt_ = 0;
00099                 neighbor_list.head = NULL;
00100         }


Member Function Documentation

int& EnergyModel::adaptivefidelity  )  [inline]
 

Definition at line 131 of file energy-model.h.

References adaptivefidelity_.

Referenced by AdaptiveFidelityEntity::adapt_it(), MobileNode::command(), and Mac802_11::recv_timer().

00131 { return adaptivefidelity_; }

void EnergyModel::add_neighbor u_int32_t   ) 
 

Definition at line 163 of file energy-model.cc.

References EnergyModel::neighbor_list_item::id, maxttl_, neighbor_list, EnergyModel::neighbor_list_item::next, and EnergyModel::neighbor_list_item::ttl.

Referenced by Mac802_11::recv_timer().

00164 {
00165         neighbor_list_item *np;
00166         np = neighbor_list.head;
00167         for (; np; np = np->next) {
00168                 if (np->id == nodeid) {
00169                         np->ttl = maxttl_;
00170                         break;
00171                 }
00172         }
00173         if (!np) {      // insert this new entry
00174                 np = new neighbor_list_item;
00175                 np->id = nodeid;
00176                 np->ttl = maxttl_;
00177                 np->next = neighbor_list.head;
00178                 neighbor_list.head = np;
00179                 neighbor_list.neighbor_cnt_++;
00180         }
00181 }

virtual void EnergyModel::add_rcvtime float  t  )  [inline, virtual]
 

Definition at line 142 of file energy-model.h.

References total_rcvtime_.

00142 {total_rcvtime_ += t;}

virtual void EnergyModel::add_sndtime float  t  )  [inline, virtual]
 

Definition at line 143 of file energy-model.h.

References total_sndtime_.

00143 {total_sndtime_ += t;}

AdaptiveFidelityEntity* EnergyModel::afe  )  [inline]
 

Definition at line 137 of file energy-model.h.

References afe_.

Referenced by MobileNode::command().

00137 { return afe_; }

void EnergyModel::DecrIdleEnergy double  idletime,
double  P_idle
[virtual]
 

Definition at line 86 of file energy-model.cc.

References God::ComputeRoute(), energy_, and God::instance().

Referenced by WirelessPhy::command(), WirelessPhy::node_off(), WirelessPhy::sendDown(), and WirelessPhy::sendUp().

00087 {
00088         double dEng = P_idle * idletime;
00089         if (energy_ <= dEng)
00090                 energy_ = 0.0;
00091         else
00092                 energy_ = energy_ - dEng;
00093         if (energy_ <= 0.0)
00094                 God::instance()->ComputeRoute();
00095 }

Here is the call graph for this function:

void EnergyModel::DecrRcvEnergy double  rcvtime,
double  P_rcv
[virtual]
 

Definition at line 75 of file energy-model.cc.

References God::ComputeRoute(), energy_, and God::instance().

Referenced by WirelessPhy::sendUp().

00076 {
00077         double dEng = P_rcv * rcvtime;
00078         if (energy_ <= dEng)
00079                 energy_ = 0.0;
00080         else
00081                 energy_ = energy_ - dEng;
00082         if (energy_ <= 0.0)
00083                 God::instance()->ComputeRoute();
00084 }

Here is the call graph for this function:

void EnergyModel::DecrTxEnergy double  txtime,
double  P_tx
[virtual]
 

Definition at line 63 of file energy-model.cc.

References God::ComputeRoute(), energy_, and God::instance().

Referenced by WirelessPhy::sendDown().

00064 {
00065         double dEng = P_tx * txtime;
00066         if (energy_ <= dEng)
00067                 energy_ = 0.0;
00068         else
00069                 energy_ = energy_ - dEng;
00070         if (energy_ <= 0.0)
00071                 God::instance()->ComputeRoute();
00072 }

Here is the call graph for this function:

double EnergyModel::energy  )  const [inline]
 

Definition at line 102 of file energy-model.h.

References energy_.

Referenced by God::CountAliveNode(), EnergyTimer::EnergyTimer(), EnergyTimer::expire(), CMUTrace::format_mac(), God::IsNeighbor(), MobileNode::log_energy(), CMUTrace::nam_format(), CMUTrace::node_energy(), WirelessPhy::sendDown(), WirelessPhy::sendUp(), OmniMcastAgent::Terminate(), FloodingAgent::Terminate(), DiffusionAgent::Terminate(), and WirelessPhy::UpdateIdleEnergy().

00102 { return energy_; }

int EnergyModel::getneighbors  )  [inline]
 

Definition at line 123 of file energy-model.h.

References neighbor_list.

Referenced by AdaptiveFidelityEntity::adapt_it().

00123 { return neighbor_list.neighbor_cnt_; }

double EnergyModel::initialenergy  )  const [inline]
 

Definition at line 103 of file energy-model.h.

References initialenergy_.

Referenced by CMUTrace::nam_format(), OmniMcastAgent::Terminate(), FloodingAgent::Terminate(), and DiffusionAgent::Terminate().

00103 { return initialenergy_; }

double EnergyModel::level1  )  [inline]
 

Definition at line 125 of file energy-model.h.

References level1_.

00125 { return level1_; }

double EnergyModel::level1  )  const [inline]
 

Definition at line 104 of file energy-model.h.

References level1_.

Referenced by CMUTrace::nam_format().

00104 { return level1_; }

double EnergyModel::level2  )  [inline]
 

Definition at line 126 of file energy-model.h.

References level2_.

00126 { return level2_; }

double EnergyModel::level2  )  const [inline]
 

Definition at line 105 of file energy-model.h.

References level2_.

Referenced by CMUTrace::nam_format().

00105 { return level2_; }

float& EnergyModel::max_inroute_time  )  [inline]
 

Definition at line 130 of file energy-model.h.

References max_inroute_time_.

Referenced by MobileNode::command(), and AdaptiveFidelityEntity::handle().

00130 { return max_inroute_time_; }

virtual double EnergyModel::MaxIdletime double  P_idle  )  [inline, virtual]
 

Definition at line 117 of file energy-model.h.

References energy_.

00117                                                          {
00118                 return(energy_/P_idle);
00119         }

virtual double EnergyModel::MaxRcvtime double  P_rcv  )  [inline, virtual]
 

Definition at line 114 of file energy-model.h.

References energy_.

00114                                                        {
00115                 return(energy_/P_rcv);
00116         }

int& EnergyModel::maxttl  )  [inline]
 

Definition at line 138 of file energy-model.h.

References maxttl_.

Referenced by MobileNode::command().

00138 { return maxttl_; }

virtual double EnergyModel::MaxTxtime double  P_tx  )  [inline, virtual]
 

Definition at line 111 of file energy-model.h.

References energy_.

00111                                                      {
00112                 return(energy_/P_tx);
00113         }

bool& EnergyModel::node_on  )  [inline]
 

Definition at line 133 of file energy-model.h.

References node_on_.

Referenced by MobileNode::command(), God::IsNeighbor(), GAFAgent::node_off(), GAFAgent::node_on(), WirelessPhy::sendDown(), WirelessPhy::sendUp(), and WirelessPhy::UpdateIdleEnergy().

00133 { return node_on_; }

int& EnergyModel::powersavingflag  )  [inline]
 

Definition at line 132 of file energy-model.h.

References powersavingflag_.

Referenced by MobileNode::command(), and CMUTrace::format_rtp().

00132 { return powersavingflag_; }

void EnergyModel::scan_neighbor  ) 
 

Definition at line 183 of file energy-model.cc.

References neighbor_list, EnergyModel::neighbor_list_item::next, and EnergyModel::neighbor_list_item::ttl.

Referenced by SoftNeighborHandler::handle().

00184 {
00185         neighbor_list_item *np, *lp;
00186         if (neighbor_list.neighbor_cnt_ > 0) {
00187                 lp = neighbor_list.head;
00188                 np = lp->next;
00189                 for (; np; np = np->next) {
00190                         np->ttl--;
00191                         if (np->ttl <= 0){
00192                                 lp->next = np->next;
00193                                 delete np;
00194                                 np = lp;
00195                                 neighbor_list.neighbor_cnt_--;
00196                         } 
00197                         lp = np;
00198                 }
00199                 // process the first element
00200                 np = neighbor_list.head;
00201                 np->ttl--;
00202                 if (np->ttl <= 0) {
00203                         neighbor_list.head = np->next;
00204                         delete np;
00205                         neighbor_list.neighbor_cnt_--;
00206                 }
00207         }
00208 }

void EnergyModel::set_node_sleep int   )  [virtual]
 

Definition at line 111 of file energy-model.cc.

References Scheduler::clock(), Node::exist_namchan(), Scheduler::instance(), last_time_gosleep, node_, sleep_mode_, and total_sleeptime_.

Referenced by AdaptiveFidelityEntity::handle(), MacTdma::radioSwitch(), Mac802_11::send(), and AdaptiveFidelityEntity::start().

00112 {
00113         Tcl& tcl=Tcl::instance();
00114         //static float last_time_gosleep;
00115         // status = 1 to set node into sleep mode
00116         // status = 0 to put node back to idle mode.
00117         // time in the sleep mode should be used as credit to idle 
00118         // time energy consumption
00119         if (status) {
00120                 last_time_gosleep = Scheduler::instance().clock();
00121                 //printf("id=%d : put node into sleep at %f\n",
00122                 // address_,last_time_gosleep);
00123                 sleep_mode_ = status;
00124                 if (node_->exist_namchan()) 
00125                         tcl.evalf("%s add-mark m1 blue hexagon",node_->name());
00126         } else {
00127                 sleep_mode_ = status;
00128                 if (node_->exist_namchan()) 
00129                         tcl.evalf("%s delete-mark m1", node_->name()); 
00130                 //printf("id= %d last_time_sleep = %f\n",
00131                 // address_, last_time_gosleep);
00132                 if (last_time_gosleep) {
00133                         total_sleeptime_ += Scheduler::instance().clock() -
00134                                 last_time_gosleep;
00135                         last_time_gosleep = 0;
00136                 }
00137         }       
00138 }

Here is the call graph for this function:

void EnergyModel::set_node_state int   )  [virtual]
 

Definition at line 140 of file energy-model.cc.

References abort(), Scheduler::clock(), INROUTE, Scheduler::instance(), POWERSAVING, state_, state_start_time_, and WAITING.

Referenced by CMUTrace::format_rtp(), AdaptiveFidelityEntity::handle(), and Mac802_11::send().

00141 {
00142         switch (state_) { 
00143         case POWERSAVING:
00144         case WAITING:
00145                 state_ = state;
00146                 state_start_time_ = Scheduler::instance().clock();
00147                 break;
00148         case INROUTE:
00149                 if (state == POWERSAVING) {
00150                         state_ = state;
00151                 } else if (state == INROUTE) {
00152                         // a data packet is forwarded, needs to reset 
00153                         // state_start_time_
00154                         state_start_time_= Scheduler::instance().clock();
00155                 }
00156                 break;
00157         default:
00158                 printf("Wrong state, quit...\n");
00159                 abort();
00160         }
00161 }

Here is the call graph for this function:

void EnergyModel::setenergy double  e  )  [inline]
 

Definition at line 106 of file energy-model.h.

References energy_.

Referenced by MobileNode::command(), WirelessPhy::sendDown(), and WirelessPhy::sendUp().

00106 { energy_ = e; }

int EnergyModel::sleep  )  [inline]
 

Definition at line 127 of file energy-model.h.

References sleep_mode_.

Referenced by AdaptiveFidelityEntity::handle(), MacTdma::radioSwitch(), Mac802_11::send(), WirelessPhy::sendDown(), and WirelessPhy::sendUp().

00127 { return sleep_mode_; }

void EnergyModel::start_powersaving  ) 
 

Definition at line 99 of file energy-model.cc.

References afe_, Scheduler::clock(), Scheduler::instance(), POWERSAVING, snh_, AdaptiveFidelityEntity::start(), SoftNeighborHandler::start(), state_, and state_start_time_.

Referenced by MobileNode::command().

00100 {
00101         snh_ = new SoftNeighborHandler(this);
00102         snh_->start();
00103         
00104         afe_ = new AdaptiveFidelityEntity(this);
00105         afe_->start();
00106 
00107         state_ = EnergyModel::POWERSAVING;
00108         state_start_time_ = Scheduler::instance().clock();
00109 }

Here is the call graph for this function:

int EnergyModel::state  )  [inline]
 

Definition at line 128 of file energy-model.h.

References state_.

Referenced by AdaptiveFidelityEntity::handle().

00128 { return state_; }

float EnergyModel::state_start_time  )  [inline]
 

Definition at line 129 of file energy-model.h.

References state_start_time_.

Referenced by AdaptiveFidelityEntity::handle().

00129 { return state_start_time_; }

float& EnergyModel::total_rcvtime  )  [inline]
 

Definition at line 135 of file energy-model.h.

References total_rcvtime_.

Referenced by MobileNode::command().

00135 { return total_rcvtime_; }

float& EnergyModel::total_sleeptime  )  [inline]
 

Definition at line 136 of file energy-model.h.

References total_sleeptime_.

Referenced by MobileNode::command().

00136 { return total_sleeptime_; }

float& EnergyModel::total_sndtime  )  [inline]
 

Definition at line 134 of file energy-model.h.

References total_sndtime_.

Referenced by MobileNode::command().

00134 { return total_sndtime_; }


Member Data Documentation

int EnergyModel::adaptivefidelity_ [protected]
 

Definition at line 183 of file energy-model.h.

Referenced by adaptivefidelity(), and EnergyModel().

AdaptiveFidelityEntity* EnergyModel::afe_ [protected]
 

Definition at line 184 of file energy-model.h.

Referenced by afe(), and start_powersaving().

double EnergyModel::energy_ [protected]
 

Definition at line 151 of file energy-model.h.

Referenced by DecrIdleEnergy(), DecrRcvEnergy(), DecrTxEnergy(), energy(), EnergyModel(), MaxIdletime(), MaxRcvtime(), MaxTxtime(), and setenergy().

neighbor_list_item* EnergyModel::head [protected]
 

Definition at line 167 of file energy-model.h.

double EnergyModel::initialenergy_ [protected]
 

Definition at line 152 of file energy-model.h.

Referenced by EnergyModel(), and initialenergy().

float EnergyModel::last_time_gosleep [protected]
 

Definition at line 176 of file energy-model.h.

Referenced by EnergyModel(), and set_node_sleep().

double EnergyModel::level1_ [protected]
 

Definition at line 153 of file energy-model.h.

Referenced by EnergyModel(), and level1().

double EnergyModel::level2_ [protected]
 

Definition at line 154 of file energy-model.h.

Referenced by EnergyModel(), and level2().

float EnergyModel::max_inroute_time_ [protected]
 

Definition at line 177 of file energy-model.h.

Referenced by EnergyModel(), and max_inroute_time().

int EnergyModel::maxttl_ [protected]
 

Definition at line 179 of file energy-model.h.

Referenced by add_neighbor(), EnergyModel(), and maxttl().

int EnergyModel::neighbor_cnt_ [protected]
 

Definition at line 166 of file energy-model.h.

struct { ... } EnergyModel::neighbor_list [protected]
 

Referenced by add_neighbor(), EnergyModel(), getneighbors(), and scan_neighbor().

MobileNode* EnergyModel::node_ [protected]
 

Definition at line 156 of file energy-model.h.

Referenced by EnergyModel(), and set_node_sleep().

bool EnergyModel::node_on_ [protected]
 

Definition at line 186 of file energy-model.h.

Referenced by EnergyModel(), and node_on().

int EnergyModel::powersavingflag_ [protected]
 

Definition at line 175 of file energy-model.h.

Referenced by EnergyModel(), and powersavingflag().

int EnergyModel::sleep_mode_ [protected]
 

Definition at line 171 of file energy-model.h.

Referenced by EnergyModel(), set_node_sleep(), and sleep().

SoftNeighborHandler* EnergyModel::snh_ [protected]
 

Definition at line 169 of file energy-model.h.

Referenced by start_powersaving().

int EnergyModel::state_ [protected]
 

Definition at line 181 of file energy-model.h.

Referenced by set_node_state(), start_powersaving(), and state().

float EnergyModel::state_start_time_ [protected]
 

Definition at line 182 of file energy-model.h.

Referenced by set_node_state(), start_powersaving(), and state_start_time().

float EnergyModel::total_rcvtime_ [protected]
 

Definition at line 173 of file energy-model.h.

Referenced by add_rcvtime(), EnergyModel(), and total_rcvtime().

float EnergyModel::total_sleeptime_ [protected]
 

Definition at line 172 of file energy-model.h.

Referenced by EnergyModel(), set_node_sleep(), and total_sleeptime().

float EnergyModel::total_sndtime_ [protected]
 

Definition at line 174 of file energy-model.h.

Referenced by add_sndtime(), EnergyModel(), and total_sndtime().


The documentation for this class was generated from the following files:
Generated on Tue Apr 20 12:45:38 2004 for NS2.26SourcesOriginal by doxygen 1.3.3