packetstamper.h
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #ifndef PACKETSTAMPER_H
66 #define PACKETSTAMPER_H
67 
68 #include <xstypes/pstdint.h>
69 #include <list>
70 
71 struct XsDataPacket;
72 
74 {
75 public:
76  PacketStamper();
77  void resetTosEstimation();
78 
79  static const int64_t AWINDABOUNDARY;
80  static const int64_t MTSCBOUNDARY;
81  static const int64_t SC8BOUNDARY;
82 
83  static int64_t calculateLargePacketCounter(int64_t frameCounter, int64_t lastCounter, int64_t boundary);
84  static int64_t calculateLargeSampleTime(int64_t frameTime, int64_t lastTime);
85  int64_t stampPacket(XsDataPacket& pack, XsDataPacket const& highest);
86 
87 protected:
89  struct DataPair
90  {
91  int64_t m_pid;
92  int64_t m_toa;
93 
95  bool operator == (DataPair const& other) const
96  {
97  return m_pid == other.m_pid && m_toa == other.m_toa;
98  }
99  };
102  std::list<DataPair> m_dataPoints;
103 
104  double m_toa0;
105  double m_rate;
107 
108  void estimateTos(XsDataPacket& pack);
109  int64_t estimateTosInternal(int64_t pid, int64_t toa);
111  bool rejectOutlier();
112 };
113 
114 #endif
PacketStamper::m_toa0
double m_toa0
The recomputed Time Of Arrival of PID 0.
Definition: packetstamper.h:104
PacketStamper::m_rate
double m_rate
The estimated clock rate per pid.
Definition: packetstamper.h:105
XsDataPacket
Contains an interpreted data message. The class provides easy access to the contained data through it...
Definition: xsdatapacket.h:301
PacketStamper::DataPair
Definition: packetstamper.h:89
PacketStamper::m_latest
DataPair m_latest
Latest known data (later data may arrive with a lower pid, which will not be put in this item)
Definition: packetstamper.h:100
PacketStamper::SC8BOUNDARY
static const int64_t SC8BOUNDARY
8 bit Sample Counter boundary
Definition: packetstamper.h:81
PacketStamper::m_dataPoints
std::list< DataPair > m_dataPoints
The filtered history of interesting data items.
Definition: packetstamper.h:102
PacketStamper::AWINDABOUNDARY
static const int64_t AWINDABOUNDARY
32 bit MT Sample Counter boundary
Definition: packetstamper.h:79
PacketStamper::stampPacket
int64_t stampPacket(XsDataPacket &pack, XsDataPacket const &highest)
Create 64 bit counter for a packet.
Definition: packetstamper.cpp:133
PacketStamper::calculateLargePacketCounter
static int64_t calculateLargePacketCounter(int64_t frameCounter, int64_t lastCounter, int64_t boundary)
Calculate the new large packet counter value based on frameCounter and the lastCounter.
Definition: packetstamper.cpp:106
PacketStamper::DataPair::m_pid
int64_t m_pid
Packet ID of data item.
Definition: packetstamper.h:91
PacketStamper::MTSCBOUNDARY
static const int64_t MTSCBOUNDARY
16 bit MT Sample Counter boundary
Definition: packetstamper.h:80
PacketStamper::estimateClockParameters
void estimateClockParameters()
Estimate the clock parameters based on the available data points.
Definition: packetstamper.cpp:203
PacketStamper::m_linearize
DataPair m_linearize
The very first item received, used to normalize to 0,0 so we have less computational issues with larg...
Definition: packetstamper.h:101
pstdint.h
PacketStamper::DataPair::operator==
bool operator==(DataPair const &other) const
Returns true if the items are equal.
Definition: packetstamper.h:95
PacketStamper::estimateTos
void estimateTos(XsDataPacket &pack)
Estimate the time of sampling for the supplied packet pack and update it.
Definition: packetstamper.cpp:191
PacketStamper
Supplies functionality for timestamping data packets.
Definition: packetstamper.h:73
PacketStamper::rejectOutlier
bool rejectOutlier()
Remove the worst outlier from the known data points.
Definition: packetstamper.cpp:252
PacketStamper::PacketStamper
PacketStamper()
Default constructor.
Definition: packetstamper.cpp:83
PacketStamper::resetTosEstimation
void resetTosEstimation()
Reset the Time Of Sampling estimation parameters.
Definition: packetstamper.cpp:89
PacketStamper::m_rejectionCountdown
int m_rejectionCountdown
A countdown value that is used after the input sanity check rejects input to reject subsequent sample...
Definition: packetstamper.h:106
PacketStamper::estimateTosInternal
int64_t estimateTosInternal(int64_t pid, int64_t toa)
Estimate the time of sampling for the supplied pid.
Definition: packetstamper.cpp:284
PacketStamper::calculateLargeSampleTime
static int64_t calculateLargeSampleTime(int64_t frameTime, int64_t lastTime)
Calculate the new large sample time value based on frameTime and the lastTime.
Definition: packetstamper.cpp:175
PacketStamper::DataPair::m_toa
int64_t m_toa
Time Of Arrival of data item.
Definition: packetstamper.h:92


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20