1 #include <binding/application.hpp>
2 #include <can/can-decoder.hpp>
3 #include <can/can-encoder.hpp>
6 CTLP_CAPI_REGISTER("agl-virtual-car");
8 std::shared_ptr<message_set_t> cms = std::make_shared<message_set_t>(message_set_t{0,"AGL Virtual Car",
9 { // beginning message_definition_ vector
10 {std::make_shared<message_definition_t>(message_definition_t{"ls",0x111,"",16,16,frequency_clock_t(5.00000f),true,
11 { // beginning signals vector
12 {std::make_shared<signal_t> (signal_t{
13 "sig1.1",// generic_name
20 frequency_clock_t(0.00000f),// frequency
22 false,// force_send_changed
29 std::make_pair<bool, int>(false, 0),// multiplex
30 static_cast<sign_t>(0),// signed
31 -1,// bit_sign_position
34 {std::make_shared<signal_t> (signal_t{
35 "sig1.2",// generic_name
42 frequency_clock_t(0.00000f),// frequency
44 false,// force_send_changed
51 std::make_pair<bool, int>(false, 0),// multiplex
52 static_cast<sign_t>(0),// signed
53 -1,// bit_sign_position
56 {std::make_shared<signal_t> (signal_t{
57 "sig2.1",// generic_name
64 frequency_clock_t(0.00000f),// frequency
66 false,// force_send_changed
73 std::make_pair<bool, int>(false, 0),// multiplex
74 static_cast<sign_t>(0),// signed
75 -1,// bit_sign_position
78 {std::make_shared<signal_t> (signal_t{
79 "sig2.2",// generic_name
86 frequency_clock_t(0.00000f),// frequency
88 false,// force_send_changed
95 std::make_pair<bool, int>(false, 0),// multiplex
96 static_cast<sign_t>(0),// signed
97 -1,// bit_sign_position
100 {std::make_shared<signal_t> (signal_t{
101 "sig3.1",// generic_name
108 frequency_clock_t(0.00000f),// frequency
110 false,// force_send_changed
117 std::make_pair<bool, int>(false, 0),// multiplex
118 static_cast<sign_t>(0),// signed
119 -1,// bit_sign_position
122 {std::make_shared<signal_t> (signal_t{
123 "sig3.2",// generic_name
130 frequency_clock_t(0.00000f),// frequency
132 false,// force_send_changed
139 std::make_pair<bool, int>(false, 0),// multiplex
140 static_cast<sign_t>(0),// signed
141 -1,// bit_sign_position
144 {std::make_shared<signal_t> (signal_t{
145 "sig4.1",// generic_name
152 frequency_clock_t(0.00000f),// frequency
154 false,// force_send_changed
161 std::make_pair<bool, int>(false, 0),// multiplex
162 static_cast<sign_t>(0),// signed
163 -1,// bit_sign_position
166 {std::make_shared<signal_t> (signal_t{
167 "sig4.2",// generic_name
174 frequency_clock_t(0.00000f),// frequency
176 false,// force_send_changed
183 std::make_pair<bool, int>(false, 0),// multiplex
184 static_cast<sign_t>(0),// signed
185 -1,// bit_sign_position
188 } // end signals vector
189 })} // end message_definition entry
190 , {std::make_shared<message_definition_t>(message_definition_t{"ls",0x30,"",8,0,frequency_clock_t(5.00000f),true,
191 { // beginning signals vector
192 {std::make_shared<signal_t> (signal_t{
193 "hvac.fan.speed",// generic_name
200 frequency_clock_t(0.00000f),// frequency
202 false,// force_send_changed
209 std::make_pair<bool, int>(false, 0),// multiplex
210 static_cast<sign_t>(0),// signed
211 -1,// bit_sign_position
214 {std::make_shared<signal_t> (signal_t{
215 "hvac.temperature.left",// generic_name
222 frequency_clock_t(0.00000f),// frequency
224 false,// force_send_changed
231 std::make_pair<bool, int>(false, 0),// multiplex
232 static_cast<sign_t>(0),// signed
233 -1,// bit_sign_position
236 {std::make_shared<signal_t> (signal_t{
237 "hvac.temperature.right",// generic_name
244 frequency_clock_t(0.00000f),// frequency
246 false,// force_send_changed
253 std::make_pair<bool, int>(false, 0),// multiplex
254 static_cast<sign_t>(0),// signed
255 -1,// bit_sign_position
258 {std::make_shared<signal_t> (signal_t{
259 "hvac.temperature.average",// generic_name
266 frequency_clock_t(0.00000f),// frequency
268 false,// force_send_changed
275 std::make_pair<bool, int>(false, 0),// multiplex
276 static_cast<sign_t>(0),// signed
277 -1,// bit_sign_position
280 } // end signals vector
281 })} // end message_definition entry
282 , {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,2,frequency_clock_t(5.00000f),true,
283 { // beginning signals vector
284 {std::make_shared<signal_t> (signal_t{
285 "engine.speed",// generic_name
292 frequency_clock_t(0.00000f),// frequency
294 false,// force_send_changed
301 std::make_pair<bool, int>(false, 0),// multiplex
302 static_cast<sign_t>(0),// signed
303 -1,// bit_sign_position
306 {std::make_shared<signal_t> (signal_t{
307 "fuel.level.low",// generic_name
314 frequency_clock_t(0.00000f),// frequency
316 false,// force_send_changed
320 decoder_t::decode_boolean,// decoder
323 std::make_pair<bool, int>(false, 0),// multiplex
324 static_cast<sign_t>(0),// signed
325 -1,// bit_sign_position
328 {std::make_shared<signal_t> (signal_t{
329 "fuel.level",// generic_name
336 frequency_clock_t(0.00000f),// frequency
338 false,// force_send_changed
345 std::make_pair<bool, int>(false, 0),// multiplex
346 static_cast<sign_t>(0),// signed
347 -1,// bit_sign_position
350 } // end signals vector
351 })} // end message_definition entry
352 , {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,0,frequency_clock_t(5.00000f),true,
353 { // beginning signals vector
354 {std::make_shared<signal_t> (signal_t{
355 "vehicle.average.speed",// generic_name
362 frequency_clock_t(0.00000f),// frequency
364 false,// force_send_changed
371 std::make_pair<bool, int>(false, 0),// multiplex
372 static_cast<sign_t>(0),// signed
373 -1,// bit_sign_position
376 } // end signals vector
377 })} // end message_definition entry
378 , {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,0,frequency_clock_t(5.00000f),true,
379 { // beginning signals vector
380 {std::make_shared<signal_t> (signal_t{
381 "engine.oil.temp",// generic_name
388 frequency_clock_t(0.00000f),// frequency
390 false,// force_send_changed
397 std::make_pair<bool, int>(false, 0),// multiplex
398 static_cast<sign_t>(0),// signed
399 -1,// bit_sign_position
402 {std::make_shared<signal_t> (signal_t{
403 "engine.oil.temp.high",// generic_name
410 frequency_clock_t(0.00000f),// frequency
412 false,// force_send_changed
416 decoder_t::decode_boolean,// decoder
419 std::make_pair<bool, int>(false, 0),// multiplex
420 static_cast<sign_t>(0),// signed
421 -1,// bit_sign_position
424 } // end signals vector
425 })} // end message_definition entry
426 , {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,0,frequency_clock_t(5.00000f),true,
427 { // beginning signals vector
428 {std::make_shared<signal_t> (signal_t{
429 "doors.boot.open",// generic_name
436 frequency_clock_t(0.00000f),// frequency
438 false,// force_send_changed
442 decoder_t::decode_boolean,// decoder
445 std::make_pair<bool, int>(false, 0),// multiplex
446 static_cast<sign_t>(0),// signed
447 -1,// bit_sign_position
450 {std::make_shared<signal_t> (signal_t{
451 "doors.front_left.open",// generic_name
458 frequency_clock_t(0.00000f),// frequency
460 false,// force_send_changed
464 decoder_t::decode_boolean,// decoder
467 std::make_pair<bool, int>(false, 0),// multiplex
468 static_cast<sign_t>(0),// signed
469 -1,// bit_sign_position
472 {std::make_shared<signal_t> (signal_t{
473 "doors.front_right.open",// generic_name
480 frequency_clock_t(0.00000f),// frequency
482 false,// force_send_changed
486 decoder_t::decode_boolean,// decoder
489 std::make_pair<bool, int>(false, 0),// multiplex
490 static_cast<sign_t>(0),// signed
491 -1,// bit_sign_position
494 {std::make_shared<signal_t> (signal_t{
495 "doors.rear_left.open",// generic_name
502 frequency_clock_t(0.00000f),// frequency
504 false,// force_send_changed
508 decoder_t::decode_boolean,// decoder
511 std::make_pair<bool, int>(false, 0),// multiplex
512 static_cast<sign_t>(0),// signed
513 -1,// bit_sign_position
516 {std::make_shared<signal_t> (signal_t{
517 "doors.rear_right.open",// generic_name
524 frequency_clock_t(0.00000f),// frequency
526 false,// force_send_changed
530 decoder_t::decode_boolean,// decoder
533 std::make_pair<bool, int>(false, 0),// multiplex
534 static_cast<sign_t>(0),// signed
535 -1,// bit_sign_position
538 } // end signals vector
539 })} // end message_definition entry
540 , {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,0,frequency_clock_t(5.00000f),true,
541 { // beginning signals vector
542 {std::make_shared<signal_t> (signal_t{
543 "windows.front_left.open",// generic_name
550 frequency_clock_t(0.00000f),// frequency
552 false,// force_send_changed
556 decoder_t::decode_boolean,// decoder
559 std::make_pair<bool, int>(false, 0),// multiplex
560 static_cast<sign_t>(0),// signed
561 -1,// bit_sign_position
564 {std::make_shared<signal_t> (signal_t{
565 "windows.front_right.open",// generic_name
572 frequency_clock_t(0.00000f),// frequency
574 false,// force_send_changed
578 decoder_t::decode_boolean,// decoder
581 std::make_pair<bool, int>(false, 0),// multiplex
582 static_cast<sign_t>(0),// signed
583 -1,// bit_sign_position
586 {std::make_shared<signal_t> (signal_t{
587 "windows.rear_left.open",// generic_name
594 frequency_clock_t(0.00000f),// frequency
596 false,// force_send_changed
600 decoder_t::decode_boolean,// decoder
603 std::make_pair<bool, int>(false, 0),// multiplex
604 static_cast<sign_t>(0),// signed
605 -1,// bit_sign_position
608 {std::make_shared<signal_t> (signal_t{
609 "windows.rear_right.open",// generic_name
616 frequency_clock_t(0.00000f),// frequency
618 false,// force_send_changed
622 decoder_t::decode_boolean,// decoder
625 std::make_pair<bool, int>(false, 0),// multiplex
626 static_cast<sign_t>(0),// signed
627 -1,// bit_sign_position
630 } // end signals vector
631 })} // end message_definition entry
632 , {std::make_shared<message_definition_t>(message_definition_t{"j1939",130306,"Wind.Data",8,392,frequency_clock_t(5.00000f),true,
633 { // beginning signals vector
634 {std::make_shared<signal_t> (signal_t{
635 "Wind.Data.Reference",// generic_name
642 frequency_clock_t(0.00000f),// frequency
644 false,// force_send_changed
647 {1,"Magnetic (ground referenced to Magnetic North)"},
648 {3,"True (boat referenced)"},
649 {0,"True (ground referenced to North)"},
650 {4,"True (water referenced)"}
653 decoder_t::decode_state,// decoder
656 std::make_pair<bool, int>(false, 0),// multiplex
657 static_cast<sign_t>(0),// signed
658 -1,// bit_sign_position
661 {std::make_shared<signal_t> (signal_t{
662 "Wind.Data.Reserved",// generic_name
669 frequency_clock_t(0.00000f),// frequency
671 false,// force_send_changed
675 decoder_t::decode_bytes,// decoder
678 std::make_pair<bool, int>(false, 0),// multiplex
679 static_cast<sign_t>(0),// signed
680 -1,// bit_sign_position
683 {std::make_shared<signal_t> (signal_t{
684 "Wind.Data.Sid",// generic_name
691 frequency_clock_t(0.00000f),// frequency
693 false,// force_send_changed
700 std::make_pair<bool, int>(false, 0),// multiplex
701 static_cast<sign_t>(0),// signed
702 -1,// bit_sign_position
705 {std::make_shared<signal_t> (signal_t{
706 "Wind.Data.Wind.Angle",// generic_name
709 0.000100000f,// factor
713 frequency_clock_t(0.00000f),// frequency
715 false,// force_send_changed
722 std::make_pair<bool, int>(false, 0),// multiplex
723 static_cast<sign_t>(0),// signed
724 -1,// bit_sign_position
727 {std::make_shared<signal_t> (signal_t{
728 "Wind.Data.Wind.Speed",// generic_name
735 frequency_clock_t(0.00000f),// frequency
737 false,// force_send_changed
744 std::make_pair<bool, int>(false, 0),// multiplex
745 static_cast<sign_t>(0),// signed
746 -1,// bit_sign_position
749 } // end signals vector
750 })} // end message_definition entry
751 , {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,8,frequency_clock_t(5.00000f),true,
752 { // beginning signals vector
753 {std::make_shared<signal_t> (signal_t{
754 "Eng.Momentary.Overspeed.Enable",// generic_name
761 frequency_clock_t(0.00000f),// frequency
763 false,// force_send_changed
765 {0,"MomentaryEngOverspeedIsDisabled"},
766 {1,"MomentaryEngOverspeedIsEnabled"},
771 decoder_t::decode_state,// decoder
774 std::make_pair<bool, int>(false, 0),// multiplex
775 static_cast<sign_t>(0),// signed
776 -1,// bit_sign_position
779 {std::make_shared<signal_t> (signal_t{
780 "Momentary.Eng.Max.Power.Enable",// generic_name
787 frequency_clock_t(0.00000f),// frequency
789 false,// force_send_changed
792 {1,"mmntarilyRqingMaxPowerAvailable"},
794 {0,"notRqingMaxPowerAvailable"}
797 decoder_t::decode_state,// decoder
800 std::make_pair<bool, int>(false, 0),// multiplex
801 static_cast<sign_t>(0),// signed
802 -1,// bit_sign_position
805 {std::make_shared<signal_t> (signal_t{
806 "Percent.Clutch.Slip",// generic_name
813 frequency_clock_t(0.00000f),// frequency
815 false,// force_send_changed
822 std::make_pair<bool, int>(false, 0),// multiplex
823 static_cast<sign_t>(0),// signed
824 -1,// bit_sign_position
827 {std::make_shared<signal_t> (signal_t{
828 "Progressive.Shift.Disable",// generic_name
835 frequency_clock_t(0.00000f),// frequency
837 false,// force_send_changed
839 {1,"ProgressiveShiftIsDisabled"},
840 {0,"ProgressiveShiftIsNotDisabled"},
845 decoder_t::decode_state,// decoder
848 std::make_pair<bool, int>(false, 0),// multiplex
849 static_cast<sign_t>(0),// signed
850 -1,// bit_sign_position
853 {std::make_shared<signal_t> (signal_t{
854 "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl",// generic_name
861 frequency_clock_t(0.00000f),// frequency
863 false,// force_send_changed
870 std::make_pair<bool, int>(false, 0),// multiplex
871 static_cast<sign_t>(0),// signed
872 -1,// bit_sign_position
875 {std::make_shared<signal_t> (signal_t{
876 "Trans.Driveline.Engaged",// generic_name
883 frequency_clock_t(0.00000f),// frequency
885 false,// force_send_changed
887 {0,"DrivelineDisengaged"},
888 {1,"DrivelineEngaged"},
893 decoder_t::decode_state,// decoder
896 std::make_pair<bool, int>(false, 0),// multiplex
897 static_cast<sign_t>(0),// signed
898 -1,// bit_sign_position
901 {std::make_shared<signal_t> (signal_t{
902 "Trans.Input.Shaft.Speed",// generic_name
909 frequency_clock_t(0.00000f),// frequency
911 false,// force_send_changed
918 std::make_pair<bool, int>(false, 0),// multiplex
919 static_cast<sign_t>(0),// signed
920 -1,// bit_sign_position
923 {std::make_shared<signal_t> (signal_t{
924 "Trans.Output.Shaft.Speed",// generic_name
931 frequency_clock_t(0.00000f),// frequency
933 false,// force_send_changed
940 std::make_pair<bool, int>(false, 0),// multiplex
941 static_cast<sign_t>(0),// signed
942 -1,// bit_sign_position
945 {std::make_shared<signal_t> (signal_t{
946 "Trans.Shift.In.Process",// generic_name
953 frequency_clock_t(0.00000f),// frequency
955 false,// force_send_changed
959 {1,"ShiftInProcess"},
960 {0,"ShiftIsNotInProcess"}
963 decoder_t::decode_state,// decoder
966 std::make_pair<bool, int>(false, 0),// multiplex
967 static_cast<sign_t>(0),// signed
968 -1,// bit_sign_position
971 {std::make_shared<signal_t> (signal_t{
972 "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess",// generic_name
979 frequency_clock_t(0.00000f),// frequency
981 false,// force_send_changed
985 {1,"TransitionIsInProcess"},
986 {0,"TransitionIsNotInProcess"}
989 decoder_t::decode_state,// decoder
992 std::make_pair<bool, int>(false, 0),// multiplex
993 static_cast<sign_t>(0),// signed
994 -1,// bit_sign_position
997 {std::make_shared<signal_t> (signal_t{
998 "Trns.Trque.Converter.Lockup.Engaged",// generic_name
1005 frequency_clock_t(0.00000f),// frequency
1007 false,// force_send_changed
1011 {0,"TorqueConverterLockupDisengaged"},
1012 {1,"TorqueConverterLockupEngaged"}
1015 decoder_t::decode_state,// decoder
1018 std::make_pair<bool, int>(false, 0),// multiplex
1019 static_cast<sign_t>(0),// signed
1020 -1,// bit_sign_position
1023 } // end signals vector
1024 })} // end message_definition entry
1025 , {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,8,frequency_clock_t(5.00000f),true,
1026 { // beginning signals vector
1027 {std::make_shared<signal_t> (signal_t{
1028 "Actl.Eng.Prcnt.Trque.High.Resolution",// generic_name
1035 frequency_clock_t(0.00000f),// frequency
1037 false,// force_send_changed
1042 {8,"1111NotAvailable"}
1045 decoder_t::decode_state,// decoder
1048 std::make_pair<bool, int>(false, 0),// multiplex
1049 static_cast<sign_t>(0),// signed
1050 -1,// bit_sign_position
1053 {std::make_shared<signal_t> (signal_t{
1054 "Actual.Eng.Percent.Torque",// generic_name
1061 frequency_clock_t(0.00000f),// frequency
1063 false,// force_send_changed
1070 std::make_pair<bool, int>(false, 0),// multiplex
1071 static_cast<sign_t>(0),// signed
1072 -1,// bit_sign_position
1075 {std::make_shared<signal_t> (signal_t{
1076 "Drivers.Demand.Eng.Percent.Torque",// generic_name
1083 frequency_clock_t(0.00000f),// frequency
1085 false,// force_send_changed
1092 std::make_pair<bool, int>(false, 0),// multiplex
1093 static_cast<sign_t>(0),// signed
1094 -1,// bit_sign_position
1097 {std::make_shared<signal_t> (signal_t{
1098 "Eng.Demand.Percent.Torque",// generic_name
1105 frequency_clock_t(0.00000f),// frequency
1107 false,// force_send_changed
1114 std::make_pair<bool, int>(false, 0),// multiplex
1115 static_cast<sign_t>(0),// signed
1116 -1,// bit_sign_position
1119 {std::make_shared<signal_t> (signal_t{
1120 "Eng.Speed",// generic_name
1127 frequency_clock_t(0.00000f),// frequency
1129 false,// force_send_changed
1136 std::make_pair<bool, int>(false, 0),// multiplex
1137 static_cast<sign_t>(0),// signed
1138 -1,// bit_sign_position
1141 {std::make_shared<signal_t> (signal_t{
1142 "Eng.Starter.Mode",// generic_name
1149 frequency_clock_t(0.00000f),// frequency
1151 false,// force_send_changed
1155 {15,"notAvailable"},
1157 {2,"starterActiveGearEngaged"},
1158 {1,"starterActiveGearNotEngaged"},
1159 {12,"starterInhibitedReasonUnknown"},
1160 {3,"strtFnshdStrtrNtActvAftrHvngBnA"},
1161 {6,"strtrInhbtdDTDrvlnEnggdOthrTrns"},
1162 {5,"strtrInhbtdDTEngNtReadyForStart"},
1163 {7,"strtrInhbtdDToActiveImmobilizer"},
1164 {4,"strtrInhbtdDToEngAlreadyRunning"},
1165 {8,"strtrInhbtdDueToStarterOvertemp"}
1168 decoder_t::decode_state,// decoder
1171 std::make_pair<bool, int>(false, 0),// multiplex
1172 static_cast<sign_t>(0),// signed
1173 -1,// bit_sign_position
1176 {std::make_shared<signal_t> (signal_t{
1177 "Eng.Torque.Mode",// generic_name
1184 frequency_clock_t(0.00000f),// frequency
1186 false,// force_send_changed
1190 {1,"Accelerator pedal/operator selec"},
1191 {10,"Braking system"},
1192 {2,"Cruise control"},
1193 {9,"High speed governor"},
1194 {0,"Low idle governor/no request (de"},
1195 {15,"Not available"},
1197 {11,"Remote accelerator"},
1198 {4,"Road speed governor"},
1199 {8,"Torque limiting"},
1200 {6,"Transmission control"}
1203 decoder_t::decode_state,// decoder
1206 std::make_pair<bool, int>(false, 0),// multiplex
1207 static_cast<sign_t>(0),// signed
1208 -1,// bit_sign_position
1211 {std::make_shared<signal_t> (signal_t{
1212 "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl",// generic_name
1219 frequency_clock_t(0.00000f),// frequency
1221 false,// force_send_changed
1228 std::make_pair<bool, int>(false, 0),// multiplex
1229 static_cast<sign_t>(0),// signed
1230 -1,// bit_sign_position
1233 } // end signals vector
1234 })} // end message_definition entry
1235 }, // end message_definition vector
1236 { // beginning diagnostic_messages_ vector
1237 {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1244 decoder_t::decode_obd2_response,
1249 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1251 "engine.coolant.temperature",
1256 decoder_t::decode_obd2_response,
1261 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1268 decoder_t::decode_obd2_response,
1273 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1275 "intake.manifold.pressure",
1280 decoder_t::decode_obd2_response,
1285 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1292 decoder_t::decode_obd2_response,
1297 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1304 decoder_t::decode_obd2_response,
1309 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1311 "intake.air.temperature",
1316 decoder_t::decode_obd2_response,
1321 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1328 decoder_t::decode_obd2_response,
1333 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1335 "throttle.position",
1340 decoder_t::decode_obd2_response,
1345 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1352 decoder_t::decode_obd2_response,
1357 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1364 decoder_t::decode_obd2_response,
1369 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1376 decoder_t::decode_obd2_response,
1381 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1383 "barometric.pressure",
1388 decoder_t::decode_obd2_response,
1393 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1395 "ambient.air.temperature",
1400 decoder_t::decode_obd2_response,
1405 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1407 "commanded.throttle.position",
1412 decoder_t::decode_obd2_response,
1417 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1419 "ethanol.fuel.percentage",
1424 decoder_t::decode_obd2_response,
1429 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1431 "accelerator.pedal.position",
1436 decoder_t::decode_obd2_response,
1441 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1443 "hybrid.battery-pack.remaining.life",
1448 decoder_t::decode_obd2_response,
1453 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1455 "engine.oil.temperature",
1460 decoder_t::decode_obd2_response,
1465 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1472 decoder_t::decode_obd2_response,
1477 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
1484 decoder_t::decode_obd2_response,
1490 } // end diagnostic_messages_ vector
1491 }); // end message_set entry
1493 CTLP_ONLOAD(plugin, handle) {
1494 afb_api_t api = (afb_api_t) plugin->api;
1495 CtlConfigT* CtlConfig = (CtlConfigT*) afb_api_get_userdata(api);
1496 application_t* app = (application_t*) getExternalData(CtlConfig);
1498 return app->add_message_set(cms);