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
-
denm | DENM to get the subCauseCodeType value from |
- Returns
- causeCodeType value
Definition at line 577 of file denm_getters.h.
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
662
669inline double getAltitude(
const DENM& denm) {
return getAltitude(denm.denm.management.event_position.altitude); }
670
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
696 if (denm.denm.location_is_present) {
697 if (denm.denm.location.event_position_heading_is_present) {
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
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
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
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
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
813 if (denm.denm.situation_is_present) {
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
885 if (denm.denm.situation_is_present) {
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
1113 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1114}
1115
1123 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1124}
1125
1126}