etsi_its_messages v3.4.0
Loading...
Searching...
No Matches
cam_setters_common.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright Institute for Automotive Engineering (ika), RWTH Aachen University
3
8
9#ifndef ETSI_ITS_MSGS_UTILS_IMPL_CAM_CAM_SETTERS_COMMON_H
10#define ETSI_ITS_MSGS_UTILS_IMPL_CAM_CAM_SETTERS_COMMON_H
11
14#include <etsi_its_msgs_utils/impl/asn1_primitives/asn1_primitives_setters.h>
15
24 GenerationDeltaTime& generation_delta_time, const uint64_t unix_nanosecs,
25 const uint16_t n_leap_seconds = etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin()->second) {
26 TimestampIts t_its;
27 setTimestampITS(t_its, unix_nanosecs, n_leap_seconds);
28 uint16_t gdt_value = t_its.value % 65536;
29 throwIfOutOfRange(gdt_value, GenerationDeltaTime::MIN, GenerationDeltaTime::MAX, "GenerationDeltaTime");
30 generation_delta_time.value = gdt_value;
31}
32
41 CAM& cam, const uint64_t unix_nanosecs,
42 const uint16_t n_leap_seconds = etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin()->second) {
43 setGenerationDeltaTime(cam.cam.generation_delta_time, unix_nanosecs, n_leap_seconds);
44}
45
52inline void setStationType(CAM& cam, const uint8_t value) {
53 setStationType(cam.cam.cam_parameters.basic_container.station_type, value);
54}
55
66inline void setHeading(CAM& cam, const double heading_val, const double confidence = std::numeric_limits<double>::infinity()) {
67 setHeadingCDD(cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.heading,
68 heading_val, confidence);
69}
70
78
79inline void setYawRate(CAM& cam, const double yaw_rate_val,
80 const double confidence = std::numeric_limits<double>::infinity()) {
81 setYawRateCDD(cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.yaw_rate,
82 yaw_rate_val, confidence);
83}
84
91inline void setVehicleWidth(VehicleWidth& vehicle_width, const double value) {
92 int64_t width = (int64_t)std::round(value * 1e1);
93 throwIfOutOfRange(width, VehicleWidth::MIN, VehicleWidth::MAX, "VehicleWidthValue");
94 vehicle_width.value = width;
95}
96
103inline void setVehicleLengthValue(VehicleLengthValue& vehicle_length, const double value) {
104 int64_t length = (int64_t)std::round(value * 1e1);
105 throwIfOutOfRange(length, VehicleLengthValue::MIN, VehicleLengthValue::MAX, "VehicleLengthValue");
106 vehicle_length.value = length;
107}
108
117inline void setVehicleLength(VehicleLength& vehicle_length, const double value) {
118 vehicle_length.vehicle_length_confidence_indication.value = VehicleLengthConfidenceIndication::UNAVAILABLE;
119 setVehicleLengthValue(vehicle_length.vehicle_length_value, value);
120}
121
129inline void setVehicleDimensions(CAM& cam, const double vehicle_length, const double vehicle_width) {
131 cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.vehicle_length,
132 vehicle_length);
133 setVehicleWidth(cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.vehicle_width,
134 vehicle_width);
135}
136
143inline void setSpeed(CAM& cam, const double speed_val, const double confidence = SpeedConfidence::UNAVAILABLE) {
144 setSpeed(cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.speed, speed_val, confidence);
145}
146
155inline void setLongitudinalAcceleration(CAM& cam, const double lon_accel, const double confidence = std::numeric_limits<double>::infinity()) {
157 cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.longitudinal_acceleration,
158 lon_accel, confidence);
159}
160
169inline void setLateralAcceleration(CAM& cam, const double lat_accel, const double confidence = std::numeric_limits<double>::infinity()) {
171 cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency.lateral_acceleration,
172 lat_accel, confidence);
173 cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_frequency
174 .lateral_acceleration_is_present = true;
175}
176
188inline void setReferencePosition(CAM& cam, const double latitude, const double longitude,
189 const double altitude = AltitudeValue::UNAVAILABLE) {
190 setReferencePosition(cam.cam.cam_parameters.basic_container.reference_position, latitude, longitude, altitude);
191}
192
205inline void setFromUTMPosition(CAM& cam, const gm::PointStamped& utm_position, const int& zone, const bool& northp) {
206 setFromUTMPosition(cam.cam.cam_parameters.basic_container.reference_position, utm_position, zone, northp);
207}
208
215inline void setExteriorLights(ExteriorLights& exterior_lights, const std::vector<bool>& bits) {
216 setBitString(exterior_lights, bits);
217}
218
225inline void setExteriorLights(CAM& cam, const std::vector<bool>& exterior_lights) {
226 if (ExteriorLights::SIZE_BITS != exterior_lights.size()) {
227 throw std::invalid_argument("Vector has wrong size. (" + std::to_string(exterior_lights.size()) +
228 " != " + std::to_string(ExteriorLights::SIZE_BITS) + ")");
229 }
230 if (cam.cam.cam_parameters.low_frequency_container_is_present) {
231 if (cam.cam.cam_parameters.low_frequency_container.choice ==
232 LowFrequencyContainer::CHOICE_BASIC_VEHICLE_CONTAINER_LOW_FREQUENCY) {
234 cam.cam.cam_parameters.low_frequency_container.basic_vehicle_container_low_frequency.exterior_lights,
235 exterior_lights);
236 } else {
237 throw std::invalid_argument("LowFrequencyContainer is not BASIC_VEHICLE_CONTAINER_LOW_FREQUENCY!");
238 }
239 } else {
240 throw std::invalid_argument("LowFrequencyContainer is not present!");
241 }
242}
243
250inline void setAccelerationControl(AccelerationControl& acceleration_control, const std::vector<bool>& bits) {
251 setBitString(acceleration_control, bits);
252}
253
260inline void setDrivingLaneStatus(DrivingLaneStatus& driving_lane_status, const std::vector<bool>& bits) {
261 setBitString(driving_lane_status, bits);
262}
263
270inline void setSpecialTransportType(SpecialTransportType& special_transport_type, const std::vector<bool>& bits) {
271 setBitString(special_transport_type, bits);
272}
273
280inline void setLightBarSirenInUse(LightBarSirenInUse& light_bar_siren_in_use, const std::vector<bool>& bits) {
281 setBitString(light_bar_siren_in_use, bits);
282}
283
290inline void setEmergencyPriority(EmergencyPriority& emergency_priority, const std::vector<bool>& bits) {
291 setBitString(emergency_priority, bits);
292}
293
294#endif // ETSI_ITS_MSGS_UTILS_IMPL_CAM_CAM_SETTERS_COMMON_H
void setLongitudinalAcceleration(CAM &cam, const double lon_accel, const double confidence=std::numeric_limits< double >::infinity())
Set the longitudinal acceleration.
void setVehicleLength(VehicleLength &vehicle_length, const double value)
Set the VehicleLength object.
void setSpecialTransportType(SpecialTransportType &special_transport_type, const std::vector< bool > &bits)
Set the Special Transport Type by a vector of bools.
void setLightBarSirenInUse(LightBarSirenInUse &light_bar_siren_in_use, const std::vector< bool > &bits)
Set the Lightbar Siren In Use by a vector of bools.
void setVehicleDimensions(CAM &cam, const double vehicle_length, const double vehicle_width)
Set the vehicle dimensions.
void setVehicleLengthValue(VehicleLengthValue &vehicle_length, const double value)
Set the VehicleLengthValue object.
void setGenerationDeltaTime(GenerationDeltaTime &generation_delta_time, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
Set the GenerationDeltaTime-Value.
void setYawRate(CAM &cam, const double yaw_rate_val, const double confidence=std::numeric_limits< double >::infinity())
Set the Yaw Rate for a CAM.
void setLateralAcceleration(CAM &cam, const double lat_accel, const double confidence=std::numeric_limits< double >::infinity())
Set the lateral acceleration.
void setExteriorLights(ExteriorLights &exterior_lights, const std::vector< bool > &bits)
Set the Exterior Lights by a vector of bools.
void setStationType(CAM &cam, const uint8_t value)
Set the StationType for a CAM.
void setAccelerationControl(AccelerationControl &acceleration_control, const std::vector< bool > &bits)
Set the Acceleration Control by a vector of bools.
void setFromUTMPosition(CAM &cam, const gm::PointStamped &utm_position, const int &zone, const bool &northp)
Set the ReferencePosition of a CAM from a given UTM-Position.
void setVehicleWidth(VehicleWidth &vehicle_width, const double value)
Set the VehicleWidth object.
void setEmergencyPriority(EmergencyPriority &emergency_priority, const std::vector< bool > &bits)
Set the Emergency Priority by a vector of bools.
void setSpeed(CAM &cam, const double speed_val, const double confidence=SpeedConfidence::UNAVAILABLE)
Set the vehicle speed.
void setReferencePosition(CAM &cam, const double latitude, const double longitude, const double altitude=AltitudeValue::UNAVAILABLE)
Set the ReferencePosition for a CAM.
void setDrivingLaneStatus(DrivingLaneStatus &driving_lane_status, const std::vector< bool > &bits)
Set the Driving Lane Status by a vector of bools.
void setHeading(CAM &cam, const double heading_val, const double confidence=std::numeric_limits< double >::infinity())
Set the Heading for a CAM.
void setTimestampITS(TimestampIts &timestamp_its, const uint64_t unix_nanosecs, const uint16_t n_leap_seconds=etsi_its_msgs::LEAP_SECOND_INSERTIONS_SINCE_2004.rbegin() ->second)
Set the TimestampITS object.
void setYawRateCDD(YawRate &yaw_rate, const double value, double confidence=std::numeric_limits< double >::infinity())
Set the Yaw Rate object.
void setHeadingCDD(Heading &heading, const double value, double confidence=std::numeric_limits< double >::infinity())
Set the Heading object.
Sanity-check functions etc.
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:23
File containing constants that are used in the context of ETIS ITS Messages.
const std::map< uint64_t, uint16_t > LEAP_SECOND_INSERTIONS_SINCE_2004
std::map that stores all leap second insertions since 2004 with the corresponding unix-date of the in...
Definition constants.h:22