src/uan/model/acoustic-modem-energy-model.cc
author Vedran Miletić <rivanvx@gmail.com>
Tue, 02 Aug 2011 17:42:33 -0400
changeset 7385 10beb0e53130
parent 6852 8f1a53d3f6ca
child 10410 4d4eb8097fa3
permissions -rw-r--r--
standardize emacs c++ mode comments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 6852
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
6715
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     2
/*
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     3
 * Copyright (c) 2010 Andrea Sacco
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     4
 *
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     8
 *
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    13
 *
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    17
 *
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    18
 * Author: Andrea Sacco <andrea.sacco85@gmail.com>
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    19
 */
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    20
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    21
#include "ns3/log.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    22
#include "ns3/double.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    23
#include "ns3/simulator.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    24
#include "ns3/trace-source-accessor.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    25
#include "ns3/energy-source.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    26
#include "ns3/uan-phy.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    27
#include "ns3/uan-net-device.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    28
#include "acoustic-modem-energy-model.h"
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    29
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    30
NS_LOG_COMPONENT_DEFINE ("AcousticModemEnergyModel");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    31
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    32
namespace ns3 {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    33
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    34
NS_OBJECT_ENSURE_REGISTERED (AcousticModemEnergyModel);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    35
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    36
TypeId
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    37
AcousticModemEnergyModel::GetTypeId (void)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    38
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    39
  static TypeId tid = TypeId ("ns3::AcousticModemEnergyModel")
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    40
    .SetParent<DeviceEnergyModel> ()
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    41
    .AddConstructor<AcousticModemEnergyModel> ()
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    42
    .AddAttribute ("TxPowerW",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    43
                   "The modem Tx power in Watts",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    44
                   DoubleValue (50),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    45
                   MakeDoubleAccessor (&AcousticModemEnergyModel::SetTxPowerW,
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    46
                                       &AcousticModemEnergyModel::GetTxPowerW),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    47
                   MakeDoubleChecker<double> ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    48
    .AddAttribute ("RxPowerW",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    49
                   "The modem Rx power in Watts",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    50
                   DoubleValue (0.158),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    51
                   MakeDoubleAccessor (&AcousticModemEnergyModel::SetRxPowerW,
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    52
                                       &AcousticModemEnergyModel::GetRxPowerW),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    53
                   MakeDoubleChecker<double> ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    54
    .AddAttribute ("IdlePowerW",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    55
                   "The modem Idle power in Watts",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    56
                   DoubleValue (0.158),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    57
                   MakeDoubleAccessor (&AcousticModemEnergyModel::SetIdlePowerW,
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    58
                                       &AcousticModemEnergyModel::GetIdlePowerW),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    59
                   MakeDoubleChecker<double> ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    60
    .AddAttribute ("SleepPowerW",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    61
                   "The modem Sleep power in Watts",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    62
                   DoubleValue (0.0058),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    63
                   MakeDoubleAccessor (&AcousticModemEnergyModel::SetSleepPowerW,
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    64
                                       &AcousticModemEnergyModel::GetSleepPowerW),
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    65
                   MakeDoubleChecker<double> ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    66
    .AddTraceSource ("TotalEnergyConsumption",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    67
                     "Total energy consumption of the modem device.",
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    68
                     MakeTraceSourceAccessor (&AcousticModemEnergyModel::m_totalEnergyConsumption))
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    69
  ;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    70
  return tid;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    71
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    72
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    73
AcousticModemEnergyModel::AcousticModemEnergyModel ()
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    74
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    75
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    76
  m_currentState = UanPhy::IDLE;  // initially IDLE
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    77
  m_lastUpdateTime = Seconds (0.0);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    78
  m_energyDepletionCallback.Nullify ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    79
  m_node = 0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    80
  m_source = 0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    81
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    82
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    83
AcousticModemEnergyModel::~AcousticModemEnergyModel ()
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    84
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    85
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    86
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    87
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    88
AcousticModemEnergyModel::SetNode (Ptr<Node> node)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    89
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    90
  NS_LOG_FUNCTION (this << node);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    91
  NS_ASSERT (node != 0);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    92
  m_node = node;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    93
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    94
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    95
Ptr<Node>
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    96
AcousticModemEnergyModel::GetNode (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    97
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    98
  return m_node;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
    99
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   100
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   101
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   102
AcousticModemEnergyModel::SetEnergySource (Ptr<EnergySource> source)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   103
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   104
  NS_LOG_FUNCTION (this << source);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   105
  NS_ASSERT (source != 0);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   106
  m_source = source;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   107
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   108
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   109
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   110
AcousticModemEnergyModel::GetTotalEnergyConsumption (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   111
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   112
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   113
  return m_totalEnergyConsumption;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   114
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   115
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   116
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   117
AcousticModemEnergyModel::GetTxPowerW (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   118
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   119
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   120
  return m_txPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   121
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   122
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   123
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   124
AcousticModemEnergyModel::SetTxPowerW (double txPowerW)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   125
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   126
  NS_LOG_FUNCTION (this << txPowerW);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   127
  m_txPowerW = txPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   128
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   129
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   130
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   131
AcousticModemEnergyModel::GetRxPowerW (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   132
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   133
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   134
  return m_rxPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   135
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   136
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   137
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   138
AcousticModemEnergyModel::SetRxPowerW (double rxPowerW)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   139
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   140
  NS_LOG_FUNCTION (this << rxPowerW);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   141
  m_rxPowerW = rxPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   142
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   143
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   144
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   145
AcousticModemEnergyModel::GetIdlePowerW (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   146
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   147
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   148
  return m_idlePowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   149
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   150
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   151
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   152
AcousticModemEnergyModel::SetIdlePowerW (double idlePowerW)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   153
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   154
  NS_LOG_FUNCTION (this << idlePowerW);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   155
  m_idlePowerW = idlePowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   156
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   157
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   158
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   159
AcousticModemEnergyModel::GetSleepPowerW (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   160
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   161
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   162
  return m_sleepPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   163
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   164
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   165
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   166
AcousticModemEnergyModel::SetSleepPowerW (double sleepPowerW)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   167
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   168
  NS_LOG_FUNCTION (this << sleepPowerW);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   169
  m_sleepPowerW = sleepPowerW;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   170
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   171
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   172
int
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   173
AcousticModemEnergyModel::GetCurrentState (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   174
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   175
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   176
  return m_currentState;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   177
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   178
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   179
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   180
AcousticModemEnergyModel::SetEnergyDepletionCallback (
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   181
  AcousticModemEnergyDepletionCallback callback)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   182
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   183
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   184
  if (callback.IsNull ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   185
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   186
      NS_LOG_DEBUG ("AcousticModemEnergyModel:Setting NULL energy depletion callback!");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   187
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   188
  m_energyDepletionCallback = callback;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   189
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   190
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   191
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   192
AcousticModemEnergyModel::ChangeState (int newState)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   193
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   194
  NS_LOG_FUNCTION (this << newState);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   195
  // NS_ASSERT (IsStateTransitionValid ((MicroModemState) newState));
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   196
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   197
  Time duration = Simulator::Now () - m_lastUpdateTime;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   198
  NS_ASSERT (duration.GetNanoSeconds () >= 0); // check if duration is valid
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   199
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   200
  // energy to decrease = current * voltage * time
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   201
  double energyToDecrease = 0.0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   202
  double supplyVoltage = m_source->GetSupplyVoltage ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   203
  switch (m_currentState)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   204
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   205
    case UanPhy::TX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   206
      energyToDecrease = duration.GetSeconds () * m_txPowerW * supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   207
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   208
    case UanPhy::RX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   209
      energyToDecrease = duration.GetSeconds () * m_rxPowerW * supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   210
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   211
    case UanPhy::IDLE:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   212
      energyToDecrease = duration.GetSeconds () * m_idlePowerW * supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   213
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   214
    case UanPhy::SLEEP:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   215
      energyToDecrease = duration.GetSeconds () * m_sleepPowerW * supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   216
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   217
    default:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   218
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   219
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   220
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   221
  // update total energy consumption
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   222
  m_totalEnergyConsumption += energyToDecrease;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   223
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   224
  // update last update time stamp
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   225
  m_lastUpdateTime = Simulator::Now ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   226
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   227
  // notify energy source
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   228
  m_source->UpdateEnergySource ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   229
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   230
  // update current state & last update time stamp
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   231
  SetMicroModemState (newState);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   232
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   233
  // some debug message
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   234
  NS_LOG_DEBUG ("AcousticModemEnergyModel:Total energy consumption at node #" <<
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   235
                m_node->GetId () << " is " << m_totalEnergyConsumption << "J");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   236
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   237
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   238
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   239
AcousticModemEnergyModel::HandleEnergyDepletion (void)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   240
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   241
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   242
  NS_LOG_DEBUG ("AcousticModemEnergyModel:Energy is depleted at node #" <<
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   243
                m_node->GetId ());
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   244
  // invoke energy depletion callback, if set.
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   245
  if (!m_energyDepletionCallback.IsNull ())
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   246
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   247
      m_energyDepletionCallback ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   248
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   249
  // invoke the phy energy depletion handler
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   250
  Ptr<UanNetDevice> dev = m_node->GetDevice (0)->GetObject<UanNetDevice> ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   251
  dev->GetPhy ()->EnergyDepletionHandler ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   252
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   253
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   254
/*
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   255
 * Private functions start here.
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   256
 */
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   257
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   258
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   259
AcousticModemEnergyModel::DoDispose (void)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   260
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   261
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   262
  m_node = 0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   263
  m_source = 0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   264
  m_energyDepletionCallback.Nullify ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   265
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   266
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   267
double
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   268
AcousticModemEnergyModel::DoGetCurrentA (void) const
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   269
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   270
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   271
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   272
  double supplyVoltage = m_source->GetSupplyVoltage ();
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   273
  NS_ASSERT (supplyVoltage != 0.0);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   274
  double stateCurrent = 0.0;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   275
  switch (m_currentState)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   276
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   277
    case UanPhy::TX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   278
      stateCurrent = m_txPowerW / supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   279
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   280
    case UanPhy::RX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   281
      stateCurrent = m_rxPowerW / supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   282
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   283
    case UanPhy::IDLE:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   284
      stateCurrent = m_idlePowerW / supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   285
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   286
    case UanPhy::SLEEP:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   287
      stateCurrent = m_sleepPowerW / supplyVoltage;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   288
      break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   289
    default:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   290
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   291
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   292
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   293
  return stateCurrent;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   294
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   295
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   296
bool
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   297
AcousticModemEnergyModel::IsStateTransitionValid (const int destState)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   298
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   299
  NS_LOG_FUNCTION (this << destState);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   300
  return true;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   301
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   302
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   303
void
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   304
AcousticModemEnergyModel::SetMicroModemState (const int state)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   305
{
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   306
  NS_LOG_FUNCTION (this);
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   307
  if (IsStateTransitionValid (state))
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   308
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   309
      m_currentState = state;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   310
      std::string stateName;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   311
      switch (state)
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   312
        {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   313
        case UanPhy::TX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   314
          stateName = "TX";
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   315
          break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   316
        case UanPhy::RX:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   317
          stateName = "RX";
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   318
          break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   319
        case UanPhy::IDLE:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   320
          stateName = "IDLE";
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   321
          break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   322
        case UanPhy::SLEEP:
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   323
          stateName = "SLEEP";
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   324
          break;
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   325
        }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   326
      NS_LOG_DEBUG ("AcousticModemEnergyModel:Switching to state: " << stateName <<
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   327
                    " at time = " << Simulator::Now ());
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   328
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   329
  else
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   330
    {
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   331
      NS_FATAL_ERROR ("AcousticModemEnergyModel:Invalid state transition!");
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   332
    }
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   333
}
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   334
ba60c821ad35 Energy support for UAN module and Li-Ion energy model
Andrea Sacco <andrea.sacco85@gmail.com>
parents:
diff changeset
   335
} // namespace ns3