etsi_its_messages v3.3.0
 
Loading...
Searching...
No Matches
denm_getters.h File Reference

Getter functions for the ETSI ITS DENM (EN) More...

#include <etsi_its_msgs_utils/impl/asn1_primitives/asn1_primitives_getters.h>
#include <etsi_its_msgs_utils/impl/cdd/cdd_v1-3-1_getters.h>

Go to the source code of this file.

Functions

std::vector< bool > etsi_its_denm_msgs::access::getBitString (const std::vector< uint8_t > &buffer, const int bits_unused)
 Get a Bit String in form of bool vector.
 
uint32_t etsi_its_denm_msgs::access::getStationID (const ItsPduHeader &header)
 Get the StationID of ItsPduHeader.
 
double etsi_its_denm_msgs::access::getLatitude (const Latitude &latitude)
 Get the Latitude value.
 
double etsi_its_denm_msgs::access::getLongitude (const Longitude &longitude)
 Get the Longitude value.
 
double etsi_its_denm_msgs::access::getAltitude (const Altitude &altitude)
 Get the Altitude value.
 
double etsi_its_denm_msgs::access::getSpeed (const Speed &speed)
 Get the vehicle speed.
 
double etsi_its_denm_msgs::access::getSpeedConfidence (const Speed &speed)
 Get the Speed Confidence.
 
template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitude (const AccelerationMagnitude &acceleration_magnitude)
 Get the AccelerationMagnitude value.
 
template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitudeConfidence (const AccelerationMagnitude &acceleration_magnitude)
 Get the AccelerationMagnitude Confidence.
 
template<typename T>
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const T &reference_position, int &zone, bool &northp)
 Get the UTM Position defined by the given ReferencePosition.
 
template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingCDD (const Heading &heading)
 Get the Heading value.
 
template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingConfidenceCDD (const Heading &heading)
 Get the Heading value.
 
template<typename YawRate>
double etsi_its_denm_msgs::access::getYawRateCDD (const YawRate &yaw_rate)
 Get the Yaw Rate value.
 
template<typename YawRate, typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
double etsi_its_denm_msgs::access::getYawRateConfidenceCDD (const YawRate &yaw_rate)
 Get the Yaw Rate Confidence.
 
template<typename SemiAxisLength>
double etsi_its_denm_msgs::access::getSemiAxis (const SemiAxisLength &semi_axis_length)
 Get the Semi Axis object.
 
template<typename PosConfidenceEllipse>
std::tuple< double, double, double > etsi_its_denm_msgs::access::getPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse)
 Extract major axis length, minor axis length and orientation from the given position confidence ellipse.
 
std::array< double, 4 > etsi_its_denm_msgs::access::CovMatrixFromConfidenceEllipse (double semi_major, double semi_minor, double major_orientation, const double object_heading)
 Convert the confidence ellipse to a covariance matrix.
 
std::array< double, 4 > etsi_its_denm_msgs::access::WGSCovMatrixFromConfidenceEllipse (double semi_major, double semi_minor, double major_orientation)
 Convert the confidence ellipse to a covariance matrix.
 
template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse, const double object_heading)
 Get the covariance matrix of the position confidence ellipse.
 
template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getWGSPosConfidenceEllipse (const PosConfidenceEllipse &position_confidence_ellipse)
 Get the covariance matrix of the position confidence ellipse.
 
uint32_t etsi_its_denm_msgs::access::getStationID (const DENM &denm)
 Get the Station ID object.
 
TimestampIts etsi_its_denm_msgs::access::getReferenceTime (const DENM &denm)
 Get the Reference Time object.
 
uint64_t etsi_its_denm_msgs::access::getReferenceTimeValue (const DENM &denm)
 Get the ReferenceTime-Value.
 
uint8_t etsi_its_denm_msgs::access::getStationType (const DENM &denm)
 Get the stationType object.
 
double etsi_its_denm_msgs::access::getLatitude (const DENM &denm)
 Get the Latitude value of DENM.
 
double etsi_its_denm_msgs::access::getLongitude (const DENM &denm)
 Get the Longitude value of DENM.
 
double etsi_its_denm_msgs::access::getAltitude (const DENM &denm)
 Get the Altitude value of DENM.
 
double etsi_its_denm_msgs::access::getHeading (const DENM &denm)
 Get the Heading object.
 
double etsi_its_denm_msgs::access::getHeadingConfidence (const DENM &denm)
 Get the Heading confidence.
 
bool etsi_its_denm_msgs::access::getIsHeadingPresent (const DENM &denm)
 Get the IsHeadingPresent object.
 
double etsi_its_denm_msgs::access::getSpeed (const DENM &denm)
 Get the vehicle speed.
 
bool etsi_its_denm_msgs::access::getIsSpeedPresent (const DENM &denm)
 Get the IsSpeedPresent object.
 
double etsi_its_denm_msgs::access::getSpeedConfidence (const DENM &denm)
 Get the Speed Confidence.
 
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const DENM &denm, int &zone, bool &northp)
 
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition (const DENM &denm)
 
uint8_t etsi_its_denm_msgs::access::getCauseCode (const DENM &denm)
 Get the Cause Code object.
 
uint8_t etsi_its_denm_msgs::access::getSubCauseCode (const DENM &denm)
 Get the Sub Cause Code object.
 
std::string etsi_its_denm_msgs::access::getCauseCodeType (const DENM &denm)
 Get the Cause Code Type object.
 
std::string etsi_its_denm_msgs::access::getSubCauseCodeType (const DENM &denm)
 Get the Sub Cause Code Type object.
 
std::vector< bool > etsi_its_denm_msgs::access::getDrivingLaneStatus (const DrivingLaneStatus &driving_lane_status)
 Get the Driving Lane Status in form of bool vector.
 
std::vector< bool > etsi_its_denm_msgs::access::getLightBarSirenInUse (const LightBarSirenInUse &light_bar_siren_in_use)
 Get the Lightbar Siren In Use in form of bool vector.
 

Detailed Description

Getter functions for the ETSI ITS DENM (EN)

Definition in file denm_getters.h.

Function Documentation

◆ CovMatrixFromConfidenceEllipse()

std::array< double, 4 > etsi_its_denm_msgs::access::CovMatrixFromConfidenceEllipse ( double semi_major,
double semi_minor,
double major_orientation,
const double object_heading )
inline

Convert the confidence ellipse to a covariance matrix.

Note that the major_orientation is given in degrees, while the object_heading is given in radians!

Parameters
semi_majorSemi major axis length in meters
semi_minorSemi minor axis length in meters
major_orientationOrientation of the major axis in degrees, relative to WGS84
object_headingobject heading in radians, relative to WGS84
Returns
std::array<double, 4> The covariance matrix in vehicle coordinates (x = longitudinal, y = lateral)

Definition at line 244 of file denm_getters.h.

◆ getAccelerationMagnitude()

template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitude ( const AccelerationMagnitude & acceleration_magnitude)
inline

Get the AccelerationMagnitude value.

Parameters
acceleration_magnitudeto get the AccelerationMagnitude from
Returns
double acceleration magnitude in m/s^2 as decimal number

Definition at line 103 of file denm_getters.h.

103 {
104 return getHeadingCDD(denm.denm.location.event_position_heading);
105 } else {
double getHeadingCDD(const Heading &heading)
Get the Heading value.

◆ getAccelerationMagnitudeConfidence()

template<typename AccelerationMagnitude>
double etsi_its_denm_msgs::access::getAccelerationMagnitudeConfidence ( const AccelerationMagnitude & acceleration_magnitude)
inline

Get the AccelerationMagnitude Confidence.

Parameters
acceleration_magnitudeto get the AccelerationMagnitudeConfidence from
Returns
double acceleration magnitude standard deviation in m/s^2 as decimal number

Definition at line 114 of file denm_getters.h.

◆ getAltitude() [1/2]

double etsi_its_denm_msgs::access::getAltitude ( const Altitude & altitude)
inline

Get the Altitude value.

Parameters
altitudeto get the Altitude value from
Returns
Altitude value (above the reference ellipsoid surface) in meter as decimal number (0 if unavailable)

Definition at line 71 of file denm_getters.h.

◆ getAltitude() [2/2]

double etsi_its_denm_msgs::access::getAltitude ( const DENM & denm)
inline

Get the Altitude value of DENM.

Parameters
denmDENM to get the Altitude value from
Returns
Altitude value (above the reference ellipsoid surface) in meter as decimal number

Definition at line 362 of file denm_getters.h.

◆ getBitString()

std::vector< bool > etsi_its_denm_msgs::access::getBitString ( const std::vector< uint8_t > & buffer,
const int bits_unused )
inline

Get a Bit String in form of bool vector.

Parameters
bufferas uint8_t vector
bits_unusednumber of bits to ignore at the end of the bit string
Returns
std::vector<bool>

Definition at line 43 of file denm_getters.h.

45 { return getStationID(denm.header); }
46
53inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
54
61inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
62

◆ getCauseCode()

uint8_t etsi_its_denm_msgs::access::getCauseCode ( const DENM & denm)
inline

Get the Cause Code object.

Parameters
denmDENM to get the causeCode value from
Returns
causeCode value

Definition at line 487 of file denm_getters.h.

◆ getCauseCodeType()

std::string etsi_its_denm_msgs::access::getCauseCodeType ( const DENM & denm)
inline

Get the Cause Code Type object.

https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.02.01_30/en_30263703v010201v.pdf

Parameters
denmDENM to get the causeCodeType value from
Returns
causeCodeType value

Definition at line 505 of file denm_getters.h.

536inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
537 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
538}
539
546inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
547 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
548}
549
550} // namespace etsi_its_denm_msgs::access
std::vector< bool > getLightBarSirenInUse(const LightBarSirenInUse &light_bar_siren_in_use)
Get the Lightbar Siren In Use in form of bool vector.
std::vector< bool > getDrivingLaneStatus(const DrivingLaneStatus &driving_lane_status)
Get the Driving Lane Status in form of bool vector.
std::vector< bool > getBitString(const std::vector< uint8_t > &buffer, const int bits_unused)
Get a Bit String in form of bool vector.

◆ getDrivingLaneStatus()

std::vector< bool > etsi_its_denm_msgs::access::getDrivingLaneStatus ( const DrivingLaneStatus & driving_lane_status)
inline

Get the Driving Lane Status in form of bool vector.

Parameters
driving_lane_status
Returns
std::vector<bool>

Definition at line 805 of file denm_getters.h.

838 {
839
840#include <etsi_its_msgs_utils/impl/asn1_primitives/asn1_primitives_getters.h>
842
849inline uint32_t getStationID(const DENM& denm) { return getStationID(denm.header); }
850
857inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
858
865inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
866
873inline uint8_t getStationType(const DENM& denm) { return denm.denm.management.station_type.value; }
874
881inline double getLatitude(const DENM& denm) { return getLatitude(denm.denm.management.event_position.latitude); }
882
889inline double getLongitude(const DENM& denm) { return getLongitude(denm.denm.management.event_position.longitude); }
890
897inline double getAltitude(const DENM& denm) { return getAltitude(denm.denm.management.event_position.altitude); }
898
905inline double getHeading(const DENM& denm) {
906 if (denm.denm.location_is_present) {
907 if (denm.denm.location.event_position_heading_is_present) {
908 return getHeadingCDD(denm.denm.location.event_position_heading);
909 } else {
910 throw std::invalid_argument("Heading is not present!");
911 }
912 } else {
913 throw std::invalid_argument("LocationContainer is not present!");
914 }
915}
916
923inline double getHeadingConfidence(const DENM& denm) {
924 if (denm.denm.location_is_present) {
925 if (denm.denm.location.event_position_heading_is_present) {
926 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
927 } else {
928 throw std::invalid_argument("Heading is not present!");
929 }
930 } else {
931 throw std::invalid_argument("LocationContainer is not present!");
932 }
933}
934
941inline bool getIsHeadingPresent(const DENM& denm) {
942 if (denm.denm.location_is_present) {
943 return denm.denm.location.event_position_heading_is_present;
944 } else {
945 throw std::invalid_argument("LocationContainer is not present!");
946 }
947}
948
955inline double getSpeed(const DENM& denm) {
956 if (denm.denm.location_is_present) {
957 if (denm.denm.location.event_speed_is_present) {
958 return getSpeed(denm.denm.location.event_speed);
959 } else {
960 throw std::invalid_argument("Speed is not present!");
961 }
962 } else {
963 throw std::invalid_argument("LocationContainer is not present!");
964 }
965}
966
973inline bool getIsSpeedPresent(const DENM& denm) {
974 if (denm.denm.location_is_present) {
975 return denm.denm.location.event_speed_is_present;
976 } else {
977 throw std::invalid_argument("LocationContainer is not present!");
978 }
979}
980
987inline double getSpeedConfidence(const DENM& denm) {
988 return getSpeedConfidence(
989 denm.denm.location.event_speed);
990}
991
1000inline gm::PointStamped getUTMPosition(const DENM& denm, int& zone, bool& northp) {
1001 return getUTMPosition(denm.denm.management.event_position, zone, northp);
1002}
1003
1010inline gm::PointStamped getUTMPosition(const DENM& denm) {
1011 int zone;
1012 bool northp;
1013 return getUTMPosition(denm.denm.management.event_position, zone, northp);
1014}
1015
1022inline uint8_t getCauseCode(const DENM& denm) { return denm.denm.situation.event_type.cause_code.value; }
1023
1030inline uint8_t getSubCauseCode(const DENM& denm) { return denm.denm.situation.event_type.sub_cause_code.value; }
1031
1040inline std::string getCauseCodeType(const DENM& denm) {
1041 if (denm.denm.situation_is_present) {
1042 int cause_code = getCauseCode(denm);
1043 std::string cause_code_type = "undefined";
1044
1045 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
1046 cause_code_type = "traffic condition";
1047 else if (cause_code == CauseCodeType().ACCIDENT)
1048 cause_code_type = "accident";
1049 else if (cause_code == CauseCodeType().ROADWORKS)
1050 cause_code_type = "roadworks";
1051 else if (cause_code == CauseCodeType().IMPASSABILITY)
1052 cause_code_type = "impassibility";
1053 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
1054 cause_code_type = "adverse weather condition - adhesion";
1055 else if (cause_code == CauseCodeType().AQUAPLANNNING)
1056 cause_code_type = "aquaplanning";
1057 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
1058 cause_code_type = "hazardous location - surface condition";
1059 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
1060 cause_code_type = "hazardous location - obstacle on the road";
1061 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
1062 cause_code_type = "hazardous location - animal on the road";
1063 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
1064 cause_code_type = "human presence on the road";
1065 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
1066 cause_code_type = "wrong way driving";
1067 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
1068 cause_code_type = "rescue and recovery in progress";
1069 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
1070 cause_code_type = "adverse weather condition - extreme weather condition";
1071 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
1072 cause_code_type = "adverse weather condition - visibility";
1073 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
1074 cause_code_type = "adverse weather condition - precipitation";
1075 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
1076 cause_code_type = "slow vehicle";
1077 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
1078 cause_code_type = "dangerous end of queue";
1079 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
1080 cause_code_type = "vehicle breakdown";
1081 else if (cause_code == CauseCodeType().POST_CRASH)
1082 cause_code_type = "post crash";
1083 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
1084 cause_code_type = "human problem";
1085 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
1086 cause_code_type = "stationary vehicle";
1087 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
1088 cause_code_type = "emergency vehicle approaching";
1089 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
1090 cause_code_type = "hazardous location - dangerous curve";
1091 else if (cause_code == CauseCodeType().COLLISION_RISK)
1092 cause_code_type = "collision risk";
1093 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
1094 cause_code_type = "signal violation";
1095 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
1096 cause_code_type = "dangerous situation";
1097
1098 return cause_code_type;
1099 } else {
1100 throw std::invalid_argument("SituationContainer is not present!");
1101 }
1102}
1103
1112inline std::string getSubCauseCodeType(const DENM& denm) {
1113 if (denm.denm.situation_is_present) {
1114 int cause_code = getCauseCode(denm);
1115 int sub_cause_code = getSubCauseCode(denm);
1116 std::string sub_cause_code_type = "undefined";
1117 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
1118 if (sub_cause_code == 0)
1119 sub_cause_code_type = "unavailable";
1120 else if (sub_cause_code == 1)
1121 sub_cause_code_type = "not defined";
1122 else if (sub_cause_code == 2)
1123 sub_cause_code_type = "traffic jam slowly increasing";
1124 else if (sub_cause_code == 3)
1125 sub_cause_code_type = "traffic jam increasing";
1126 else if (sub_cause_code == 4)
1127 sub_cause_code_type = "traffic jam strongly increasing";
1128 else if (sub_cause_code == 5)
1129 sub_cause_code_type = "traffic stationary";
1130 else if (sub_cause_code == 6)
1131 sub_cause_code_type = "traffic jam slightly decreasing";
1132 else if (sub_cause_code == 7)
1133 sub_cause_code_type = "traffic jam decreasing";
1134 else if (sub_cause_code == 8)
1135 sub_cause_code_type = "traffic jam strongly decreasing";
1136 } else if (cause_code == CauseCodeType().ACCIDENT) {
1137 if (sub_cause_code == 0)
1138 sub_cause_code_type = "unavailable";
1139 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1140 sub_cause_code_type = "not defined";
1141 else if (sub_cause_code == 8)
1142 sub_cause_code_type = "assistance requested (e-Call)";
1143 } else if (cause_code == CauseCodeType().ROADWORKS) {
1144 if (sub_cause_code == 0)
1145 sub_cause_code_type = "unavailable";
1146 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1147 sub_cause_code_type = "not defined";
1148 else if (sub_cause_code == 4)
1149 sub_cause_code_type = "short-term stationary roadworks";
1150 else if (sub_cause_code == 5)
1151 sub_cause_code_type = "street cleaning";
1152 else if (sub_cause_code == 6)
1153 sub_cause_code_type = "winter service";
1154 } else if (cause_code == CauseCodeType().IMPASSABILITY)
1155 sub_cause_code_type = "not defined";
1156 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
1157 if (sub_cause_code == 0)
1158 sub_cause_code_type = "unavailable";
1159 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
1160 sub_cause_code_type = "not defined";
1161 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
1162 sub_cause_code_type = "not defined";
1163 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
1164 if (sub_cause_code == 0)
1165 sub_cause_code_type = "unavailable";
1166 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
1167 sub_cause_code_type = "not defined";
1168 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
1169 if (sub_cause_code == 0)
1170 sub_cause_code_type = "unavailable";
1171 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1172 sub_cause_code_type = "not defined";
1173 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
1174 if (sub_cause_code == 0)
1175 sub_cause_code_type = "unavailable";
1176 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
1177 sub_cause_code_type = "not defined";
1178 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
1179 if (sub_cause_code == 0)
1180 sub_cause_code_type = "unavailable";
1181 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1182 sub_cause_code_type = "not defined";
1183 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
1184 if (sub_cause_code == 0)
1185 sub_cause_code_type = "unavailable";
1186 else if (sub_cause_code == 1)
1187 sub_cause_code_type = "vehicle driving in wrong lane";
1188 else if (sub_cause_code == 2)
1189 sub_cause_code_type = "vehicle driving in wrong driving direction";
1190 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
1191 if (sub_cause_code == 0)
1192 sub_cause_code_type = "unavailable";
1193 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
1194 sub_cause_code_type = "not defined";
1195 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
1196 if (sub_cause_code == 0)
1197 sub_cause_code_type = "unavailable";
1198 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
1199 sub_cause_code_type = "not defined";
1200 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
1201 if (sub_cause_code == 0)
1202 sub_cause_code_type = "unavailable";
1203 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1204 sub_cause_code_type = "not defined";
1205 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
1206 if (sub_cause_code == 0)
1207 sub_cause_code_type = "unavailable";
1208 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1209 sub_cause_code_type = "not defined";
1210 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
1211 if (sub_cause_code == 0)
1212 sub_cause_code_type = "unavailable";
1213 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1214 sub_cause_code_type = "not defined";
1215 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
1216 if (sub_cause_code == 0)
1217 sub_cause_code_type = "unavailable";
1218 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1219 sub_cause_code_type = "not defined";
1220 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
1221 if (sub_cause_code == 0)
1222 sub_cause_code_type = "unavailable";
1223 else if (sub_cause_code == 1)
1224 sub_cause_code_type = "lack of fuel";
1225 else if (sub_cause_code == 2)
1226 sub_cause_code_type = "lack of battery";
1227 else if (sub_cause_code == 3)
1228 sub_cause_code_type = "engine problem";
1229 else if (sub_cause_code == 4)
1230 sub_cause_code_type = "transmission problem";
1231 else if (sub_cause_code == 5)
1232 sub_cause_code_type = "engine cooling problem";
1233 else if (sub_cause_code == 6)
1234 sub_cause_code_type = "braking system problem";
1235 else if (sub_cause_code == 7)
1236 sub_cause_code_type = "steering problem";
1237 else if (sub_cause_code == 8)
1238 sub_cause_code_type = "tyre puncture";
1239 } else if (cause_code == CauseCodeType().POST_CRASH) {
1240 if (sub_cause_code == 0)
1241 sub_cause_code_type = "unavailable";
1242 else if (sub_cause_code == 1)
1243 sub_cause_code_type = "accident without e-Call triggered";
1244 else if (sub_cause_code == 2)
1245 sub_cause_code_type = "accident with e-Call manually triggered";
1246 else if (sub_cause_code == 3)
1247 sub_cause_code_type = "accident with e-Call automatical triggered";
1248 else if (sub_cause_code == 4)
1249 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1250 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1251 if (sub_cause_code == 0)
1252 sub_cause_code_type = "unavailable";
1253 else if (sub_cause_code == 1)
1254 sub_cause_code_type = "glycaemia problem";
1255 else if (sub_cause_code == 2)
1256 sub_cause_code_type = "heart problem";
1257 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1258 if (sub_cause_code == 0)
1259 sub_cause_code_type = "unavailable";
1260 else if (sub_cause_code == 1)
1261 sub_cause_code_type = "human problem";
1262 else if (sub_cause_code == 2)
1263 sub_cause_code_type = "vehicle breakdown";
1264 else if (sub_cause_code == 3)
1265 sub_cause_code_type = "post crash";
1266 else if (sub_cause_code == 4)
1267 sub_cause_code_type = "public transport stop";
1268 else if (sub_cause_code == 5)
1269 sub_cause_code_type = "carrying dangerous goods";
1270 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1271 if (sub_cause_code == 0)
1272 sub_cause_code_type = "unavailable";
1273 else if (sub_cause_code == 1)
1274 sub_cause_code_type = "emergency vehicle approaching";
1275 else if (sub_cause_code == 2)
1276 sub_cause_code_type = "prioritized vehicle approaching";
1277 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1278 if (sub_cause_code == 0)
1279 sub_cause_code_type = "unavailable";
1280 else if (sub_cause_code == 1)
1281 sub_cause_code_type = "dangerous left turn curve";
1282 else if (sub_cause_code == 2)
1283 sub_cause_code_type = "dangerous right turn curve";
1284 else if (sub_cause_code == 3)
1285 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1286 else if (sub_cause_code == 4)
1287 sub_cause_code_type = "multiple curves starting with left turn";
1288 else if (sub_cause_code == 5)
1289 sub_cause_code_type = "multiple curves starting with right turn";
1290 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1291 if (sub_cause_code == 0)
1292 sub_cause_code_type = "unavailable";
1293 else if (sub_cause_code == 1)
1294 sub_cause_code_type = "longitudinal collision risk";
1295 else if (sub_cause_code == 2)
1296 sub_cause_code_type = "crossing collision risk";
1297 else if (sub_cause_code == 3)
1298 sub_cause_code_type = "lateral collision risk";
1299 else if (sub_cause_code == 4)
1300 sub_cause_code_type = "collision risk involving vulnerable road user";
1301 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1302 if (sub_cause_code == 0)
1303 sub_cause_code_type = "unavailable";
1304 else if (sub_cause_code == 1)
1305 sub_cause_code_type = "stop sign violation";
1306 else if (sub_cause_code == 2)
1307 sub_cause_code_type = "traffic light violation";
1308 else if (sub_cause_code == 3)
1309 sub_cause_code_type = "turning regulation violation";
1310 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1311 if (sub_cause_code == 0)
1312 sub_cause_code_type = "unavailable";
1313 else if (sub_cause_code == 1)
1314 sub_cause_code_type = "emergency electronic break lights";
1315 else if (sub_cause_code == 2)
1316 sub_cause_code_type = "pre-crash system activated";
1317 else if (sub_cause_code == 3)
1318 sub_cause_code_type = "ESP (electronic stability program) activated";
1319 else if (sub_cause_code == 4)
1320 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1321 else if (sub_cause_code == 5)
1322 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1323 else if (sub_cause_code == 6)
1324 sub_cause_code_type = "break warning activated";
1325 else if (sub_cause_code == 7)
1326 sub_cause_code_type = "collision risk warning activated";
1327 }
1328 return sub_cause_code_type;
1329 } else {
1330 throw std::invalid_argument("SituationContainer is not present!");
1331 }
1332}
1333
1340inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
1341 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1342}
1343
1350inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
1351 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1352}
1353
1354} // namespace etsi_its_denm_msgs::access
Getter functions for the ETSI ITS Common Data Dictionary (CDD) v1.3.1.
double getHeading(const DENM &denm)
Get the Heading object.
std::string getCauseCodeType(const DENM &denm)
Get the Cause Code Type object.
gm::PointStamped getUTMPosition(const T &reference_position, int &zone, bool &northp)
Get the UTM Position defined by the given ReferencePosition.
double getHeadingConfidence(const DENM &denm)
Get the Heading confidence.
double getLongitude(const Longitude &longitude)
Get the Longitude value.
double getHeadingConfidenceCDD(const Heading &heading)
Get the Heading value.
uint8_t getStationType(const DENM &denm)
Get the stationType object.
uint8_t getSubCauseCode(const DENM &denm)
Get the Sub Cause Code object.
bool getIsSpeedPresent(const DENM &denm)
Get the IsSpeedPresent object.
std::string getSubCauseCodeType(const DENM &denm)
Get the Sub Cause Code Type object.
double getSpeedConfidence(const Speed &speed)
Get the Speed Confidence.
double getLatitude(const Latitude &latitude)
Get the Latitude value.
uint8_t getCauseCode(const DENM &denm)
Get the Cause Code object.
double getAltitude(const Altitude &altitude)
Get the Altitude value.
bool getIsHeadingPresent(const DENM &denm)
Get the IsHeadingPresent object.
double getSpeed(const Speed &speed)
Get the vehicle speed.

◆ getHeading()

double etsi_its_denm_msgs::access::getHeading ( const DENM & denm)
inline

Get the Heading object.

Parameters
denmDENM to get the Heading-Value from
Returns
heading value in degree as decimal number

Definition at line 370 of file denm_getters.h.

374 {
375 if (sub_cause_code == 0)
376 sub_cause_code_type = "unavailable";
377 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
378 sub_cause_code_type = "not defined";
379 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
380 if (sub_cause_code == 0)

◆ getHeadingCDD()

template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingCDD ( const Heading & heading)
inline

Get the Heading value.

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

Parameters
headingto get the Heading value from
Returns
Heading value in degree as decimal number

Definition at line 159 of file denm_getters.h.

◆ getHeadingConfidence()

double etsi_its_denm_msgs::access::getHeadingConfidence ( const DENM & denm)
inline

Get the Heading confidence.

Parameters
denmDENM to get the Heading-Value from
Returns
standard deviation of heading in degrees as decimal number

Definition at line 388 of file denm_getters.h.

391 {
392 if (sub_cause_code == 0)
393 sub_cause_code_type = "unavailable";
394 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
395 sub_cause_code_type = "not defined";
396 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
397 if (sub_cause_code == 0)
398 sub_cause_code_type = "unavailable";

◆ getHeadingConfidenceCDD()

template<typename Heading>
double etsi_its_denm_msgs::access::getHeadingConfidenceCDD ( const Heading & heading)
inline

Get the Heading value.

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

Parameters
headingto get the Heading standard deviation from
Returns
Heading standard deviation in degree as decimal number

Definition at line 170 of file denm_getters.h.

170{

◆ getIsHeadingPresent()

bool etsi_its_denm_msgs::access::getIsHeadingPresent ( const DENM & denm)
inline

Get the IsHeadingPresent object.

Parameters
denmDENM to get the IsHeadingPresent-Value from
Returns
IsHeadingPresent-Value (true or false)

Definition at line 406 of file denm_getters.h.

406 {
407 if (sub_cause_code == 0)
408 sub_cause_code_type = "unavailable";
409 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
410 sub_cause_code_type = "not defined";
411 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
412 if (sub_cause_code == 0)

◆ getIsSpeedPresent()

bool etsi_its_denm_msgs::access::getIsSpeedPresent ( const DENM & denm)
inline

Get the IsSpeedPresent object.

Parameters
denmDENM to get the IsSpeedPresent-Value from
Returns
IsSpeedPresent-Value (true or false)

Definition at line 438 of file denm_getters.h.

◆ getLatitude() [1/2]

double etsi_its_denm_msgs::access::getLatitude ( const DENM & denm)
inline

Get the Latitude value of DENM.

Parameters
denmDENM to get the Latitude value from
Returns
Latitude value in degree as decimal number

Definition at line 346 of file denm_getters.h.

◆ getLatitude() [2/2]

double etsi_its_denm_msgs::access::getLatitude ( const Latitude & latitude)
inline

Get the Latitude value.

Parameters
latitudeto get the Latitude value from
Returns
Latitude value in degree as decimal number

Definition at line 55 of file denm_getters.h.

◆ getLightBarSirenInUse()

std::vector< bool > etsi_its_denm_msgs::access::getLightBarSirenInUse ( const LightBarSirenInUse & light_bar_siren_in_use)
inline

Get the Lightbar Siren In Use in form of bool vector.

Parameters
light_bar_siren_in_use
Returns
std::vector<bool>

Definition at line 815 of file denm_getters.h.

848 {
849
850#include <etsi_its_msgs_utils/impl/asn1_primitives/asn1_primitives_getters.h>
852
859inline uint32_t getStationID(const DENM& denm) { return getStationID(denm.header); }
860
867inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
868
875inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
876
883inline uint8_t getStationType(const DENM& denm) { return denm.denm.management.station_type.value; }
884
891inline double getLatitude(const DENM& denm) { return getLatitude(denm.denm.management.event_position.latitude); }
892
899inline double getLongitude(const DENM& denm) { return getLongitude(denm.denm.management.event_position.longitude); }
900
907inline double getAltitude(const DENM& denm) { return getAltitude(denm.denm.management.event_position.altitude); }
908
915inline double getHeading(const DENM& denm) {
916 if (denm.denm.location_is_present) {
917 if (denm.denm.location.event_position_heading_is_present) {
918 return getHeadingCDD(denm.denm.location.event_position_heading);
919 } else {
920 throw std::invalid_argument("Heading is not present!");
921 }
922 } else {
923 throw std::invalid_argument("LocationContainer is not present!");
924 }
925}
926
933inline double getHeadingConfidence(const DENM& denm) {
934 if (denm.denm.location_is_present) {
935 if (denm.denm.location.event_position_heading_is_present) {
936 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
937 } else {
938 throw std::invalid_argument("Heading is not present!");
939 }
940 } else {
941 throw std::invalid_argument("LocationContainer is not present!");
942 }
943}
944
951inline bool getIsHeadingPresent(const DENM& denm) {
952 if (denm.denm.location_is_present) {
953 return denm.denm.location.event_position_heading_is_present;
954 } else {
955 throw std::invalid_argument("LocationContainer is not present!");
956 }
957}
958
965inline double getSpeed(const DENM& denm) {
966 if (denm.denm.location_is_present) {
967 if (denm.denm.location.event_speed_is_present) {
968 return getSpeed(denm.denm.location.event_speed);
969 } else {
970 throw std::invalid_argument("Speed is not present!");
971 }
972 } else {
973 throw std::invalid_argument("LocationContainer is not present!");
974 }
975}
976
983inline bool getIsSpeedPresent(const DENM& denm) {
984 if (denm.denm.location_is_present) {
985 return denm.denm.location.event_speed_is_present;
986 } else {
987 throw std::invalid_argument("LocationContainer is not present!");
988 }
989}
990
997inline double getSpeedConfidence(const DENM& denm) {
998 return getSpeedConfidence(
999 denm.denm.location.event_speed);
1000}
1001
1010inline gm::PointStamped getUTMPosition(const DENM& denm, int& zone, bool& northp) {
1011 return getUTMPosition(denm.denm.management.event_position, zone, northp);
1012}
1013
1020inline gm::PointStamped getUTMPosition(const DENM& denm) {
1021 int zone;
1022 bool northp;
1023 return getUTMPosition(denm.denm.management.event_position, zone, northp);
1024}
1025
1032inline uint8_t getCauseCode(const DENM& denm) { return denm.denm.situation.event_type.cause_code.value; }
1033
1040inline uint8_t getSubCauseCode(const DENM& denm) { return denm.denm.situation.event_type.sub_cause_code.value; }
1041
1050inline std::string getCauseCodeType(const DENM& denm) {
1051 if (denm.denm.situation_is_present) {
1052 int cause_code = getCauseCode(denm);
1053 std::string cause_code_type = "undefined";
1054
1055 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
1056 cause_code_type = "traffic condition";
1057 else if (cause_code == CauseCodeType().ACCIDENT)
1058 cause_code_type = "accident";
1059 else if (cause_code == CauseCodeType().ROADWORKS)
1060 cause_code_type = "roadworks";
1061 else if (cause_code == CauseCodeType().IMPASSABILITY)
1062 cause_code_type = "impassibility";
1063 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
1064 cause_code_type = "adverse weather condition - adhesion";
1065 else if (cause_code == CauseCodeType().AQUAPLANNNING)
1066 cause_code_type = "aquaplanning";
1067 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
1068 cause_code_type = "hazardous location - surface condition";
1069 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
1070 cause_code_type = "hazardous location - obstacle on the road";
1071 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
1072 cause_code_type = "hazardous location - animal on the road";
1073 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
1074 cause_code_type = "human presence on the road";
1075 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
1076 cause_code_type = "wrong way driving";
1077 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
1078 cause_code_type = "rescue and recovery in progress";
1079 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
1080 cause_code_type = "adverse weather condition - extreme weather condition";
1081 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
1082 cause_code_type = "adverse weather condition - visibility";
1083 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
1084 cause_code_type = "adverse weather condition - precipitation";
1085 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
1086 cause_code_type = "slow vehicle";
1087 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
1088 cause_code_type = "dangerous end of queue";
1089 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
1090 cause_code_type = "vehicle breakdown";
1091 else if (cause_code == CauseCodeType().POST_CRASH)
1092 cause_code_type = "post crash";
1093 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
1094 cause_code_type = "human problem";
1095 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
1096 cause_code_type = "stationary vehicle";
1097 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
1098 cause_code_type = "emergency vehicle approaching";
1099 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
1100 cause_code_type = "hazardous location - dangerous curve";
1101 else if (cause_code == CauseCodeType().COLLISION_RISK)
1102 cause_code_type = "collision risk";
1103 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
1104 cause_code_type = "signal violation";
1105 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
1106 cause_code_type = "dangerous situation";
1107
1108 return cause_code_type;
1109 } else {
1110 throw std::invalid_argument("SituationContainer is not present!");
1111 }
1112}
1113
1122inline std::string getSubCauseCodeType(const DENM& denm) {
1123 if (denm.denm.situation_is_present) {
1124 int cause_code = getCauseCode(denm);
1125 int sub_cause_code = getSubCauseCode(denm);
1126 std::string sub_cause_code_type = "undefined";
1127 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
1128 if (sub_cause_code == 0)
1129 sub_cause_code_type = "unavailable";
1130 else if (sub_cause_code == 1)
1131 sub_cause_code_type = "not defined";
1132 else if (sub_cause_code == 2)
1133 sub_cause_code_type = "traffic jam slowly increasing";
1134 else if (sub_cause_code == 3)
1135 sub_cause_code_type = "traffic jam increasing";
1136 else if (sub_cause_code == 4)
1137 sub_cause_code_type = "traffic jam strongly increasing";
1138 else if (sub_cause_code == 5)
1139 sub_cause_code_type = "traffic stationary";
1140 else if (sub_cause_code == 6)
1141 sub_cause_code_type = "traffic jam slightly decreasing";
1142 else if (sub_cause_code == 7)
1143 sub_cause_code_type = "traffic jam decreasing";
1144 else if (sub_cause_code == 8)
1145 sub_cause_code_type = "traffic jam strongly decreasing";
1146 } else if (cause_code == CauseCodeType().ACCIDENT) {
1147 if (sub_cause_code == 0)
1148 sub_cause_code_type = "unavailable";
1149 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1150 sub_cause_code_type = "not defined";
1151 else if (sub_cause_code == 8)
1152 sub_cause_code_type = "assistance requested (e-Call)";
1153 } else if (cause_code == CauseCodeType().ROADWORKS) {
1154 if (sub_cause_code == 0)
1155 sub_cause_code_type = "unavailable";
1156 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1157 sub_cause_code_type = "not defined";
1158 else if (sub_cause_code == 4)
1159 sub_cause_code_type = "short-term stationary roadworks";
1160 else if (sub_cause_code == 5)
1161 sub_cause_code_type = "street cleaning";
1162 else if (sub_cause_code == 6)
1163 sub_cause_code_type = "winter service";
1164 } else if (cause_code == CauseCodeType().IMPASSABILITY)
1165 sub_cause_code_type = "not defined";
1166 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
1167 if (sub_cause_code == 0)
1168 sub_cause_code_type = "unavailable";
1169 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
1170 sub_cause_code_type = "not defined";
1171 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
1172 sub_cause_code_type = "not defined";
1173 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
1174 if (sub_cause_code == 0)
1175 sub_cause_code_type = "unavailable";
1176 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
1177 sub_cause_code_type = "not defined";
1178 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
1179 if (sub_cause_code == 0)
1180 sub_cause_code_type = "unavailable";
1181 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1182 sub_cause_code_type = "not defined";
1183 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
1184 if (sub_cause_code == 0)
1185 sub_cause_code_type = "unavailable";
1186 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
1187 sub_cause_code_type = "not defined";
1188 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
1189 if (sub_cause_code == 0)
1190 sub_cause_code_type = "unavailable";
1191 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1192 sub_cause_code_type = "not defined";
1193 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
1194 if (sub_cause_code == 0)
1195 sub_cause_code_type = "unavailable";
1196 else if (sub_cause_code == 1)
1197 sub_cause_code_type = "vehicle driving in wrong lane";
1198 else if (sub_cause_code == 2)
1199 sub_cause_code_type = "vehicle driving in wrong driving direction";
1200 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
1201 if (sub_cause_code == 0)
1202 sub_cause_code_type = "unavailable";
1203 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
1204 sub_cause_code_type = "not defined";
1205 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
1206 if (sub_cause_code == 0)
1207 sub_cause_code_type = "unavailable";
1208 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
1209 sub_cause_code_type = "not defined";
1210 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
1211 if (sub_cause_code == 0)
1212 sub_cause_code_type = "unavailable";
1213 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1214 sub_cause_code_type = "not defined";
1215 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
1216 if (sub_cause_code == 0)
1217 sub_cause_code_type = "unavailable";
1218 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1219 sub_cause_code_type = "not defined";
1220 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
1221 if (sub_cause_code == 0)
1222 sub_cause_code_type = "unavailable";
1223 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1224 sub_cause_code_type = "not defined";
1225 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
1226 if (sub_cause_code == 0)
1227 sub_cause_code_type = "unavailable";
1228 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1229 sub_cause_code_type = "not defined";
1230 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
1231 if (sub_cause_code == 0)
1232 sub_cause_code_type = "unavailable";
1233 else if (sub_cause_code == 1)
1234 sub_cause_code_type = "lack of fuel";
1235 else if (sub_cause_code == 2)
1236 sub_cause_code_type = "lack of battery";
1237 else if (sub_cause_code == 3)
1238 sub_cause_code_type = "engine problem";
1239 else if (sub_cause_code == 4)
1240 sub_cause_code_type = "transmission problem";
1241 else if (sub_cause_code == 5)
1242 sub_cause_code_type = "engine cooling problem";
1243 else if (sub_cause_code == 6)
1244 sub_cause_code_type = "braking system problem";
1245 else if (sub_cause_code == 7)
1246 sub_cause_code_type = "steering problem";
1247 else if (sub_cause_code == 8)
1248 sub_cause_code_type = "tyre puncture";
1249 } else if (cause_code == CauseCodeType().POST_CRASH) {
1250 if (sub_cause_code == 0)
1251 sub_cause_code_type = "unavailable";
1252 else if (sub_cause_code == 1)
1253 sub_cause_code_type = "accident without e-Call triggered";
1254 else if (sub_cause_code == 2)
1255 sub_cause_code_type = "accident with e-Call manually triggered";
1256 else if (sub_cause_code == 3)
1257 sub_cause_code_type = "accident with e-Call automatical triggered";
1258 else if (sub_cause_code == 4)
1259 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1260 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1261 if (sub_cause_code == 0)
1262 sub_cause_code_type = "unavailable";
1263 else if (sub_cause_code == 1)
1264 sub_cause_code_type = "glycaemia problem";
1265 else if (sub_cause_code == 2)
1266 sub_cause_code_type = "heart problem";
1267 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1268 if (sub_cause_code == 0)
1269 sub_cause_code_type = "unavailable";
1270 else if (sub_cause_code == 1)
1271 sub_cause_code_type = "human problem";
1272 else if (sub_cause_code == 2)
1273 sub_cause_code_type = "vehicle breakdown";
1274 else if (sub_cause_code == 3)
1275 sub_cause_code_type = "post crash";
1276 else if (sub_cause_code == 4)
1277 sub_cause_code_type = "public transport stop";
1278 else if (sub_cause_code == 5)
1279 sub_cause_code_type = "carrying dangerous goods";
1280 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1281 if (sub_cause_code == 0)
1282 sub_cause_code_type = "unavailable";
1283 else if (sub_cause_code == 1)
1284 sub_cause_code_type = "emergency vehicle approaching";
1285 else if (sub_cause_code == 2)
1286 sub_cause_code_type = "prioritized vehicle approaching";
1287 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1288 if (sub_cause_code == 0)
1289 sub_cause_code_type = "unavailable";
1290 else if (sub_cause_code == 1)
1291 sub_cause_code_type = "dangerous left turn curve";
1292 else if (sub_cause_code == 2)
1293 sub_cause_code_type = "dangerous right turn curve";
1294 else if (sub_cause_code == 3)
1295 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1296 else if (sub_cause_code == 4)
1297 sub_cause_code_type = "multiple curves starting with left turn";
1298 else if (sub_cause_code == 5)
1299 sub_cause_code_type = "multiple curves starting with right turn";
1300 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1301 if (sub_cause_code == 0)
1302 sub_cause_code_type = "unavailable";
1303 else if (sub_cause_code == 1)
1304 sub_cause_code_type = "longitudinal collision risk";
1305 else if (sub_cause_code == 2)
1306 sub_cause_code_type = "crossing collision risk";
1307 else if (sub_cause_code == 3)
1308 sub_cause_code_type = "lateral collision risk";
1309 else if (sub_cause_code == 4)
1310 sub_cause_code_type = "collision risk involving vulnerable road user";
1311 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1312 if (sub_cause_code == 0)
1313 sub_cause_code_type = "unavailable";
1314 else if (sub_cause_code == 1)
1315 sub_cause_code_type = "stop sign violation";
1316 else if (sub_cause_code == 2)
1317 sub_cause_code_type = "traffic light violation";
1318 else if (sub_cause_code == 3)
1319 sub_cause_code_type = "turning regulation violation";
1320 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1321 if (sub_cause_code == 0)
1322 sub_cause_code_type = "unavailable";
1323 else if (sub_cause_code == 1)
1324 sub_cause_code_type = "emergency electronic break lights";
1325 else if (sub_cause_code == 2)
1326 sub_cause_code_type = "pre-crash system activated";
1327 else if (sub_cause_code == 3)
1328 sub_cause_code_type = "ESP (electronic stability program) activated";
1329 else if (sub_cause_code == 4)
1330 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1331 else if (sub_cause_code == 5)
1332 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1333 else if (sub_cause_code == 6)
1334 sub_cause_code_type = "break warning activated";
1335 else if (sub_cause_code == 7)
1336 sub_cause_code_type = "collision risk warning activated";
1337 }
1338 return sub_cause_code_type;
1339 } else {
1340 throw std::invalid_argument("SituationContainer is not present!");
1341 }
1342}
1343
1350inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
1351 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1352}
1353
1360inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
1361 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1362}
1363
1364} // namespace etsi_its_denm_msgs::access

◆ getLongitude() [1/2]

double etsi_its_denm_msgs::access::getLongitude ( const DENM & denm)
inline

Get the Longitude value of DENM.

Parameters
denmDENM to get the Longitude value from
Returns
Longitude value in degree as decimal number

Definition at line 354 of file denm_getters.h.

◆ getLongitude() [2/2]

double etsi_its_denm_msgs::access::getLongitude ( const Longitude & longitude)
inline

Get the Longitude value.

Parameters
longitudeto get the Longitude value from
Returns
Longitude value in degree as decimal number

Definition at line 63 of file denm_getters.h.

◆ getPosConfidenceEllipse() [1/2]

template<typename PosConfidenceEllipse>
std::tuple< double, double, double > etsi_its_denm_msgs::access::getPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse)
inline

Extract major axis length, minor axis length and orientation from the given position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to extract the values from
Returns
std::tuple<double, double, double> major axis length in meters, minor axis length in meters, and orientation in degrees

Definition at line 225 of file denm_getters.h.

226 { return denm.denm.situation.event_type.sub_cause_code.value; }
227

◆ getPosConfidenceEllipse() [2/2]

template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse,
const double object_heading )
inline

Get the covariance matrix of the position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to get the covariance matrix from
object_headingThe object heading in radians
Returns
std::array<double, 4> The covariance matrix of the position confidence ellipse in vehicle coordinates (x = longitudinal, y = lateral)

Definition at line 286 of file denm_getters.h.

◆ getReferenceTime()

TimestampIts etsi_its_denm_msgs::access::getReferenceTime ( const DENM & denm)
inline

Get the Reference Time object.

Parameters
denmDENM to get the ReferenceTime-Value from
Returns
TimestampIts

Definition at line 322 of file denm_getters.h.

◆ getReferenceTimeValue()

uint64_t etsi_its_denm_msgs::access::getReferenceTimeValue ( const DENM & denm)
inline

Get the ReferenceTime-Value.

Parameters
denmDENM to get the ReferenceTime-Value from
Returns
uint64_t the ReferenceTime-Value

Definition at line 330 of file denm_getters.h.

◆ getSemiAxis()

template<typename SemiAxisLength>
double etsi_its_denm_msgs::access::getSemiAxis ( const SemiAxisLength & semi_axis_length)
inline

Get the Semi Axis object.

Parameters
semi_axis_lengthThe SemiAxisLength object to get the semi axis from
Returns
double the semi axis length in meters

Definition at line 214 of file denm_getters.h.

◆ getSpeed() [1/2]

double etsi_its_denm_msgs::access::getSpeed ( const DENM & denm)
inline

Get the vehicle speed.

Parameters
denmDENM to get the speed value from
Returns
speed value in m/s as decimal number

Definition at line 420 of file denm_getters.h.

◆ getSpeed() [2/2]

double etsi_its_denm_msgs::access::getSpeed ( const Speed & speed)
inline

Get the vehicle speed.

Parameters
speedto get the speed value from
Returns
speed value in m/s as decimal number

Definition at line 84 of file denm_getters.h.

◆ getSpeedConfidence() [1/2]

double etsi_its_denm_msgs::access::getSpeedConfidence ( const DENM & denm)
inline

Get the Speed Confidence.

Parameters
denmDENM to get the Speed Confidence from
Returns
double standard deviation of the speed in m/s as decimal number

Definition at line 452 of file denm_getters.h.

◆ getSpeedConfidence() [2/2]

double etsi_its_denm_msgs::access::getSpeedConfidence ( const Speed & speed)
inline

Get the Speed Confidence.

Parameters
speedto get the SpeedConfidence from
Returns
double speed standard deviation in m/s as decimal number

Definition at line 92 of file denm_getters.h.

◆ getStationID() [1/2]

uint32_t etsi_its_denm_msgs::access::getStationID ( const DENM & denm)
inline

Get the Station ID object.

Parameters
denmDENM to get the StationID value from
Returns
stationID value

Definition at line 314 of file denm_getters.h.

◆ getStationID() [2/2]

uint32_t etsi_its_denm_msgs::access::getStationID ( const ItsPduHeader & header)
inline

Get the StationID of ItsPduHeader.

Parameters
headerItsPduHeader to get the StationID value from
Returns
stationID value

Definition at line 47 of file denm_getters.h.

◆ getStationType()

uint8_t etsi_its_denm_msgs::access::getStationType ( const DENM & denm)
inline

Get the stationType object.

Parameters
denmDENM to get the stationType value from
Returns
stationType value

Definition at line 338 of file denm_getters.h.

◆ getSubCauseCode()

uint8_t etsi_its_denm_msgs::access::getSubCauseCode ( const DENM & denm)
inline

Get the Sub Cause Code object.

Parameters
denmDENM to get the subCauseCode value from
Returns
subCauseCode value

Definition at line 495 of file denm_getters.h.

◆ getSubCauseCodeType()

std::string etsi_its_denm_msgs::access::getSubCauseCodeType ( const DENM & denm)
inline

Get the Sub Cause Code Type object.

https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.02.01_30/en_30263703v010201v.pdf

Parameters
denmDENM to get the subCauseCodeType value from
Returns
causeCodeType value

Definition at line 577 of file denm_getters.h.

621inline uint32_t getStationID(const DENM& denm) { return getStationID(denm.header); }
622
629inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
630
637inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
638
645inline uint8_t getStationType(const DENM& denm) { return denm.denm.management.station_type.value; }
646
653inline double getLatitude(const DENM& denm) { return getLatitude(denm.denm.management.event_position.latitude); }
654
661inline double getLongitude(const DENM& denm) { return getLongitude(denm.denm.management.event_position.longitude); }
662
669inline double getAltitude(const DENM& denm) { return getAltitude(denm.denm.management.event_position.altitude); }
670
677inline double getHeading(const DENM& denm) {
678 if (denm.denm.location_is_present) {
679 if (denm.denm.location.event_position_heading_is_present) {
680 return getHeadingCDD(denm.denm.location.event_position_heading);
681 } else {
682 throw std::invalid_argument("Heading is not present!");
683 }
684 } else {
685 throw std::invalid_argument("LocationContainer is not present!");
686 }
687}
688
695inline double getHeadingConfidence(const DENM& denm) {
696 if (denm.denm.location_is_present) {
697 if (denm.denm.location.event_position_heading_is_present) {
698 return getHeadingConfidenceCDD(denm.denm.location.event_position_heading);
699 } else {
700 throw std::invalid_argument("Heading is not present!");
701 }
702 } else {
703 throw std::invalid_argument("LocationContainer is not present!");
704 }
705}
706
713inline bool getIsHeadingPresent(const DENM& denm) {
714 if (denm.denm.location_is_present) {
715 return denm.denm.location.event_position_heading_is_present;
716 } else {
717 throw std::invalid_argument("LocationContainer is not present!");
718 }
719}
720
727inline double getSpeed(const DENM& denm) {
728 if (denm.denm.location_is_present) {
729 if (denm.denm.location.event_speed_is_present) {
730 return getSpeed(denm.denm.location.event_speed);
731 } else {
732 throw std::invalid_argument("Speed is not present!");
733 }
734 } else {
735 throw std::invalid_argument("LocationContainer is not present!");
736 }
737}
738
745inline bool getIsSpeedPresent(const DENM& denm) {
746 if (denm.denm.location_is_present) {
747 return denm.denm.location.event_speed_is_present;
748 } else {
749 throw std::invalid_argument("LocationContainer is not present!");
750 }
751}
752
759inline double getSpeedConfidence(const DENM& denm) {
760 return getSpeedConfidence(
761 denm.denm.location.event_speed);
762}
763
772inline gm::PointStamped getUTMPosition(const DENM& denm, int& zone, bool& northp) {
773 return getUTMPosition(denm.denm.management.event_position, zone, northp);
774}
775
782inline gm::PointStamped getUTMPosition(const DENM& denm) {
783 int zone;
784 bool northp;
785 return getUTMPosition(denm.denm.management.event_position, zone, northp);
786}
787
794inline uint8_t getCauseCode(const DENM& denm) { return denm.denm.situation.event_type.cause_code.value; }
795
802inline uint8_t getSubCauseCode(const DENM& denm) { return denm.denm.situation.event_type.sub_cause_code.value; }
803
812inline std::string getCauseCodeType(const DENM& denm) {
813 if (denm.denm.situation_is_present) {
814 int cause_code = getCauseCode(denm);
815 std::string cause_code_type = "undefined";
816
817 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
818 cause_code_type = "traffic condition";
819 else if (cause_code == CauseCodeType().ACCIDENT)
820 cause_code_type = "accident";
821 else if (cause_code == CauseCodeType().ROADWORKS)
822 cause_code_type = "roadworks";
823 else if (cause_code == CauseCodeType().IMPASSABILITY)
824 cause_code_type = "impassibility";
825 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
826 cause_code_type = "adverse weather condition - adhesion";
827 else if (cause_code == CauseCodeType().AQUAPLANNNING)
828 cause_code_type = "aquaplanning";
829 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
830 cause_code_type = "hazardous location - surface condition";
831 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
832 cause_code_type = "hazardous location - obstacle on the road";
833 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
834 cause_code_type = "hazardous location - animal on the road";
835 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
836 cause_code_type = "human presence on the road";
837 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
838 cause_code_type = "wrong way driving";
839 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
840 cause_code_type = "rescue and recovery in progress";
841 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
842 cause_code_type = "adverse weather condition - extreme weather condition";
843 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
844 cause_code_type = "adverse weather condition - visibility";
845 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
846 cause_code_type = "adverse weather condition - precipitation";
847 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
848 cause_code_type = "slow vehicle";
849 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
850 cause_code_type = "dangerous end of queue";
851 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
852 cause_code_type = "vehicle breakdown";
853 else if (cause_code == CauseCodeType().POST_CRASH)
854 cause_code_type = "post crash";
855 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
856 cause_code_type = "human problem";
857 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
858 cause_code_type = "stationary vehicle";
859 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
860 cause_code_type = "emergency vehicle approaching";
861 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
862 cause_code_type = "hazardous location - dangerous curve";
863 else if (cause_code == CauseCodeType().COLLISION_RISK)
864 cause_code_type = "collision risk";
865 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
866 cause_code_type = "signal violation";
867 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
868 cause_code_type = "dangerous situation";
869
870 return cause_code_type;
871 } else {
872 throw std::invalid_argument("SituationContainer is not present!");
873 }
874}
875
884inline std::string getSubCauseCodeType(const DENM& denm) {
885 if (denm.denm.situation_is_present) {
886 int cause_code = getCauseCode(denm);
887 int sub_cause_code = getSubCauseCode(denm);
888 std::string sub_cause_code_type = "undefined";
889 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
890 if (sub_cause_code == 0)
891 sub_cause_code_type = "unavailable";
892 else if (sub_cause_code == 1)
893 sub_cause_code_type = "not defined";
894 else if (sub_cause_code == 2)
895 sub_cause_code_type = "traffic jam slowly increasing";
896 else if (sub_cause_code == 3)
897 sub_cause_code_type = "traffic jam increasing";
898 else if (sub_cause_code == 4)
899 sub_cause_code_type = "traffic jam strongly increasing";
900 else if (sub_cause_code == 5)
901 sub_cause_code_type = "traffic stationary";
902 else if (sub_cause_code == 6)
903 sub_cause_code_type = "traffic jam slightly decreasing";
904 else if (sub_cause_code == 7)
905 sub_cause_code_type = "traffic jam decreasing";
906 else if (sub_cause_code == 8)
907 sub_cause_code_type = "traffic jam strongly decreasing";
908 } else if (cause_code == CauseCodeType().ACCIDENT) {
909 if (sub_cause_code == 0)
910 sub_cause_code_type = "unavailable";
911 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
912 sub_cause_code_type = "not defined";
913 else if (sub_cause_code == 8)
914 sub_cause_code_type = "assistance requested (e-Call)";
915 } else if (cause_code == CauseCodeType().ROADWORKS) {
916 if (sub_cause_code == 0)
917 sub_cause_code_type = "unavailable";
918 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
919 sub_cause_code_type = "not defined";
920 else if (sub_cause_code == 4)
921 sub_cause_code_type = "short-term stationary roadworks";
922 else if (sub_cause_code == 5)
923 sub_cause_code_type = "street cleaning";
924 else if (sub_cause_code == 6)
925 sub_cause_code_type = "winter service";
926 } else if (cause_code == CauseCodeType().IMPASSABILITY)
927 sub_cause_code_type = "not defined";
928 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
929 if (sub_cause_code == 0)
930 sub_cause_code_type = "unavailable";
931 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
932 sub_cause_code_type = "not defined";
933 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
934 sub_cause_code_type = "not defined";
935 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
936 if (sub_cause_code == 0)
937 sub_cause_code_type = "unavailable";
938 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
939 sub_cause_code_type = "not defined";
940 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
941 if (sub_cause_code == 0)
942 sub_cause_code_type = "unavailable";
943 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
944 sub_cause_code_type = "not defined";
945 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
946 if (sub_cause_code == 0)
947 sub_cause_code_type = "unavailable";
948 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
949 sub_cause_code_type = "not defined";
950 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
951 if (sub_cause_code == 0)
952 sub_cause_code_type = "unavailable";
953 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
954 sub_cause_code_type = "not defined";
955 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
956 if (sub_cause_code == 0)
957 sub_cause_code_type = "unavailable";
958 else if (sub_cause_code == 1)
959 sub_cause_code_type = "vehicle driving in wrong lane";
960 else if (sub_cause_code == 2)
961 sub_cause_code_type = "vehicle driving in wrong driving direction";
962 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
963 if (sub_cause_code == 0)
964 sub_cause_code_type = "unavailable";
965 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
966 sub_cause_code_type = "not defined";
967 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
968 if (sub_cause_code == 0)
969 sub_cause_code_type = "unavailable";
970 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
971 sub_cause_code_type = "not defined";
972 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
973 if (sub_cause_code == 0)
974 sub_cause_code_type = "unavailable";
975 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
976 sub_cause_code_type = "not defined";
977 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
978 if (sub_cause_code == 0)
979 sub_cause_code_type = "unavailable";
980 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
981 sub_cause_code_type = "not defined";
982 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
983 if (sub_cause_code == 0)
984 sub_cause_code_type = "unavailable";
985 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
986 sub_cause_code_type = "not defined";
987 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
988 if (sub_cause_code == 0)
989 sub_cause_code_type = "unavailable";
990 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
991 sub_cause_code_type = "not defined";
992 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
993 if (sub_cause_code == 0)
994 sub_cause_code_type = "unavailable";
995 else if (sub_cause_code == 1)
996 sub_cause_code_type = "lack of fuel";
997 else if (sub_cause_code == 2)
998 sub_cause_code_type = "lack of battery";
999 else if (sub_cause_code == 3)
1000 sub_cause_code_type = "engine problem";
1001 else if (sub_cause_code == 4)
1002 sub_cause_code_type = "transmission problem";
1003 else if (sub_cause_code == 5)
1004 sub_cause_code_type = "engine cooling problem";
1005 else if (sub_cause_code == 6)
1006 sub_cause_code_type = "braking system problem";
1007 else if (sub_cause_code == 7)
1008 sub_cause_code_type = "steering problem";
1009 else if (sub_cause_code == 8)
1010 sub_cause_code_type = "tyre puncture";
1011 } else if (cause_code == CauseCodeType().POST_CRASH) {
1012 if (sub_cause_code == 0)
1013 sub_cause_code_type = "unavailable";
1014 else if (sub_cause_code == 1)
1015 sub_cause_code_type = "accident without e-Call triggered";
1016 else if (sub_cause_code == 2)
1017 sub_cause_code_type = "accident with e-Call manually triggered";
1018 else if (sub_cause_code == 3)
1019 sub_cause_code_type = "accident with e-Call automatical triggered";
1020 else if (sub_cause_code == 4)
1021 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1022 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1023 if (sub_cause_code == 0)
1024 sub_cause_code_type = "unavailable";
1025 else if (sub_cause_code == 1)
1026 sub_cause_code_type = "glycaemia problem";
1027 else if (sub_cause_code == 2)
1028 sub_cause_code_type = "heart problem";
1029 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1030 if (sub_cause_code == 0)
1031 sub_cause_code_type = "unavailable";
1032 else if (sub_cause_code == 1)
1033 sub_cause_code_type = "human problem";
1034 else if (sub_cause_code == 2)
1035 sub_cause_code_type = "vehicle breakdown";
1036 else if (sub_cause_code == 3)
1037 sub_cause_code_type = "post crash";
1038 else if (sub_cause_code == 4)
1039 sub_cause_code_type = "public transport stop";
1040 else if (sub_cause_code == 5)
1041 sub_cause_code_type = "carrying dangerous goods";
1042 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1043 if (sub_cause_code == 0)
1044 sub_cause_code_type = "unavailable";
1045 else if (sub_cause_code == 1)
1046 sub_cause_code_type = "emergency vehicle approaching";
1047 else if (sub_cause_code == 2)
1048 sub_cause_code_type = "prioritized vehicle approaching";
1049 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1050 if (sub_cause_code == 0)
1051 sub_cause_code_type = "unavailable";
1052 else if (sub_cause_code == 1)
1053 sub_cause_code_type = "dangerous left turn curve";
1054 else if (sub_cause_code == 2)
1055 sub_cause_code_type = "dangerous right turn curve";
1056 else if (sub_cause_code == 3)
1057 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1058 else if (sub_cause_code == 4)
1059 sub_cause_code_type = "multiple curves starting with left turn";
1060 else if (sub_cause_code == 5)
1061 sub_cause_code_type = "multiple curves starting with right turn";
1062 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1063 if (sub_cause_code == 0)
1064 sub_cause_code_type = "unavailable";
1065 else if (sub_cause_code == 1)
1066 sub_cause_code_type = "longitudinal collision risk";
1067 else if (sub_cause_code == 2)
1068 sub_cause_code_type = "crossing collision risk";
1069 else if (sub_cause_code == 3)
1070 sub_cause_code_type = "lateral collision risk";
1071 else if (sub_cause_code == 4)
1072 sub_cause_code_type = "collision risk involving vulnerable road user";
1073 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1074 if (sub_cause_code == 0)
1075 sub_cause_code_type = "unavailable";
1076 else if (sub_cause_code == 1)
1077 sub_cause_code_type = "stop sign violation";
1078 else if (sub_cause_code == 2)
1079 sub_cause_code_type = "traffic light violation";
1080 else if (sub_cause_code == 3)
1081 sub_cause_code_type = "turning regulation violation";
1082 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1083 if (sub_cause_code == 0)
1084 sub_cause_code_type = "unavailable";
1085 else if (sub_cause_code == 1)
1086 sub_cause_code_type = "emergency electronic break lights";
1087 else if (sub_cause_code == 2)
1088 sub_cause_code_type = "pre-crash system activated";
1089 else if (sub_cause_code == 3)
1090 sub_cause_code_type = "ESP (electronic stability program) activated";
1091 else if (sub_cause_code == 4)
1092 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1093 else if (sub_cause_code == 5)
1094 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1095 else if (sub_cause_code == 6)
1096 sub_cause_code_type = "break warning activated";
1097 else if (sub_cause_code == 7)
1098 sub_cause_code_type = "collision risk warning activated";
1099 }
1100 return sub_cause_code_type;
1101 } else {
1102 throw std::invalid_argument("SituationContainer is not present!");
1103 }
1104}
1105
1112inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
1113 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1114}
1115
1122inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
1123 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1124}
1125
1126} // namespace etsi_its_denm_msgs::access

◆ getUTMPosition() [1/3]

gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const DENM & denm)
inline
Parameters
denmDENM to get the UTM Position from
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 475 of file denm_getters.h.

◆ getUTMPosition() [2/3]

gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const DENM & denm,
int & zone,
bool & northp )
inline
Parameters
denmDENM to get the UTM Position from
zonethe UTM zone (zero means UPS)
northphemisphere (true means north, false means south)
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 465 of file denm_getters.h.

466 {
467 if (sub_cause_code == 0)

◆ getUTMPosition() [3/3]

template<typename T>
gm::PointStamped etsi_its_denm_msgs::access::getUTMPosition ( const T & reference_position,
int & zone,
bool & northp )
inline

Get the UTM Position defined by the given ReferencePosition.

The position is transformed into UTM by using GeographicLib::UTMUPS The altitude value is directly used as z-Coordinate

Parameters
[in]reference_positionReferencePosition or ReferencePositionWithConfidence to get the UTM Position from
[out]zonethe UTM zone (zero means UPS)
[out]northphemisphere (true means north, false means south)
Returns
gm::PointStamped geometry_msgs::PointStamped of the given position

Definition at line 130 of file denm_getters.h.

137 {
138 if (denm.denm.location_is_present) {
139 return denm.denm.location.event_position_heading_is_present;
140 } else {
141 throw std::invalid_argument("LocationContainer is not present!");
142 }
143}
144

◆ getWGSPosConfidenceEllipse()

template<typename PosConfidenceEllipse>
std::array< double, 4 > etsi_its_denm_msgs::access::getWGSPosConfidenceEllipse ( const PosConfidenceEllipse & position_confidence_ellipse)
inline

Get the covariance matrix of the position confidence ellipse.

Parameters
position_confidence_ellipseThe position confidence ellipse to get the covariance matrix from
object_headingThe object heading in radians
Returns
std::array<double, 4> The covariance matrix of the position confidence ellipse in WGS coordinates (x = North, y = East)

Definition at line 299 of file denm_getters.h.

◆ getYawRateCDD()

template<typename YawRate>
double etsi_its_denm_msgs::access::getYawRateCDD ( const YawRate & yaw_rate)
inline

Get the Yaw Rate value.

Parameters
yaw_rateThe YawRate object to get the yaw rate from
Returns
double The yaw rate in degrees per second

Definition at line 179 of file denm_getters.h.

◆ getYawRateConfidenceCDD()

template<typename YawRate, typename YawRateConfidence = decltype(YawRate::yaw_rate_confidence)>
double etsi_its_denm_msgs::access::getYawRateConfidenceCDD ( const YawRate & yaw_rate)
inline

Get the Yaw Rate Confidence.

Parameters
yaw_rateThe YawRate object to get the yaw rate confidence from
Returns
double The yaw rate standard deviation in degrees per second

Definition at line 190 of file denm_getters.h.

◆ WGSCovMatrixFromConfidenceEllipse()

std::array< double, 4 > etsi_its_denm_msgs::access::WGSCovMatrixFromConfidenceEllipse ( double semi_major,
double semi_minor,
double major_orientation )
inline

Convert the confidence ellipse to a covariance matrix.

Note that the major_orientation is given in degrees, while the object_heading is given in radians!

Parameters
semi_majorSemi major axis length in meters
semi_minorSemi minor axis length in meters
major_orientationOrientation of the major axis in degrees, relative to WGS84
Returns
std::array<double, 4> The covariance matrix in WGS coordinates (x = North, y = East)

Definition at line 273 of file denm_getters.h.