src/contrib/energy/model/energy-source.cc
author He Wu <mdzz@u.washington.edu>
Wed, 07 Jul 2010 21:54:32 -0700
changeset 6429 5ee11b58989d
child 6535 0a90ef2b29a9
permissions -rw-r--r--
Initial import of energy model
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6429
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     2
/*
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     3
 * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     4
 *
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     8
 *
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    13
 *
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    17
 *
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    18
 * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    19
 */
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    20
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    21
#include "energy-source.h"
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    22
#include "ns3/log.h"
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    23
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    24
NS_LOG_COMPONENT_DEFINE ("EnergySource");
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    25
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    26
namespace ns3 {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    27
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    28
NS_OBJECT_ENSURE_REGISTERED (EnergySource);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    29
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    30
TypeId
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    31
EnergySource::GetTypeId (void)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    32
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    33
  static TypeId tid = TypeId ("ns3::EnergySource")
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    34
    .SetParent<Object> ()
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    35
  ;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    36
  return tid;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    37
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    38
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    39
EnergySource::EnergySource ()
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    40
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    41
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    42
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    43
EnergySource::~EnergySource ()
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    44
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    45
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    46
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    47
double
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    48
EnergySource::GetInitialEnergy (void) const
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    49
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    50
  return DoGetInitialEnergy ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    51
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    52
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    53
double
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    54
EnergySource::GetRemainingEnergy (void) const
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    55
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    56
  return DoGetRemainingEnergy ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    57
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    58
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    59
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    60
EnergySource::DecreaseRemainingEnergy (double energyJ)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    61
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    62
  DoDecreaseRemainingEnergy (energyJ);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    63
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    64
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    65
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    66
EnergySource::IncreaseRemainingEnergy (double energyJ)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    67
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    68
  DoIncreaseRemainingEnergy (energyJ);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    69
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    70
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    71
double
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    72
EnergySource::GetEnergyFraction (void) const
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    73
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    74
  return DoGetEnergyFraction ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    75
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    76
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    77
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    78
EnergySource::AppendDeviceEnergyModel (
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    79
  Ptr<DeviceEnergyModel> deviceEnergyModelPtr)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    80
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    81
  NS_LOG_FUNCTION (this << deviceEnergyModelPtr);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    82
  NS_ASSERT (deviceEnergyModelPtr != NULL); // model must exist
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    83
  m_deviceEnergyModelList.push_back (deviceEnergyModelPtr);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    84
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    85
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    86
EnergySource::DeviceEnergyModelList
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    87
EnergySource::FindDeviceEnergyModels (TypeId tid)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    88
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    89
  NS_LOG_FUNCTION (this << tid);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    90
  DeviceEnergyModelList list;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    91
  DeviceEnergyModelList::iterator listItr;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    92
  for (listItr = m_deviceEnergyModelList.begin ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    93
       listItr != m_deviceEnergyModelList.end (); listItr++)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    94
    {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    95
      if ((*listItr)->GetInstanceTypeId () == tid)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    96
        {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    97
          list.push_back (*listItr);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    98
        }
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    99
    }
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   100
  return list;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   101
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   102
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   103
EnergySource::DeviceEnergyModelList
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   104
EnergySource::FindDeviceEnergyModels (std::string name)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   105
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   106
  NS_LOG_FUNCTION (this << name);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   107
  DeviceEnergyModelList list;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   108
  DeviceEnergyModelList::iterator listItr;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   109
  for (listItr = m_deviceEnergyModelList.begin ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   110
       listItr != m_deviceEnergyModelList.end (); listItr++)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   111
    {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   112
      if ((*listItr)->GetInstanceTypeId ().GetName ().compare (name) == 0)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   113
        {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   114
          list.push_back (*listItr);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   115
        }
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   116
    }
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   117
  return list;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   118
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   119
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   120
/*
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   121
 * Private function starts here.
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   122
 */
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   123
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   124
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   125
EnergySource::DoDispose (void)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   126
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   127
  NS_LOG_FUNCTION (this);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   128
  m_deviceEnergyModelList.clear (); // break reference cycle
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   129
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   130
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   131
/*
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   132
 * Protected functions start here.
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   133
 */
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   134
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   135
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   136
EnergySource::NotifyEnergyDrained (void)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   137
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   138
  NS_LOG_FUNCTION (this);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   139
  // notify all device energy models installed on node
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   140
  DeviceEnergyModelList::iterator listItr;
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   141
  for (listItr = m_deviceEnergyModelList.begin ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   142
       listItr != m_deviceEnergyModelList.end (); listItr++)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   143
    {
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   144
      NS_LOG_DEBUG ("BasicEnergySource:Notifying device energy model: "
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   145
                    << (*listItr)->GetInstanceTypeId ());
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   146
      (*listItr)->HandleEnergyDepletion ();
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   147
    }
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   148
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   149
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   150
void
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   151
EnergySource::BreakDeviceEnergyModelRefCycle (void)
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   152
{
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   153
  NS_LOG_FUNCTION (this);
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   154
  m_deviceEnergyModelList.clear (); // break reference cycle
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   155
}
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   156
5ee11b58989d Initial import of energy model
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   157
} // namespace ns3