etsi_its_messages v3.4.0
Loading...
Searching...
No Matches
cdd_v2-2-1_setters.h File Reference

Setter functions for the ETSI ITS Common Data Dictionary (CDD) v2.2.1. More...

#include <etsi_its_msgs_utils/impl/cdd/cdd_setters_common.h>
#include <etsi_its_msgs_utils/impl/checks.h>
#include <GeographicLib/UTMUPS.hpp>
#include <cstring>

Go to the source code of this file.

Functions

void setItsPduHeader (ItsPduHeader &header, const uint8_t message_id, const uint32_t station_id, const uint8_t protocol_version=0)
 Set the Its Pdu Header object.
template<typename Wgs84AngleValue>
void setWGSHeadingValue (Wgs84AngleValue &heading, const double value)
 Set the Wgs84AngleValue object.
template<typename Wgs84AngleConfidence>
void setWGSHeadingConfidence (Wgs84AngleConfidence &confidence, const double value)
 Set the Wgs84AngleConfidence object.
template<typename Wgs84Angle, typename Wgs84AngleConfidence = decltype(Wgs84Angle::confidence)>
void setWGSHeadingCDD (Wgs84Angle &heading, const double value, double confidence=std::numeric_limits< double >::infinity())
 Set the Wgs84Angle object.

Detailed Description

Setter functions for the ETSI ITS Common Data Dictionary (CDD) v2.2.1.

Definition in file cdd_v2-2-1_setters.h.

Function Documentation

◆ setItsPduHeader()

void setItsPduHeader ( ItsPduHeader & header,
const uint8_t message_id,
const uint32_t station_id,
const uint8_t protocol_version = 0 )
inline

Set the Its Pdu Header object.

Parameters
headerItsPduHeader to be set
message_idID of the message
station_id
protocol_version

Definition at line 48 of file cdd_v2-2-1_setters.h.

49 {
50 setStationId(header.station_id, station_id);
51 throwIfOutOfRange(message_id, MessageId::MIN, MessageId::MAX, "MessageID");
52 header.message_id.value = message_id;
53 throwIfOutOfRange(protocol_version, OrdinalNumber1B::MIN, OrdinalNumber1B::MAX, "ProtocolVersion");
54 header.protocol_version.value = protocol_version;
55}
void setStationId(StationId &station_id, const uint32_t id_value)
Set the Station Id object.
void throwIfOutOfRange(const T1 &val, const T2 &min, const T2 &max, const std::string val_desc)
Throws an exception if a given value is out of a defined range.
Definition checks.h:46

◆ setWGSHeadingCDD()

template<typename Wgs84Angle, typename Wgs84AngleConfidence = decltype(Wgs84Angle::confidence)>
void setWGSHeadingCDD ( Wgs84Angle & heading,
const double value,
double confidence = std::numeric_limits<double>::infinity() )

Set the Wgs84Angle object.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West Wgs84AngleConfidence is set to UNAVAILABLE

Parameters
headingobject to set
valueHeading value in degree as decimal number
confidencestandard deviation of heading in degree as decimal number (default: infinity, mapping to Wgs84AngleConfidence::UNAVAILABLE)

Definition at line 100 of file cdd_v2-2-1_setters.h.

100 {
101 setWGSHeadingConfidence(heading.confidence, confidence);
102 setWGSHeadingValue(heading.value, value);
103}
void setWGSHeadingValue(Wgs84AngleValue &heading, const double value)
Set the Wgs84AngleValue object.
void setWGSHeadingConfidence(Wgs84AngleConfidence &confidence, const double value)
Set the Wgs84AngleConfidence object.

◆ setWGSHeadingConfidence()

template<typename Wgs84AngleConfidence>
void setWGSHeadingConfidence ( Wgs84AngleConfidence & confidence,
const double value )
inline

Set the Wgs84AngleConfidence object.

Parameters
confidenceobject to set
valuestandard deviation of heading in degree as decimal number

Definition at line 79 of file cdd_v2-2-1_setters.h.

79 {
80 auto heading_conf = std::round(value * 1e1 * etsi_its_msgs::ONE_D_GAUSSIAN_FACTOR);
81 if (heading_conf < Wgs84AngleConfidence::MIN && heading_conf > 0.0){
82 heading_conf = Wgs84AngleConfidence::MIN;
83 } else if (heading_conf >= Wgs84AngleConfidence::OUT_OF_RANGE || heading_conf <= 0.0) {
84 heading_conf = Wgs84AngleConfidence::UNAVAILABLE;
85 }
86 confidence.value = static_cast<decltype(confidence.value)>(heading_conf);
87}

◆ setWGSHeadingValue()

template<typename Wgs84AngleValue>
void setWGSHeadingValue ( Wgs84AngleValue & heading,
const double value )
inline

Set the Wgs84AngleValue object.

0.0° equals WGS84 North, 90.0° equals WGS84 East, 180.0° equals WGS84 South and 270.0° equals WGS84 West

Parameters
headingobject to set
valueHeading value in degree as decimal number

Definition at line 66 of file cdd_v2-2-1_setters.h.

66 {
67 int64_t deg = (int64_t)std::round(value * 1e1);
68 throwIfOutOfRange(deg, Wgs84AngleValue::MIN, Wgs84AngleValue::MAX, "Wgs84AngleValue");
69 heading.value = deg;
70}