EMANE  1.2.1
receivepowertablepublisher.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 - Adjacent Link LLC, Bridgewater, New Jersey
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * * Neither the name of Adjacent Link LLC nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
34 
35 // specialized hash for ReceivePowerTable
36 namespace std
37 {
38  template<>
39  struct hash<std::pair<EMANE::NEMId,std::uint64_t>>
40  {
41  typedef std::pair<EMANE::NEMId,std::uint64_t> argument_type;
42  typedef std::size_t result_type;
43 
44  result_type operator()(argument_type const& s) const
45  {
46  result_type const h1{std::hash<EMANE::NEMId>()(s.first)};
47  result_type const h2{std::hash<std::uint64_t>()(s.second)};
48  return h1 ^ (h2 << 1);
49  }
50  };
51 }
52 
54 {
55 
56  pReceivePowerTable_ =
57  statisticRegistrar.registerTable<ReceivePowerTableKey>("ReceivePowerTable",
58  {"NEM","Frequency","Rx Power","Last Packet Time"},
59  StatisticProperties::NONE,
60  "Shows the calculated receive power for the last received packet.");
61 }
62 
64  std::uint64_t u64Frequency,
65  double dReceivePower,
66  const TimePoint & rxTime)
67 {
68  auto key = ReceivePowerTableKey{nemId,u64Frequency};
69 
70  if(receivePowerTableSet_.count(key))
71  {
72  pReceivePowerTable_->setRow(key,
73  {
74  Any{nemId},
75  Any{u64Frequency},
76  Any{dReceivePower},
77  Any{std::chrono::duration_cast<DoubleSeconds>(rxTime.time_since_epoch()).count()}});
78  }
79  else
80  {
81  pReceivePowerTable_->addRow(key,
82  {
83  Any{nemId},
84  Any{u64Frequency},
85  Any{dReceivePower},
86  Any{std::chrono::duration_cast<DoubleSeconds>(rxTime.time_since_epoch()).count()}});
87 
88  receivePowerTableSet_.insert(key);
89  }
90 }
void update(NEMId nemId, std::uint64_t u64Frequency, double dReceivePower, const TimePoint &rxTime)
The StatisticRegistrar allows NEM layers to register statistics and statistic tables. Statistics and Statistic tables are owned by the emulator framework and a borrowed reference is returned to the registering NEM layer.
StatisticTable< Key, Compare, scolumn > * registerTable(const std::string &sName, const StatisticTableLabels &labels, const StatisticProperties &properties=StatisticProperties::NONE, const std::string &sDescription="")
std::pair< NEMId, std::uint64_t > ReceivePowerTableKey
std::chrono::duration< double > DoubleSeconds
Definition: types.h:47
std::uint16_t NEMId
Definition: types.h:52
Clock::time_point TimePoint
Definition: types.h:50
The Any class can contain an instance of one of any type in its support type set. ...
Definition: any.h:49
void registerStatistics(StatisticRegistrar &registrar)