1#include <vanetza/asn1/its/Heading.h>
2#include <vanetza/asn1/its/r2/Heading.h>
3#include <vanetza/facilities/detail/macros.ipp>
4#include <vanetza/units/angle.hpp>
6ASSERT_EQUAL_ENUM(HeadingValue_wgs84North);
7ASSERT_EQUAL_ENUM(HeadingValue_wgs84East);
8ASSERT_EQUAL_ENUM(HeadingValue_wgs84South);
9ASSERT_EQUAL_ENUM(HeadingValue_wgs84West);
10ASSERT_EQUAL_ENUM(HeadingValue_unavailable);
17bool is_available(
const ASN1_PREFIXED(Heading)& hd)
19 return hd.headingValue != ASN1_PREFIXED(HeadingValue_unavailable);
22bool similar_heading(
const ASN1_PREFIXED(Heading)& a,
const ASN1_PREFIXED(Heading)& b, Angle limit)
25 static_assert(ASN1_PREFIXED(HeadingValue_wgs84East) == 900,
"HeadingValue interpretation fails");
28 if (is_available(a) && is_available(b)) {
29 using vanetza::units::degree;
30 const Angle angle_a { a.headingValue / 10.0 * degree };
31 const Angle angle_b { b.headingValue / 10.0 * degree };
32 result = similar_heading(angle_a, angle_b, limit);
38bool similar_heading(
const ASN1_PREFIXED(Heading)& a, Angle b, Angle limit)
41 if (is_available(a)) {
42 using vanetza::units::degree;
43 result = similar_heading(Angle { a.headingValue / 10.0 * degree}, b, limit);