Vanetza
Loading...
Searching...
No Matches
position_vector.hpp
1#ifndef POSITION_VECTOR_HPP_WJAGEOCS
2#define POSITION_VECTOR_HPP_WJAGEOCS
3
4#include <vanetza/common/bit_number.hpp>
5#include <vanetza/geodesy/position.hpp>
6#include <vanetza/geonet/address.hpp>
7#include <vanetza/geonet/serialization.hpp>
8#include <vanetza/geonet/timestamp.hpp>
9#include <vanetza/geonet/units.hpp>
10#include <boost/units/quantity.hpp>
11#include <boost/units/systems/si/velocity.hpp>
12#include <cstdint>
13
14namespace vanetza
15{
16namespace geonet
17{
18
19using geodesy::GeodeticPosition;
20
22{
23public:
24 static constexpr std::size_t length_bytes = 24;
28 >::type, BitNumber<uint_fast16_t, 15>> speed_u15t; // 1/100 m/s
29
30 Address gn_addr;
31 Timestamp timestamp; // ms since 2004-01-01 00:00:00.000
32 geo_angle_i32t latitude;
33 geo_angle_i32t longitude;
34 bool position_accuracy_indicator;
35 speed_u15t speed;
36 heading_u16t heading;
37
38 LongPositionVector();
39 GeodeticPosition position() const;
40};
41
42bool operator==(const LongPositionVector& lhs, const LongPositionVector& rhs);
43bool operator!=(const LongPositionVector& lhs, const LongPositionVector& rhs);
44
45/**
46 * Check if position vector is empty (default)
47 * \return true if all data fields are zero
48 */
49bool is_empty(const LongPositionVector&);
50
51/**
52 * Check if position vector contains valid data,
53 * i.e. not empty and latitude, longitude, and heading values within range
54 * \return true if all data fields are valid
55 */
56bool is_valid(const LongPositionVector&);
57
58void serialize(const LongPositionVector&, OutputArchive&);
59void deserialize(LongPositionVector&, InputArchive&);
60
62{
63public:
64 static constexpr std::size_t length_bytes = 20;
65
66 ShortPositionVector() = default;
67 ShortPositionVector(const ShortPositionVector&) = default;
68 ShortPositionVector& operator=(const ShortPositionVector&) = default;
69 explicit ShortPositionVector(const LongPositionVector&);
70
71 Address gn_addr;
72 Timestamp timestamp;
73 geo_angle_i32t latitude;
74 geo_angle_i32t longitude;
75};
76
77bool operator==(const ShortPositionVector& lhs, const ShortPositionVector& rhs);
78bool operator!=(const ShortPositionVector& lhs, const ShortPositionVector& rhs);
79
80} // namespace geonet
81} // namespace vanetza
82
83#endif /* POSITION_VECTOR_HPP_WJAGEOCS */
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
buffer_const_range operator[](OsiLayer layer) const
std::size_t size() const
void set_boundary(OsiLayer, unsigned bytes)
const ByteBuffer & buffer() const
CohesivePacket(const ByteBuffer &buffer, OsiLayer layer)
void trim(OsiLayer from, unsigned bytes)
std::size_t size(OsiLayer single_layer) const
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(ByteBuffer &&)
Definition byte_view.cpp:37
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
void encode(units::Duration)
Definition lifetime.cpp:45
units::Duration decode() const
Definition lifetime.cpp:59