etsi_its_messages v3.0.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.
 
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.
 
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 Heading &heading)
 Get the Heading value.
 
double etsi_its_denm_msgs::access::getHeading (const DENM &denm)
 Get the Heading object.
 
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.
 
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

◆ 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

Definition at line 68 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 168 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 274 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 292 of file denm_getters.h.

◆ 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 592 of file denm_getters.h.

636inline uint32_t getStationID(const DENM& denm) { return getStationID(denm.header); }
637
644inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
645
652inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
653
660inline uint8_t getStationType(const DENM& denm) { return denm.denm.management.station_type.value; }
661
668inline double getLatitude(const DENM& denm) { return getLatitude(denm.denm.management.event_position.latitude); }
669
676inline double getLongitude(const DENM& denm) { return getLongitude(denm.denm.management.event_position.longitude); }
677
684inline double getAltitude(const DENM& denm) { return getAltitude(denm.denm.management.event_position.altitude); }
685
694inline double getHeading(const Heading& heading) { return ((double)heading.heading_value.value) * 1e-1; }
695
702inline double getHeading(const DENM& denm) {
703 if (denm.denm.location_is_present) {
704 if (denm.denm.location.event_position_heading_is_present) {
705 return getHeading(denm.denm.location.event_position_heading);
706 } else {
707 throw std::invalid_argument("Heading is not present!");
708 }
709 } else {
710 throw std::invalid_argument("LocationContainer is not present!");
711 }
712}
713
720inline bool getIsHeadingPresent(const DENM& denm) {
721 if (denm.denm.location_is_present) {
722 return denm.denm.location.event_position_heading_is_present;
723 } else {
724 throw std::invalid_argument("LocationContainer is not present!");
725 }
726}
727
734inline double getSpeed(const DENM& denm) {
735 if (denm.denm.location_is_present) {
736 if (denm.denm.location.event_speed_is_present) {
737 return getSpeed(denm.denm.location.event_speed);
738 } else {
739 throw std::invalid_argument("Speed is not present!");
740 }
741 } else {
742 throw std::invalid_argument("LocationContainer is not present!");
743 }
744}
745
752inline bool getIsSpeedPresent(const DENM& denm) {
753 if (denm.denm.location_is_present) {
754 return denm.denm.location.event_speed_is_present;
755 } else {
756 throw std::invalid_argument("LocationContainer is not present!");
757 }
758}
759
768inline gm::PointStamped getUTMPosition(const DENM& denm, int& zone, bool& northp) {
769 return getUTMPosition(denm.denm.management.event_position, zone, northp);
770}
771
778inline gm::PointStamped getUTMPosition(const DENM& denm) {
779 int zone;
780 bool northp;
781 return getUTMPosition(denm.denm.management.event_position, zone, northp);
782}
783
790inline uint8_t getCauseCode(const DENM& denm) { return denm.denm.situation.event_type.cause_code.value; }
791
798inline uint8_t getSubCauseCode(const DENM& denm) { return denm.denm.situation.event_type.sub_cause_code.value; }
799
808inline std::string getCauseCodeType(const DENM& denm) {
809 if (denm.denm.situation_is_present) {
810 int cause_code = getCauseCode(denm);
811 std::string cause_code_type = "undefined";
812
813 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
814 cause_code_type = "traffic condition";
815 else if (cause_code == CauseCodeType().ACCIDENT)
816 cause_code_type = "accident";
817 else if (cause_code == CauseCodeType().ROADWORKS)
818 cause_code_type = "roadworks";
819 else if (cause_code == CauseCodeType().IMPASSABILITY)
820 cause_code_type = "impassibility";
821 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
822 cause_code_type = "adverse weather condition - adhesion";
823 else if (cause_code == CauseCodeType().AQUAPLANNNING)
824 cause_code_type = "aquaplanning";
825 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
826 cause_code_type = "hazardous location - surface condition";
827 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
828 cause_code_type = "hazardous location - obstacle on the road";
829 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
830 cause_code_type = "hazardous location - animal on the road";
831 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
832 cause_code_type = "human presence on the road";
833 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
834 cause_code_type = "wrong way driving";
835 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
836 cause_code_type = "rescue and recovery in progress";
837 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
838 cause_code_type = "adverse weather condition - extreme weather condition";
839 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
840 cause_code_type = "adverse weather condition - visibility";
841 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
842 cause_code_type = "adverse weather condition - precipitation";
843 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
844 cause_code_type = "slow vehicle";
845 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
846 cause_code_type = "dangerous end of queue";
847 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
848 cause_code_type = "vehicle breakdown";
849 else if (cause_code == CauseCodeType().POST_CRASH)
850 cause_code_type = "post crash";
851 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
852 cause_code_type = "human problem";
853 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
854 cause_code_type = "stationary vehicle";
855 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
856 cause_code_type = "emergency vehicle approaching";
857 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
858 cause_code_type = "hazardous location - dangerous curve";
859 else if (cause_code == CauseCodeType().COLLISION_RISK)
860 cause_code_type = "collision risk";
861 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
862 cause_code_type = "signal violation";
863 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
864 cause_code_type = "dangerous situation";
865
866 return cause_code_type;
867 } else {
868 throw std::invalid_argument("SituationContainer is not present!");
869 }
870}
871
880inline std::string getSubCauseCodeType(const DENM& denm) {
881 if (denm.denm.situation_is_present) {
882 int cause_code = getCauseCode(denm);
883 int sub_cause_code = getSubCauseCode(denm);
884 std::string sub_cause_code_type = "undefined";
885 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
886 if (sub_cause_code == 0)
887 sub_cause_code_type = "unavailable";
888 else if (sub_cause_code == 1)
889 sub_cause_code_type = "not defined";
890 else if (sub_cause_code == 2)
891 sub_cause_code_type = "traffic jam slowly increasing";
892 else if (sub_cause_code == 3)
893 sub_cause_code_type = "traffic jam increasing";
894 else if (sub_cause_code == 4)
895 sub_cause_code_type = "traffic jam strongly increasing";
896 else if (sub_cause_code == 5)
897 sub_cause_code_type = "traffic stationary";
898 else if (sub_cause_code == 6)
899 sub_cause_code_type = "traffic jam slightly decreasing";
900 else if (sub_cause_code == 7)
901 sub_cause_code_type = "traffic jam decreasing";
902 else if (sub_cause_code == 8)
903 sub_cause_code_type = "traffic jam strongly decreasing";
904 } else if (cause_code == CauseCodeType().ACCIDENT) {
905 if (sub_cause_code == 0)
906 sub_cause_code_type = "unavailable";
907 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
908 sub_cause_code_type = "not defined";
909 else if (sub_cause_code == 8)
910 sub_cause_code_type = "assistance requested (e-Call)";
911 } else if (cause_code == CauseCodeType().ROADWORKS) {
912 if (sub_cause_code == 0)
913 sub_cause_code_type = "unavailable";
914 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
915 sub_cause_code_type = "not defined";
916 else if (sub_cause_code == 4)
917 sub_cause_code_type = "short-term stationary roadworks";
918 else if (sub_cause_code == 5)
919 sub_cause_code_type = "street cleaning";
920 else if (sub_cause_code == 6)
921 sub_cause_code_type = "winter service";
922 } else if (cause_code == CauseCodeType().IMPASSABILITY)
923 sub_cause_code_type = "not defined";
924 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
925 if (sub_cause_code == 0)
926 sub_cause_code_type = "unavailable";
927 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
928 sub_cause_code_type = "not defined";
929 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
930 sub_cause_code_type = "not defined";
931 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
932 if (sub_cause_code == 0)
933 sub_cause_code_type = "unavailable";
934 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
935 sub_cause_code_type = "not defined";
936 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
937 if (sub_cause_code == 0)
938 sub_cause_code_type = "unavailable";
939 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
940 sub_cause_code_type = "not defined";
941 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
942 if (sub_cause_code == 0)
943 sub_cause_code_type = "unavailable";
944 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
945 sub_cause_code_type = "not defined";
946 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
947 if (sub_cause_code == 0)
948 sub_cause_code_type = "unavailable";
949 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
950 sub_cause_code_type = "not defined";
951 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
952 if (sub_cause_code == 0)
953 sub_cause_code_type = "unavailable";
954 else if (sub_cause_code == 1)
955 sub_cause_code_type = "vehicle driving in wrong lane";
956 else if (sub_cause_code == 2)
957 sub_cause_code_type = "vehicle driving in wrong driving direction";
958 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
959 if (sub_cause_code == 0)
960 sub_cause_code_type = "unavailable";
961 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
962 sub_cause_code_type = "not defined";
963 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
964 if (sub_cause_code == 0)
965 sub_cause_code_type = "unavailable";
966 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
967 sub_cause_code_type = "not defined";
968 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
969 if (sub_cause_code == 0)
970 sub_cause_code_type = "unavailable";
971 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
972 sub_cause_code_type = "not defined";
973 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
974 if (sub_cause_code == 0)
975 sub_cause_code_type = "unavailable";
976 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
977 sub_cause_code_type = "not defined";
978 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
979 if (sub_cause_code == 0)
980 sub_cause_code_type = "unavailable";
981 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
982 sub_cause_code_type = "not defined";
983 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
984 if (sub_cause_code == 0)
985 sub_cause_code_type = "unavailable";
986 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
987 sub_cause_code_type = "not defined";
988 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
989 if (sub_cause_code == 0)
990 sub_cause_code_type = "unavailable";
991 else if (sub_cause_code == 1)
992 sub_cause_code_type = "lack of fuel";
993 else if (sub_cause_code == 2)
994 sub_cause_code_type = "lack of battery";
995 else if (sub_cause_code == 3)
996 sub_cause_code_type = "engine problem";
997 else if (sub_cause_code == 4)
998 sub_cause_code_type = "transmission problem";
999 else if (sub_cause_code == 5)
1000 sub_cause_code_type = "engine cooling problem";
1001 else if (sub_cause_code == 6)
1002 sub_cause_code_type = "braking system problem";
1003 else if (sub_cause_code == 7)
1004 sub_cause_code_type = "steering problem";
1005 else if (sub_cause_code == 8)
1006 sub_cause_code_type = "tyre puncture";
1007 } else if (cause_code == CauseCodeType().POST_CRASH) {
1008 if (sub_cause_code == 0)
1009 sub_cause_code_type = "unavailable";
1010 else if (sub_cause_code == 1)
1011 sub_cause_code_type = "accident without e-Call triggered";
1012 else if (sub_cause_code == 2)
1013 sub_cause_code_type = "accident with e-Call manually triggered";
1014 else if (sub_cause_code == 3)
1015 sub_cause_code_type = "accident with e-Call automatical triggered";
1016 else if (sub_cause_code == 4)
1017 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1018 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1019 if (sub_cause_code == 0)
1020 sub_cause_code_type = "unavailable";
1021 else if (sub_cause_code == 1)
1022 sub_cause_code_type = "glycaemia problem";
1023 else if (sub_cause_code == 2)
1024 sub_cause_code_type = "heart problem";
1025 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1026 if (sub_cause_code == 0)
1027 sub_cause_code_type = "unavailable";
1028 else if (sub_cause_code == 1)
1029 sub_cause_code_type = "human problem";
1030 else if (sub_cause_code == 2)
1031 sub_cause_code_type = "vehicle breakdown";
1032 else if (sub_cause_code == 3)
1033 sub_cause_code_type = "post crash";
1034 else if (sub_cause_code == 4)
1035 sub_cause_code_type = "public transport stop";
1036 else if (sub_cause_code == 5)
1037 sub_cause_code_type = "carrying dangerous goods";
1038 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1039 if (sub_cause_code == 0)
1040 sub_cause_code_type = "unavailable";
1041 else if (sub_cause_code == 1)
1042 sub_cause_code_type = "emergency vehicle approaching";
1043 else if (sub_cause_code == 2)
1044 sub_cause_code_type = "prioritized vehicle approaching";
1045 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1046 if (sub_cause_code == 0)
1047 sub_cause_code_type = "unavailable";
1048 else if (sub_cause_code == 1)
1049 sub_cause_code_type = "dangerous left turn curve";
1050 else if (sub_cause_code == 2)
1051 sub_cause_code_type = "dangerous right turn curve";
1052 else if (sub_cause_code == 3)
1053 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1054 else if (sub_cause_code == 4)
1055 sub_cause_code_type = "multiple curves starting with left turn";
1056 else if (sub_cause_code == 5)
1057 sub_cause_code_type = "multiple curves starting with right turn";
1058 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1059 if (sub_cause_code == 0)
1060 sub_cause_code_type = "unavailable";
1061 else if (sub_cause_code == 1)
1062 sub_cause_code_type = "longitudinal collision risk";
1063 else if (sub_cause_code == 2)
1064 sub_cause_code_type = "crossing collision risk";
1065 else if (sub_cause_code == 3)
1066 sub_cause_code_type = "lateral collision risk";
1067 else if (sub_cause_code == 4)
1068 sub_cause_code_type = "collision risk involving vulnerable road user";
1069 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1070 if (sub_cause_code == 0)
1071 sub_cause_code_type = "unavailable";
1072 else if (sub_cause_code == 1)
1073 sub_cause_code_type = "stop sign violation";
1074 else if (sub_cause_code == 2)
1075 sub_cause_code_type = "traffic light violation";
1076 else if (sub_cause_code == 3)
1077 sub_cause_code_type = "turning regulation violation";
1078 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1079 if (sub_cause_code == 0)
1080 sub_cause_code_type = "unavailable";
1081 else if (sub_cause_code == 1)
1082 sub_cause_code_type = "emergency electronic break lights";
1083 else if (sub_cause_code == 2)
1084 sub_cause_code_type = "pre-crash system activated";
1085 else if (sub_cause_code == 3)
1086 sub_cause_code_type = "ESP (electronic stability program) activated";
1087 else if (sub_cause_code == 4)
1088 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1089 else if (sub_cause_code == 5)
1090 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1091 else if (sub_cause_code == 6)
1092 sub_cause_code_type = "break warning activated";
1093 else if (sub_cause_code == 7)
1094 sub_cause_code_type = "collision risk warning activated";
1095 }
1096 return sub_cause_code_type;
1097 } else {
1098 throw std::invalid_argument("SituationContainer is not present!");
1099 }
1100}
1101
1108inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
1109 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1110}
1111
1118inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
1119 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1120}
1121
1122} // namespace etsi_its_denm_msgs::access
Getter functions for the ETSI ITS Common Data Dictionary (CDD) v1.3.1.
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::string getCauseCodeType(const DENM &denm)
Get the Cause Code Type object.
std::vector< bool > getBitString(const std::vector< uint8_t > &buffer, const int bits_unused)
Get a Bit String in form of bool vector.
gm::PointStamped getUTMPosition(const T &reference_position, int &zone, bool &northp)
Get the UTM Position defined by the given ReferencePosition.
double getHeading(const Heading &heading)
Get the Heading value.
double getLongitude(const Longitude &longitude)
Get the Longitude 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 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() [1/2]

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

Get the Heading object.

Parameters
denmDENM to get the Heading-Value from
Returns
getHeading value

Definition at line 186 of file denm_getters.h.

187 {
188 int zone;
189 bool northp;
190 return getUTMPosition(denm.denm.management.event_position, zone, northp);
191}
192

◆ getHeading() [2/2]

double etsi_its_denm_msgs::access::getHeading ( 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 178 of file denm_getters.h.

◆ 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 204 of file denm_getters.h.

◆ 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 236 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 152 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 52 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 602 of file denm_getters.h.

646inline uint32_t getStationID(const DENM& denm) { return getStationID(denm.header); }
647
654inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
655
662inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
663
670inline uint8_t getStationType(const DENM& denm) { return denm.denm.management.station_type.value; }
671
678inline double getLatitude(const DENM& denm) { return getLatitude(denm.denm.management.event_position.latitude); }
679
686inline double getLongitude(const DENM& denm) { return getLongitude(denm.denm.management.event_position.longitude); }
687
694inline double getAltitude(const DENM& denm) { return getAltitude(denm.denm.management.event_position.altitude); }
695
704inline double getHeading(const Heading& heading) { return ((double)heading.heading_value.value) * 1e-1; }
705
712inline double getHeading(const DENM& denm) {
713 if (denm.denm.location_is_present) {
714 if (denm.denm.location.event_position_heading_is_present) {
715 return getHeading(denm.denm.location.event_position_heading);
716 } else {
717 throw std::invalid_argument("Heading is not present!");
718 }
719 } else {
720 throw std::invalid_argument("LocationContainer is not present!");
721 }
722}
723
730inline bool getIsHeadingPresent(const DENM& denm) {
731 if (denm.denm.location_is_present) {
732 return denm.denm.location.event_position_heading_is_present;
733 } else {
734 throw std::invalid_argument("LocationContainer is not present!");
735 }
736}
737
744inline double getSpeed(const DENM& denm) {
745 if (denm.denm.location_is_present) {
746 if (denm.denm.location.event_speed_is_present) {
747 return getSpeed(denm.denm.location.event_speed);
748 } else {
749 throw std::invalid_argument("Speed is not present!");
750 }
751 } else {
752 throw std::invalid_argument("LocationContainer is not present!");
753 }
754}
755
762inline bool getIsSpeedPresent(const DENM& denm) {
763 if (denm.denm.location_is_present) {
764 return denm.denm.location.event_speed_is_present;
765 } else {
766 throw std::invalid_argument("LocationContainer is not present!");
767 }
768}
769
778inline gm::PointStamped getUTMPosition(const DENM& denm, int& zone, bool& northp) {
779 return getUTMPosition(denm.denm.management.event_position, zone, northp);
780}
781
788inline gm::PointStamped getUTMPosition(const DENM& denm) {
789 int zone;
790 bool northp;
791 return getUTMPosition(denm.denm.management.event_position, zone, northp);
792}
793
800inline uint8_t getCauseCode(const DENM& denm) { return denm.denm.situation.event_type.cause_code.value; }
801
808inline uint8_t getSubCauseCode(const DENM& denm) { return denm.denm.situation.event_type.sub_cause_code.value; }
809
818inline std::string getCauseCodeType(const DENM& denm) {
819 if (denm.denm.situation_is_present) {
820 int cause_code = getCauseCode(denm);
821 std::string cause_code_type = "undefined";
822
823 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
824 cause_code_type = "traffic condition";
825 else if (cause_code == CauseCodeType().ACCIDENT)
826 cause_code_type = "accident";
827 else if (cause_code == CauseCodeType().ROADWORKS)
828 cause_code_type = "roadworks";
829 else if (cause_code == CauseCodeType().IMPASSABILITY)
830 cause_code_type = "impassibility";
831 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
832 cause_code_type = "adverse weather condition - adhesion";
833 else if (cause_code == CauseCodeType().AQUAPLANNNING)
834 cause_code_type = "aquaplanning";
835 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
836 cause_code_type = "hazardous location - surface condition";
837 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
838 cause_code_type = "hazardous location - obstacle on the road";
839 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
840 cause_code_type = "hazardous location - animal on the road";
841 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
842 cause_code_type = "human presence on the road";
843 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
844 cause_code_type = "wrong way driving";
845 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
846 cause_code_type = "rescue and recovery in progress";
847 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
848 cause_code_type = "adverse weather condition - extreme weather condition";
849 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
850 cause_code_type = "adverse weather condition - visibility";
851 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
852 cause_code_type = "adverse weather condition - precipitation";
853 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
854 cause_code_type = "slow vehicle";
855 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
856 cause_code_type = "dangerous end of queue";
857 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
858 cause_code_type = "vehicle breakdown";
859 else if (cause_code == CauseCodeType().POST_CRASH)
860 cause_code_type = "post crash";
861 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
862 cause_code_type = "human problem";
863 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
864 cause_code_type = "stationary vehicle";
865 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
866 cause_code_type = "emergency vehicle approaching";
867 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
868 cause_code_type = "hazardous location - dangerous curve";
869 else if (cause_code == CauseCodeType().COLLISION_RISK)
870 cause_code_type = "collision risk";
871 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
872 cause_code_type = "signal violation";
873 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
874 cause_code_type = "dangerous situation";
875
876 return cause_code_type;
877 } else {
878 throw std::invalid_argument("SituationContainer is not present!");
879 }
880}
881
890inline std::string getSubCauseCodeType(const DENM& denm) {
891 if (denm.denm.situation_is_present) {
892 int cause_code = getCauseCode(denm);
893 int sub_cause_code = getSubCauseCode(denm);
894 std::string sub_cause_code_type = "undefined";
895 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
896 if (sub_cause_code == 0)
897 sub_cause_code_type = "unavailable";
898 else if (sub_cause_code == 1)
899 sub_cause_code_type = "not defined";
900 else if (sub_cause_code == 2)
901 sub_cause_code_type = "traffic jam slowly increasing";
902 else if (sub_cause_code == 3)
903 sub_cause_code_type = "traffic jam increasing";
904 else if (sub_cause_code == 4)
905 sub_cause_code_type = "traffic jam strongly increasing";
906 else if (sub_cause_code == 5)
907 sub_cause_code_type = "traffic stationary";
908 else if (sub_cause_code == 6)
909 sub_cause_code_type = "traffic jam slightly decreasing";
910 else if (sub_cause_code == 7)
911 sub_cause_code_type = "traffic jam decreasing";
912 else if (sub_cause_code == 8)
913 sub_cause_code_type = "traffic jam strongly decreasing";
914 } else if (cause_code == CauseCodeType().ACCIDENT) {
915 if (sub_cause_code == 0)
916 sub_cause_code_type = "unavailable";
917 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
918 sub_cause_code_type = "not defined";
919 else if (sub_cause_code == 8)
920 sub_cause_code_type = "assistance requested (e-Call)";
921 } else if (cause_code == CauseCodeType().ROADWORKS) {
922 if (sub_cause_code == 0)
923 sub_cause_code_type = "unavailable";
924 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
925 sub_cause_code_type = "not defined";
926 else if (sub_cause_code == 4)
927 sub_cause_code_type = "short-term stationary roadworks";
928 else if (sub_cause_code == 5)
929 sub_cause_code_type = "street cleaning";
930 else if (sub_cause_code == 6)
931 sub_cause_code_type = "winter service";
932 } else if (cause_code == CauseCodeType().IMPASSABILITY)
933 sub_cause_code_type = "not defined";
934 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
935 if (sub_cause_code == 0)
936 sub_cause_code_type = "unavailable";
937 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
938 sub_cause_code_type = "not defined";
939 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
940 sub_cause_code_type = "not defined";
941 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
942 if (sub_cause_code == 0)
943 sub_cause_code_type = "unavailable";
944 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
945 sub_cause_code_type = "not defined";
946 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
947 if (sub_cause_code == 0)
948 sub_cause_code_type = "unavailable";
949 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
950 sub_cause_code_type = "not defined";
951 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
952 if (sub_cause_code == 0)
953 sub_cause_code_type = "unavailable";
954 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
955 sub_cause_code_type = "not defined";
956 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
957 if (sub_cause_code == 0)
958 sub_cause_code_type = "unavailable";
959 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
960 sub_cause_code_type = "not defined";
961 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
962 if (sub_cause_code == 0)
963 sub_cause_code_type = "unavailable";
964 else if (sub_cause_code == 1)
965 sub_cause_code_type = "vehicle driving in wrong lane";
966 else if (sub_cause_code == 2)
967 sub_cause_code_type = "vehicle driving in wrong driving direction";
968 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
969 if (sub_cause_code == 0)
970 sub_cause_code_type = "unavailable";
971 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
972 sub_cause_code_type = "not defined";
973 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
974 if (sub_cause_code == 0)
975 sub_cause_code_type = "unavailable";
976 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
977 sub_cause_code_type = "not defined";
978 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
979 if (sub_cause_code == 0)
980 sub_cause_code_type = "unavailable";
981 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
982 sub_cause_code_type = "not defined";
983 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
984 if (sub_cause_code == 0)
985 sub_cause_code_type = "unavailable";
986 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
987 sub_cause_code_type = "not defined";
988 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
989 if (sub_cause_code == 0)
990 sub_cause_code_type = "unavailable";
991 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
992 sub_cause_code_type = "not defined";
993 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
994 if (sub_cause_code == 0)
995 sub_cause_code_type = "unavailable";
996 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
997 sub_cause_code_type = "not defined";
998 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
999 if (sub_cause_code == 0)
1000 sub_cause_code_type = "unavailable";
1001 else if (sub_cause_code == 1)
1002 sub_cause_code_type = "lack of fuel";
1003 else if (sub_cause_code == 2)
1004 sub_cause_code_type = "lack of battery";
1005 else if (sub_cause_code == 3)
1006 sub_cause_code_type = "engine problem";
1007 else if (sub_cause_code == 4)
1008 sub_cause_code_type = "transmission problem";
1009 else if (sub_cause_code == 5)
1010 sub_cause_code_type = "engine cooling problem";
1011 else if (sub_cause_code == 6)
1012 sub_cause_code_type = "braking system problem";
1013 else if (sub_cause_code == 7)
1014 sub_cause_code_type = "steering problem";
1015 else if (sub_cause_code == 8)
1016 sub_cause_code_type = "tyre puncture";
1017 } else if (cause_code == CauseCodeType().POST_CRASH) {
1018 if (sub_cause_code == 0)
1019 sub_cause_code_type = "unavailable";
1020 else if (sub_cause_code == 1)
1021 sub_cause_code_type = "accident without e-Call triggered";
1022 else if (sub_cause_code == 2)
1023 sub_cause_code_type = "accident with e-Call manually triggered";
1024 else if (sub_cause_code == 3)
1025 sub_cause_code_type = "accident with e-Call automatical triggered";
1026 else if (sub_cause_code == 4)
1027 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1028 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1029 if (sub_cause_code == 0)
1030 sub_cause_code_type = "unavailable";
1031 else if (sub_cause_code == 1)
1032 sub_cause_code_type = "glycaemia problem";
1033 else if (sub_cause_code == 2)
1034 sub_cause_code_type = "heart problem";
1035 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1036 if (sub_cause_code == 0)
1037 sub_cause_code_type = "unavailable";
1038 else if (sub_cause_code == 1)
1039 sub_cause_code_type = "human problem";
1040 else if (sub_cause_code == 2)
1041 sub_cause_code_type = "vehicle breakdown";
1042 else if (sub_cause_code == 3)
1043 sub_cause_code_type = "post crash";
1044 else if (sub_cause_code == 4)
1045 sub_cause_code_type = "public transport stop";
1046 else if (sub_cause_code == 5)
1047 sub_cause_code_type = "carrying dangerous goods";
1048 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1049 if (sub_cause_code == 0)
1050 sub_cause_code_type = "unavailable";
1051 else if (sub_cause_code == 1)
1052 sub_cause_code_type = "emergency vehicle approaching";
1053 else if (sub_cause_code == 2)
1054 sub_cause_code_type = "prioritized vehicle approaching";
1055 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1056 if (sub_cause_code == 0)
1057 sub_cause_code_type = "unavailable";
1058 else if (sub_cause_code == 1)
1059 sub_cause_code_type = "dangerous left turn curve";
1060 else if (sub_cause_code == 2)
1061 sub_cause_code_type = "dangerous right turn curve";
1062 else if (sub_cause_code == 3)
1063 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1064 else if (sub_cause_code == 4)
1065 sub_cause_code_type = "multiple curves starting with left turn";
1066 else if (sub_cause_code == 5)
1067 sub_cause_code_type = "multiple curves starting with right turn";
1068 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1069 if (sub_cause_code == 0)
1070 sub_cause_code_type = "unavailable";
1071 else if (sub_cause_code == 1)
1072 sub_cause_code_type = "longitudinal collision risk";
1073 else if (sub_cause_code == 2)
1074 sub_cause_code_type = "crossing collision risk";
1075 else if (sub_cause_code == 3)
1076 sub_cause_code_type = "lateral collision risk";
1077 else if (sub_cause_code == 4)
1078 sub_cause_code_type = "collision risk involving vulnerable road user";
1079 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1080 if (sub_cause_code == 0)
1081 sub_cause_code_type = "unavailable";
1082 else if (sub_cause_code == 1)
1083 sub_cause_code_type = "stop sign violation";
1084 else if (sub_cause_code == 2)
1085 sub_cause_code_type = "traffic light violation";
1086 else if (sub_cause_code == 3)
1087 sub_cause_code_type = "turning regulation violation";
1088 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1089 if (sub_cause_code == 0)
1090 sub_cause_code_type = "unavailable";
1091 else if (sub_cause_code == 1)
1092 sub_cause_code_type = "emergency electronic break lights";
1093 else if (sub_cause_code == 2)
1094 sub_cause_code_type = "pre-crash system activated";
1095 else if (sub_cause_code == 3)
1096 sub_cause_code_type = "ESP (electronic stability program) activated";
1097 else if (sub_cause_code == 4)
1098 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1099 else if (sub_cause_code == 5)
1100 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1101 else if (sub_cause_code == 6)
1102 sub_cause_code_type = "break warning activated";
1103 else if (sub_cause_code == 7)
1104 sub_cause_code_type = "collision risk warning activated";
1105 }
1106 return sub_cause_code_type;
1107 } else {
1108 throw std::invalid_argument("SituationContainer is not present!");
1109 }
1110}
1111
1118inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
1119 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1120}
1121
1128inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
1129 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1130}
1131
1132} // 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 160 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 60 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 128 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 136 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 218 of file denm_getters.h.

218 {
219 int cause_code = getCauseCode(denm);
220 std::string cause_code_type = "undefined";
221
222 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
223 cause_code_type = "traffic condition";
224 else if (cause_code == CauseCodeType().ACCIDENT)
225 cause_code_type = "accident";
226 else if (cause_code == CauseCodeType().ROADWORKS)
227 cause_code_type = "roadworks";
228 else if (cause_code == CauseCodeType().IMPASSABILITY)

◆ 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 76 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 120 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 44 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 144 of file denm_getters.h.

144{

◆ 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 282 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 364 of file denm_getters.h.

367 {
368 if (sub_cause_code == 0)
369 sub_cause_code_type = "unavailable";
370 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
371 sub_cause_code_type = "not defined";
372 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
373 if (sub_cause_code == 0)
374 sub_cause_code_type = "unavailable";
375 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
376 sub_cause_code_type = "not defined";
377 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
378 if (sub_cause_code == 0)
379 sub_cause_code_type = "unavailable";
380 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
381 sub_cause_code_type = "not defined";
382 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
383 if (sub_cause_code == 0)
384 sub_cause_code_type = "unavailable";
385 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
386 sub_cause_code_type = "not defined";
387 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
388 if (sub_cause_code == 0)
389 sub_cause_code_type = "unavailable";
390 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
391 sub_cause_code_type = "not defined";
392 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
393 if (sub_cause_code == 0)
394 sub_cause_code_type = "unavailable";
395 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
396 sub_cause_code_type = "not defined";
397 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
398 if (sub_cause_code == 0)
399 sub_cause_code_type = "unavailable";
400 else if (sub_cause_code == 1)
401 sub_cause_code_type = "lack of fuel";
402 else if (sub_cause_code == 2)
403 sub_cause_code_type = "lack of battery";
404 else if (sub_cause_code == 3)
405 sub_cause_code_type = "engine problem";
406 else if (sub_cause_code == 4)
407 sub_cause_code_type = "transmission problem";
408 else if (sub_cause_code == 5)
409 sub_cause_code_type = "engine cooling problem";
410 else if (sub_cause_code == 6)
411 sub_cause_code_type = "braking system problem";
412 else if (sub_cause_code == 7)
413 sub_cause_code_type = "steering problem";
414 else if (sub_cause_code == 8)
415 sub_cause_code_type = "tyre puncture";
416 } else if (cause_code == CauseCodeType().POST_CRASH) {
417 if (sub_cause_code == 0)
418 sub_cause_code_type = "unavailable";
419 else if (sub_cause_code == 1)
420 sub_cause_code_type = "accident without e-Call triggered";
421 else if (sub_cause_code == 2)
422 sub_cause_code_type = "accident with e-Call manually triggered";
423 else if (sub_cause_code == 3)
424 sub_cause_code_type = "accident with e-Call automatical triggered";
425 else if (sub_cause_code == 4)
426 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
427 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
428 if (sub_cause_code == 0)
429 sub_cause_code_type = "unavailable";
430 else if (sub_cause_code == 1)
431 sub_cause_code_type = "glycaemia problem";
432 else if (sub_cause_code == 2)
433 sub_cause_code_type = "heart problem";
434 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
435 if (sub_cause_code == 0)
436 sub_cause_code_type = "unavailable";
437 else if (sub_cause_code == 1)
438 sub_cause_code_type = "human problem";
439 else if (sub_cause_code == 2)
440 sub_cause_code_type = "vehicle breakdown";
441 else if (sub_cause_code == 3)
442 sub_cause_code_type = "post crash";
443 else if (sub_cause_code == 4)
444 sub_cause_code_type = "public transport stop";
445 else if (sub_cause_code == 5)
446 sub_cause_code_type = "carrying dangerous goods";
447 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
448 if (sub_cause_code == 0)
449 sub_cause_code_type = "unavailable";
450 else if (sub_cause_code == 1)
451 sub_cause_code_type = "emergency vehicle approaching";
452 else if (sub_cause_code == 2)
453 sub_cause_code_type = "prioritized vehicle approaching";
454 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
455 if (sub_cause_code == 0)
456 sub_cause_code_type = "unavailable";
457 else if (sub_cause_code == 1)
458 sub_cause_code_type = "dangerous left turn curve";
459 else if (sub_cause_code == 2)
460 sub_cause_code_type = "dangerous right turn curve";
461 else if (sub_cause_code == 3)
462 sub_cause_code_type = "multiple curves starting with unknown turning direction";
463 else if (sub_cause_code == 4)
464 sub_cause_code_type = "multiple curves starting with left turn";
465 else if (sub_cause_code == 5)
466 sub_cause_code_type = "multiple curves starting with right turn";
467 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
468 if (sub_cause_code == 0)
469 sub_cause_code_type = "unavailable";
470 else if (sub_cause_code == 1)
471 sub_cause_code_type = "longitudinal collision risk";
472 else if (sub_cause_code == 2)
473 sub_cause_code_type = "crossing collision risk";
474 else if (sub_cause_code == 3)
475 sub_cause_code_type = "lateral collision risk";
476 else if (sub_cause_code == 4)
477 sub_cause_code_type = "collision risk involving vulnerable road user";
478 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
479 if (sub_cause_code == 0)
480 sub_cause_code_type = "unavailable";
481 else if (sub_cause_code == 1)
482 sub_cause_code_type = "stop sign violation";
483 else if (sub_cause_code == 2)
484 sub_cause_code_type = "traffic light violation";
485 else if (sub_cause_code == 3)
486 sub_cause_code_type = "turning regulation violation";
487 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
488 if (sub_cause_code == 0)
489 sub_cause_code_type = "unavailable";
490 else if (sub_cause_code == 1)
491 sub_cause_code_type = "emergency electronic break lights";
492 else if (sub_cause_code == 2)
493 sub_cause_code_type = "pre-crash system activated";
494 else if (sub_cause_code == 3)
495 sub_cause_code_type = "ESP (electronic stability program) activated";
496 else if (sub_cause_code == 4)
497 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
498 else if (sub_cause_code == 5)
499 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
500 else if (sub_cause_code == 6)
501 sub_cause_code_type = "break warning activated";
502 else if (sub_cause_code == 7)
503 sub_cause_code_type = "collision risk warning activated";
504 }
505 return sub_cause_code_type;
506 } else {
507 throw std::invalid_argument("SituationContainer is not present!");
508 }
509}
510
517inline std::vector<bool> getDrivingLaneStatus(const DrivingLaneStatus& driving_lane_status) {
518 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
519}
520
527inline std::vector<bool> getLightBarSirenInUse(const LightBarSirenInUse& light_bar_siren_in_use) {
528 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
529}
530
531} // 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 262 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 252 of file denm_getters.h.

◆ 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 90 of file denm_getters.h.

93 { return getAltitude(denm.denm.management.event_position.altitude); }
94
103inline double getHeading(const Heading& heading) { return ((double)heading.heading_value.value) * 1e-1; }
104