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/geonet/address.hpp>
6#include <vanetza/geonet/serialization.hpp>
7#include <vanetza/geonet/timestamp.hpp>
8#include <vanetza/geonet/units.hpp>
9#include <boost/units/quantity.hpp>
10#include <boost/units/systems/si/velocity.hpp>
11#include <cstdint>
12
13namespace vanetza
14{
15namespace geonet
16{
17
18struct GeodeticPosition;
19
21{
22public:
23 static constexpr std::size_t length_bytes = 24;
27 >::type, BitNumber<uint_fast16_t, 15>> speed_u15t; // 1/100 m/s
28
29 Address gn_addr;
30 Timestamp timestamp; // ms since 2004-01-01 00:00:00.000
31 geo_angle_i32t latitude;
32 geo_angle_i32t longitude;
33 bool position_accuracy_indicator;
34 speed_u15t speed;
35 heading_u16t heading;
36
37 LongPositionVector();
38 GeodeticPosition position() const;
39};
40
41bool operator==(const LongPositionVector& lhs, const LongPositionVector& rhs);
42bool operator!=(const LongPositionVector& lhs, const LongPositionVector& rhs);
43
44/**
45 * Check if position vector is empty (default)
46 * \return true if all data fields are zero
47 */
48bool is_empty(const LongPositionVector&);
49
50/**
51 * Check if position vector contains valid data,
52 * i.e. not empty and latitude, longitude, and heading values within range
53 * \return true if all data fields are valid
54 */
55bool is_valid(const LongPositionVector&);
56
57void serialize(const LongPositionVector&, OutputArchive&);
58void deserialize(LongPositionVector&, InputArchive&);
59
61{
62public:
63 static constexpr std::size_t length_bytes = 20;
64
65 ShortPositionVector() = default;
66 ShortPositionVector(const ShortPositionVector&) = default;
67 ShortPositionVector& operator=(const ShortPositionVector&) = default;
68 explicit ShortPositionVector(const LongPositionVector&);
69
70 Address gn_addr;
71 Timestamp timestamp;
72 geo_angle_i32t latitude;
73 geo_angle_i32t longitude;
74};
75
76bool operator==(const ShortPositionVector& lhs, const ShortPositionVector& rhs);
77bool operator!=(const ShortPositionVector& lhs, const ShortPositionVector& rhs);
78
79} // namespace geonet
80} // namespace vanetza
81
82#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