DESERT 4.0.0
uwranging_tdoa.h
Go to the documentation of this file.
1//
2// Copyright (c) 2022 Regents of the SIGNET lab, University of Padova.
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// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29
39#ifndef UWRANGINGTDOA_H
40#define UWRANGINGTDOA_H
41
42#include "uwranging_tdoa_hdr.h"
43#include <limits>
44#include <module.h>
45#include <vector>
46
47class UwRangingTDOA;
48
52class UwRangeTimer : public TimerHandler
53{
54public:
56 : TimerHandler()
57 {
58 module = m;
59 }
60
61protected:
62 virtual void expire(Event *e);
63 UwRangingTDOA *module;
64};
65
69class UwRangingTDOA : public Module
70{
71
72 friend class UwRangeTimer;
73
74public:
79
83 virtual ~UwRangingTDOA() = default;
84
90 virtual void recv(Packet *) override;
91
98 virtual void recv(Packet *p, Handler *h) override;
99
104 virtual int recvSyncClMsg(ClMessage *m) override;
105
113 virtual int command(int argc, const char *const *argv) override;
114
118 virtual void start();
119
123 virtual void stop();
124
125protected:
131 virtual bool isValid(double value) const;
132
138 virtual bool isValid(const tdoa_entry &entry) const;
139
143 virtual void rangeTX();
144
145 /* Performs the reception of a ranging message.
146 * @param Packet* Pointer to the packet received.
147 */
148 virtual void rangeRX(const Packet *p);
149
154 virtual void updateHoldoverTime(Packet *p, double tx_duration);
155
160 virtual int calcOptEntries(
161 std::vector<int> *sorted_entries = nullptr) const;
162
168 virtual double entryWeight(int entry, int pkt_size, int mode) const;
169
171 virtual void throttleTX();
172
191 int phy_id;
198 double max_tt;
199 double max_age;
201 double delay_start;
203 double soundspeed;
205 std::vector<std::vector<int>>
206 tof_map; /*< Map between couples of nodes to a distance. */
207 std::vector<std::vector<std::vector<tdoa_entry>>>
208 entries_mat; /*< Matrix containing the entries for each packet. */
209 std::vector<std::vector<double>>
210 times_mat; /*< Matrix containing the tx/rx times of each packet. */
211 std::vector<int> last_ids; /*< Vector of ids of the last rx/tx packet. */
212 std::vector<double>
213 time_of_flights; /*< Vector of one way travel times between each
214 nodes in the network. */
215 std::vector<double>
216 entries_timestamps; /*< Vector of the times at which each one way
217 travel time is computed. */
218 std::vector<double> entry_last_tx;
220 std::vector<uwrange_time_t> tx_timestamp;
222 std::vector<double>
223 ber; /*< Vector fo the BER of each channel (symmetry assumption). */
224
225 const size_t PKTIDMAX = std::numeric_limits<uwrange_pkt_t>::
226 max();
227};
228
229#endif
Definition uwranging_tdoa.h:53
virtual void expire(Event *e)
Definition uwranging_tdoa.cpp:88
UwRangeTimer(UwRangingTDOA *m)
Definition uwranging_tdoa.h:55
Definition uwranging_tdoa.h:70
double delay_start
Definition uwranging_tdoa.h:201
int dist_num
Definition uwranging_tdoa.h:180
virtual void updateHoldoverTime(Packet *p, double tx_duration)
Definition uwranging_tdoa.cpp:455
double mac2phy_delay
Definition uwranging_tdoa.h:196
double full_pkt_tx_dur
Definition uwranging_tdoa.h:202
virtual void recv(Packet *) override
Definition uwranging_tdoa.cpp:166
virtual int calcOptEntries(std::vector< int > *sorted_entries=nullptr) const
Definition uwranging_tdoa.cpp:299
std::vector< double > entries_timestamps
Definition uwranging_tdoa.h:216
int phy_id
Definition uwranging_tdoa.h:191
virtual void rangeRX(const Packet *p)
Definition uwranging_tdoa.cpp:505
int range_pkts_recv
Definition uwranging_tdoa.h:187
double max_tt
Definition uwranging_tdoa.h:198
virtual void stop()
Definition uwranging_tdoa.cpp:713
virtual int recvSyncClMsg(ClMessage *m) override
Definition uwranging_tdoa.cpp:187
int range_entries
Definition uwranging_tdoa.h:181
int n_nodes
Definition uwranging_tdoa.h:179
virtual void rangeTX()
Definition uwranging_tdoa.cpp:374
UwRangingTDOA()
Definition uwranging_tdoa.cpp:93
UwRangeTimer send_timer
Definition uwranging_tdoa.h:194
int range_pkts_sent
Definition uwranging_tdoa.h:185
int packet_id
Definition uwranging_tdoa.h:177
const size_t PKTIDMAX
Definition uwranging_tdoa.h:225
std::vector< double > entry_last_tx
Definition uwranging_tdoa.h:218
std::vector< std::vector< int > > tof_map
Definition uwranging_tdoa.h:206
std::vector< double > time_of_flights
Definition uwranging_tdoa.h:213
int debug_tdoa
Definition uwranging_tdoa.h:175
bool scheduler_active
Definition uwranging_tdoa.h:173
int saved_entries
Definition uwranging_tdoa.h:189
int range_bytes_sent
Definition uwranging_tdoa.h:186
virtual ~UwRangingTDOA()=default
double max_age
Definition uwranging_tdoa.h:199
virtual int command(int argc, const char *const *argv) override
Definition uwranging_tdoa.cpp:622
std::vector< int > last_ids
Definition uwranging_tdoa.h:211
int range_pkts_err
Definition uwranging_tdoa.h:188
double range_period
Definition uwranging_tdoa.h:200
std::vector< std::vector< double > > times_mat
Definition uwranging_tdoa.h:210
virtual double entryWeight(int entry, int pkt_size, int mode) const
Definition uwranging_tdoa.cpp:263
virtual bool isValid(double value) const
Definition uwranging_tdoa.cpp:610
int poisson_traffic
Definition uwranging_tdoa.h:183
std::vector< std::vector< std::vector< tdoa_entry > > > entries_mat
Definition uwranging_tdoa.h:208
virtual void start()
Definition uwranging_tdoa.cpp:706
int node_id
Definition uwranging_tdoa.h:176
std::vector< uwrange_time_t > tx_timestamp
Definition uwranging_tdoa.h:220
double soundspeed
Definition uwranging_tdoa.h:203
virtual void throttleTX()
Definition uwranging_tdoa.cpp:720
int queue_size
Definition uwranging_tdoa.h:192
std::vector< double > ber
Definition uwranging_tdoa.h:223
Definition uwranging_tdoa_hdr.h:62
Common structures and variables in the protocol.