summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/agl-vcar/agl-vcar-signals.cpp673
-rw-r--r--examples/agl-vcar/application-generated.cpp1138
-rw-r--r--examples/agl-vcar/signals.json1591
3 files changed, 1735 insertions, 1667 deletions
diff --git a/examples/agl-vcar/agl-vcar-signals.cpp b/examples/agl-vcar/agl-vcar-signals.cpp
index b38f168c..5d7629d1 100644
--- a/examples/agl-vcar/agl-vcar-signals.cpp
+++ b/examples/agl-vcar/agl-vcar-signals.cpp
@@ -569,6 +569,76 @@ std::shared_ptr<message_set_t> cms = std::make_shared<message_set_t>(message_set
})}
} // end signals vector
})} // end message_definition entry
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3DA,"",8,2,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
+ {std::make_shared<signal_t> (signal_t{
+ "fd.engine.speed",// generic_name
+ 16,// bit_position
+ 16,// bit_size
+ 0.250000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "fd.fuel.level.low",// generic_name
+ 55,// bit_position
+ 1,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ decoder_t::decode_boolean,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "fd.fuel.level",// generic_name
+ 8,// bit_position
+ 8,// bit_size
+ 0.392157f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })}
+ } // end signals vector
+ })} // end message_definition entry
, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,0,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
@@ -849,6 +919,609 @@ std::shared_ptr<message_set_t> cms = std::make_shared<message_set_t>(message_set
})}
} // end signals vector
})} // end message_definition entry
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",130306,"Wind.Data",8,8,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
+ {std::make_shared<signal_t> (signal_t{
+ "Wind.Data.Reference",// generic_name
+ 40,// bit_position
+ 3,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {2,"Apparent"},
+ {1,"Magnetic (ground referenced to Magnetic North)"},
+ {3,"True (boat referenced)"},
+ {0,"True (ground referenced to North)"},
+ {4,"True (water referenced)"}
+ },// states
+ false,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Wind.Data.Reserved",// generic_name
+ 43,// bit_position
+ 21,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ decoder_t::decode_bytes,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Wind.Data.Sid",// generic_name
+ 0,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Wind.Data.Wind.Angle",// generic_name
+ 24,// bit_position
+ 16,// bit_size
+ 0.000100000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "rad"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Wind.Data.Wind.Speed",// generic_name
+ 8,// bit_position
+ 16,// bit_size
+ 0.0100000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "m/s"// unit
+ })}
+ } // end signals vector
+ })} // end message_definition entry
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,8,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
+ {std::make_shared<signal_t> (signal_t{
+ "Eng.Momentary.Overspeed.Enable",// generic_name
+ 32,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {0,"MomentaryEngOverspeedIsDisabled"},
+ {1,"MomentaryEngOverspeedIsEnabled"},
+ {2,"Reserved"},
+ {3,"TakeNoAction"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Momentary.Eng.Max.Power.Enable",// generic_name
+ 36,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {2,"fault"},
+ {1,"mmntarilyRqingMaxPowerAvailable"},
+ {3,"notAvailable"},
+ {0,"notRqingMaxPowerAvailable"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Percent.Clutch.Slip",// generic_name
+ 24,// bit_position
+ 8,// bit_size
+ 0.400000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "%"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Progressive.Shift.Disable",// generic_name
+ 34,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {1,"ProgressiveShiftIsDisabled"},
+ {0,"ProgressiveShiftIsNotDisabled"},
+ {2,"Reserved"},
+ {3,"TakeNoAction"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl",// generic_name
+ 56,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trans.Driveline.Engaged",// generic_name
+ 0,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {0,"DrivelineDisengaged"},
+ {1,"DrivelineEngaged"},
+ {2,"Error"},
+ {3,"NotAvailable"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trans.Input.Shaft.Speed",// generic_name
+ 40,// bit_position
+ 16,// bit_size
+ 0.125000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "rpm"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trans.Output.Shaft.Speed",// generic_name
+ 8,// bit_position
+ 16,// bit_size
+ 0.125000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ true,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "rpm"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trans.Shift.In.Process",// generic_name
+ 4,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {2,"Error"},
+ {3,"NotAvailable"},
+ {1,"ShiftInProcess"},
+ {0,"ShiftIsNotInProcess"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess",// generic_name
+ 6,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {2,"Error"},
+ {3,"NotAvailable"},
+ {1,"TransitionIsInProcess"},
+ {0,"TransitionIsNotInProcess"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Trns.Trque.Converter.Lockup.Engaged",// generic_name
+ 2,// bit_position
+ 2,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {2,"Error"},
+ {3,"NotAvailable"},
+ {0,"TorqueConverterLockupDisengaged"},
+ {1,"TorqueConverterLockupEngaged"}
+ },// states
+ true,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })}
+ } // end signals vector
+ })} // end message_definition entry
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,8,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
+ {std::make_shared<signal_t> (signal_t{
+ "Actl.Eng.Prcnt.Trque.High.Resolution",// generic_name
+ 4,// bit_position
+ 4,// bit_size
+ 0.125000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {0,"0000"},
+ {1,"0125"},
+ {7,"0875"},
+ {8,"1111NotAvailable"}
+ },// states
+ false,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "%"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Actual.Eng.Percent.Torque",// generic_name
+ 16,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ -125.000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "%"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Drivers.Demand.Eng.Percent.Torque",// generic_name
+ 8,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ -125.000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "%"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Eng.Demand.Percent.Torque",// generic_name
+ 56,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ -125.000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "%"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Eng.Speed",// generic_name
+ 24,// bit_position
+ 16,// bit_size
+ 0.125000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ "rpm"// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Eng.Starter.Mode",// generic_name
+ 48,// bit_position
+ 4,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {9,"1011Reserved"},
+ {14,"error"},
+ {15,"notAvailable"},
+ {0,"startNotRqed"},
+ {2,"starterActiveGearEngaged"},
+ {1,"starterActiveGearNotEngaged"},
+ {12,"starterInhibitedReasonUnknown"},
+ {3,"strtFnshdStrtrNtActvAftrHvngBnA"},
+ {6,"strtrInhbtdDTDrvlnEnggdOthrTrns"},
+ {5,"strtrInhbtdDTEngNtReadyForStart"},
+ {7,"strtrInhbtdDToActiveImmobilizer"},
+ {4,"strtrInhbtdDToEngAlreadyRunning"},
+ {8,"strtrInhbtdDueToStarterOvertemp"}
+ },// states
+ false,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Eng.Torque.Mode",// generic_name
+ 0,// bit_position
+ 4,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ {7,"ABS control"},
+ {5,"ASR control"},
+ {1,"Accelerator pedal/operator selec"},
+ {10,"Braking system"},
+ {2,"Cruise control"},
+ {9,"High speed governor"},
+ {0,"Low idle governor/no request (de"},
+ {15,"Not available"},
+ {3,"PTO governor"},
+ {11,"Remote accelerator"},
+ {4,"Road speed governor"},
+ {8,"Torque limiting"},
+ {6,"Transmission control"}
+ },// states
+ false,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {std::make_shared<signal_t> (signal_t{
+ "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl",// generic_name
+ 40,// bit_position
+ 8,// bit_size
+ 1.00000f,// factor
+ 0.00000f,// offset
+ 0,// min_value
+ 0,// max_value
+ frequency_clock_t(0.00000f),// frequency
+ true,// send_same
+ false,// force_send_changed
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })}
+ } // end signals vector
+ })} // end message_definition entry
}, // end message_definition vector
{ // beginning diagnostic_messages_ vector
{std::make_shared<diagnostic_message_t>(diagnostic_message_t{
diff --git a/examples/agl-vcar/application-generated.cpp b/examples/agl-vcar/application-generated.cpp
deleted file mode 100644
index 966755ef..00000000
--- a/examples/agl-vcar/application-generated.cpp
+++ /dev/null
@@ -1,1138 +0,0 @@
-#include "application.hpp"
-#include "../can/can-decoder.hpp"
-#include "../can/can-encoder.hpp"
-
-application_t::application_t()
- : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}}
- , message_set_{
- {std::make_shared<message_set_t>(message_set_t{0,"AGL Virtual Car",
- { // beginning message_definition_ vector
- {std::make_shared<message_definition_t>(message_definition_t{"ls",0x21,"",8,2,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.cancel",// generic_name
- 52,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.distance",// generic_name
- 55,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.enable",// generic_name
- 48,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.limit",// generic_name
- 54,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.resume",// generic_name
- 49,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.cruise.set",// generic_name
- 51,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.horn",// generic_name
- 56,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.info",// generic_name
- 38,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.lane_departure_warning",// generic_name
- 63,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.mode",// generic_name
- 34,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.next",// generic_name
- 36,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.phone.call",// generic_name
- 47,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.phone.hangup",// generic_name
- 46,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.previous",// generic_name
- 32,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.voice",// generic_name
- 45,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.volume.down",// generic_name
- 35,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.volume.mute",// generic_name
- 39,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "steering_wheel.volume.up",// generic_name
- 33,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"ls",0x30,"",8,4,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "hvac.fan.speed",// generic_name
- 32,// bit_position
- 8,// bit_size
- 23.5294f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "hvac.temperature.left",// generic_name
- 0,// bit_position
- 8,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "hvac.temperature.right",// generic_name
- 8,// bit_position
- 8,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "hvac.temperature.average",// generic_name
- 16,// bit_position
- 8,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,128,true,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "engine.speed",// generic_name
- 16,// bit_position
- 16,// bit_size
- 0.250000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "fuel.level.low",// generic_name
- 55,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "fuel.level",// generic_name
- 8,// bit_position
- 8,// bit_size
- 0.392157f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,0,true,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "vehicle.average.speed",// generic_name
- 0,// bit_position
- 15,// bit_size
- 0.0156250f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- false,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,0,true,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "engine.oil.temp",// generic_name
- 16,// bit_position
- 8,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- nullptr,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "engine.oil.temp.high",// generic_name
- 7,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,0,true,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "doors.boot.open",// generic_name
- 47,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "doors.front_left.open",// generic_name
- 43,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "doors.front_right.open",// generic_name
- 44,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "doors.rear_left.open",// generic_name
- 46,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "doors.rear_right.open",// generic_name
- 45,// bit_position
- 4,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,0,true,frequency_clock_t(5.00000f),true,
- { // beginning signals vector
- {std::make_shared<signal_t> (signal_t{
- "windows.front_left.open",// generic_name
- 43,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "windows.front_right.open",// generic_name
- 44,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "windows.rear_left.open",// generic_name
- 46,// bit_position
- 1,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })},
- {std::make_shared<signal_t> (signal_t{
- "windows.rear_right.open",// generic_name
- 45,// bit_position
- 4,// bit_size
- 1.00000f,// factor
- 0.00000f,// offset
- 0,// min_value
- 0,// max_value
- frequency_clock_t(0.00000f),// frequency
- true,// send_same
- false,// force_send_changed
- {
- },// states
- true,// writable
- decoder_t::decode_boolean,// decoder
- nullptr,// encoder
- false,// received
- std::make_pair<bool, int>(false, 0),// multiplex
- false,// is_big_endian
- false,// is_signed
- ""// unit
- })}
- } // end signals vector
- })} // end message_definition entry
-
- }, // end message_definition vector
- { // beginning diagnostic_messages_ vector
- {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 4,
- "engine.load",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 5,
- "engine.coolant.temperature",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 10,
- "fuel.pressure",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 11,
- "intake.manifold.pressure",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 12,
- "engine.speed",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 13,
- "vehicle.speed",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 15,
- "intake.air.temperature",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 16,
- "mass.airflow",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 17,
- "throttle.position",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 31,
- "running.time",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 45,
- "EGR.error",
- 0,
- 0,
- UNIT::INVALID,
- 0.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 47,
- "fuel.level",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 51,
- "barometric.pressure",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 70,
- "ambient.air.temperature",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 76,
- "commanded.throttle.position",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 82,
- "ethanol.fuel.percentage",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 90,
- "accelerator.pedal.position",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 91,
- "hybrid.battery-pack.remaining.life",
- 0,
- 0,
- UNIT::INVALID,
- 5.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 92,
- "engine.oil.temperature",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 94,
- "engine.fuel.rate",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 99,
- "engine.torque",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::decode_obd2_response,
- nullptr,
- true,
- false
- })}
-
- } // end diagnostic_messages_ vector
- })} // end message_set entry
- } // end message_set vector
-{
- for(std::shared_ptr<message_set_t> cms: message_set_)
- {
- std::vector<std::shared_ptr<message_definition_t>> messages_definition = cms->get_messages_definition();
- for(std::shared_ptr<message_definition_t> cmd : messages_definition)
- {
- cmd->set_parent(cms);
- std::vector<std::shared_ptr<signal_t>> signals = cmd->get_signals();
- for(std::shared_ptr<signal_t> sig: signals)
- {
- sig->set_parent(cmd);
- }
- }
-
- std::vector<std::shared_ptr<diagnostic_message_t>> diagnostic_messages = cms->get_diagnostic_messages();
- for(std::shared_ptr<diagnostic_message_t> dm : diagnostic_messages)
- {
- dm->set_parent(cms);
- }
- }
- }
-
-const std::string application_t::get_diagnostic_bus() const
-{
- return "hs";
-}
-
-
diff --git a/examples/agl-vcar/signals.json b/examples/agl-vcar/signals.json
index c1542eba..f3ca23d5 100644
--- a/examples/agl-vcar/signals.json
+++ b/examples/agl-vcar/signals.json
@@ -1,530 +1,1063 @@
-{ "name": "AGL Virtual Car",
- "version": "2.0",
- "extra_sources": [],
- "initializers": [],
- "loopers": [],
- "buses": {},
- "commands": [],
- "messages": {
- "0x620": {
- "bus": "hs",
- "is_fd" : false,
- "is_j1939" : false,
- "signals": {
- "doors.driver.open": {
- "generic_name": "doors.front_left.open",
- "bit_position": 43,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "doors.passenger.open": {
- "generic_name": "doors.front_right.open",
- "bit_position": 44,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "doors.rearleft.open": {
- "generic_name": "doors.rear_left.open",
- "bit_position": 46,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "doors.rearright.open": {
- "generic_name": "doors.rear_right.open",
- "bit_position": 45,
- "bit_size": 4,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "doors.coffer.open": {
- "generic_name": "doors.boot.open",
- "bit_position": 47,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"}
- }
- },
- "0x799": {
- "bus": "hs",
- "is_fd" : false,
- "is_j1939" : false,
- "signals": {
- "windows.driver.open": {
- "generic_name": "windows.front_left.open",
- "bit_position": 43,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "windows.passenger.open": {
- "generic_name": "windows.front_right.open",
- "bit_position": 44,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "windows.rearleft.open": {
- "generic_name": "windows.rear_left.open",
- "bit_position": 46,
- "bit_size": 1,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"},
- "windows.rearright.open": {
- "generic_name": "windows.rear_right.open",
- "bit_position": 45,
- "bit_size": 4,
- "factor": 1.0,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"}
- }
- },
- "0x3D9": {
- "bus": "hs",
- "is_fd" : false,
- "is_extended": false,
- "is_j1939" : false,
- "signals": {
- "PT_FuelLevelPct": {
- "generic_name": "fuel.level",
- "bit_position": 8,
- "bit_size": 8,
- "factor": 0.392157,
- "offset": 0,
- "writable": true
- },
- "PT_EngineSpeed": {
- "generic_name": "engine.speed",
- "bit_position": 16,
- "bit_size": 16,
- "factor": 0.25,
- "offset": 0,
- "writable": true
- },
- "PT_FuelLevelLow": {
- "generic_name": "fuel.level.low",
- "bit_position": 55,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"
- }
- }
- },
- "0x4D1": {
- "bus": "hs",
- "is_fd" : false,
- "is_extended": false,
- "is_j1939" : false,
- "signals": {
- "PT_EngineOilTempHigh": {
- "generic_name": "engine.oil.temp.high",
- "bit_position": 7,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "writable": true,
- "decoder": "decoder_t::decode_boolean"
- },
- "PT_EngineOilTemp": {
- "generic_name": "engine.oil.temp",
- "bit_position": 16,
- "bit_size": 8,
- "factor": 1,
- "offset": 0,
- "writable": true
- }
- }
- },
- "0x3E9": {
- "bus": "hs",
- "is_fd" : false,
- "is_extended": false,
- "is_j1939" : false,
- "signals": {
- "PT_VehicleAvgSpeed": {
- "generic_name": "vehicle.average.speed",
- "bit_position": 0,
- "bit_size": 15,
- "factor": 0.015625,
- "offset": 0,
- "writable": false
- }
- }
- },
- "0x30": {
- "bus": "ls",
- "is_fd" : false,
- "is_extended": true,
- "is_j1939" : false,
- "signals": {
- "LeftTemperature": {
- "generic_name": "hvac.temperature.left",
- "bit_position": 0,
- "bit_size": 8,
- "factor": 1,
- "offset": 0,
- "writable": true
- },
- "RightTemperature": {
- "generic_name": "hvac.temperature.right",
- "bit_position": 8,
- "bit_size": 8,
- "factor": 1,
- "offset": 0,
- "writable": true
- },
- "Temperature": {
- "generic_name": "hvac.temperature.average",
- "bit_position": 16,
- "bit_size": 8,
- "factor": 1,
- "offset": 0,
- "writable": true
- },
- "FanSpeed": {
- "generic_name": "hvac.fan.speed",
- "bit_position": 32,
- "bit_size": 8,
- "factor": 23.529411765,
- "offset": 0,
- "writable": true
- }
- }
- },
- "0x21": {
- "bus": "ls",
- "is_fd" : false,
- "is_extended": false,
- "is_j1939" : false,
- "length" : 8,
- "signals": {
- "SW_Previous": {
- "generic_name": "steering_wheel.previous",
- "bit_position": 32,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_VolumeUp": {
- "generic_name": "steering_wheel.volume.up",
- "bit_position": 33,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_Mode": {
- "generic_name": "steering_wheel.mode",
- "bit_position": 34,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_VolumeDown": {
- "generic_name": "steering_wheel.volume.down",
- "bit_position": 35,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_Next": {
- "generic_name": "steering_wheel.next",
- "bit_position": 36,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_Info": {
- "generic_name": "steering_wheel.info",
- "bit_position": 38,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_VolumeMute": {
- "generic_name": "steering_wheel.volume.mute",
- "bit_position": 39,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_Voice": {
- "generic_name": "steering_wheel.voice",
- "bit_position": 45,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_PhoneHangup": {
- "generic_name": "steering_wheel.phone.hangup",
- "bit_position": 46,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_PhoneCall": {
- "generic_name": "steering_wheel.phone.call",
- "bit_position": 47,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseEnable": {
- "generic_name": "steering_wheel.cruise.enable",
- "bit_position": 48,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseResume": {
- "generic_name": "steering_wheel.cruise.resume",
- "bit_position": 49,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseSet": {
- "generic_name": "steering_wheel.cruise.set",
- "bit_position": 51,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseCancel": {
- "generic_name": "steering_wheel.cruise.cancel",
- "bit_position": 52,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseLimit": {
- "generic_name": "steering_wheel.cruise.limit",
- "bit_position": 54,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_CruiseDistance": {
- "generic_name": "steering_wheel.cruise.distance",
- "bit_position": 55,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_Horn": {
- "generic_name": "steering_wheel.horn",
- "bit_position": 56,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- },
- "SW_LaneDepartureWarning": {
- "generic_name": "steering_wheel.lane_departure_warning",
- "bit_position": 63,
- "bit_size": 1,
- "factor": 1,
- "offset": 0,
- "decoder": "decoder_t::decode_boolean",
- "writable": false
- }
- }
- }
-},
-"diagnostic_messages": [
- {
- "bus": "hs",
- "pid": 4,
- "name": "engine.load",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 5,
- "name": "engine.coolant.temperature",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 10,
- "name": "fuel.pressure",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 11,
- "name": "intake.manifold.pressure",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 12,
- "name": "engine.speed",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 13,
- "name": "vehicle.speed",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 15,
- "name": "intake.air.temperature",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 16,
- "name": "mass.airflow",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 17,
- "name": "throttle.position",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 31,
- "name": "running.time",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 45,
- "name": "EGR.error",
- "frequency": 0,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 47,
- "name": "fuel.level",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 51,
- "name": "barometric.pressure",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 70,
- "name": "ambient.air.temperature",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 76,
- "name": "commanded.throttle.position",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 82,
- "name": "ethanol.fuel.percentage",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 90,
- "name": "accelerator.pedal.position",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 91,
- "name": "hybrid.battery-pack.remaining.life",
- "frequency": 5,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 92,
- "name": "engine.oil.temperature",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 94,
- "name": "engine.fuel.rate",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- },
- {
- "bus": "hs",
- "pid": 99,
- "name": "engine.torque",
- "frequency": 1,
- "decoder": "decoder_t::decode_obd2_response"
- }
- ]
+{
+ "name": "AGL Virtual Car",
+ "version": "2.0",
+ "extra_sources": [],
+ "initializers": [],
+ "loopers": [],
+ "buses": {},
+ "commands": [],
+ "messages": {
+ "0x620": {
+ "bus": "hs",
+ "is_fd": false,
+ "is_j1939": false,
+ "signals": {
+ "doors.driver.open": {
+ "generic_name": "doors.front_left.open",
+ "bit_position": 43,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "doors.passenger.open": {
+ "generic_name": "doors.front_right.open",
+ "bit_position": 44,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "doors.rearleft.open": {
+ "generic_name": "doors.rear_left.open",
+ "bit_position": 46,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "doors.rearright.open": {
+ "generic_name": "doors.rear_right.open",
+ "bit_position": 45,
+ "bit_size": 4,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "doors.coffer.open": {
+ "generic_name": "doors.boot.open",
+ "bit_position": 47,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ }
+ }
+ },
+ "0x799": {
+ "bus": "hs",
+ "is_fd": false,
+ "is_j1939": false,
+ "signals": {
+ "windows.driver.open": {
+ "generic_name": "windows.front_left.open",
+ "bit_position": 43,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "windows.passenger.open": {
+ "generic_name": "windows.front_right.open",
+ "bit_position": 44,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "windows.rearleft.open": {
+ "generic_name": "windows.rear_left.open",
+ "bit_position": 46,
+ "bit_size": 1,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "windows.rearright.open": {
+ "generic_name": "windows.rear_right.open",
+ "bit_position": 45,
+ "bit_size": 4,
+ "factor": 1.0,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ }
+ }
+ },
+ "0x3D9": {
+ "bus": "hs",
+ "is_fd": true,
+ "is_extended": false,
+ "is_j1939": false,
+ "signals": {
+ "PT_FuelLevelPct": {
+ "generic_name": "fuel.level",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 0.392157,
+ "offset": 0,
+ "writable": true
+ },
+ "PT_EngineSpeed": {
+ "generic_name": "engine.speed",
+ "bit_position": 16,
+ "bit_size": 16,
+ "factor": 0.25,
+ "offset": 0,
+ "writable": true
+ },
+ "PT_FuelLevelLow": {
+ "generic_name": "fuel.level.low",
+ "bit_position": 55,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ }
+ }
+ },
+ "0x3DA": {
+ "bus": "hs",
+ "is_fd": true,
+ "is_extended": false,
+ "is_j1939": false,
+ "signals": {
+ "FD_PT_FuelLevelPct": {
+ "generic_name": "fd.fuel.level",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 0.392157,
+ "offset": 0,
+ "writable": true
+ },
+ "FD_PT_EngineSpeed": {
+ "generic_name": "fd.engine.speed",
+ "bit_position": 16,
+ "bit_size": 16,
+ "factor": 0.25,
+ "offset": 0,
+ "writable": true
+ },
+ "FD_PT_FuelLevelLow": {
+ "generic_name": "fd.fuel.level.low",
+ "bit_position": 55,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ }
+ }
+ },
+ "0x4D1": {
+ "bus": "hs",
+ "is_fd": false,
+ "is_extended": false,
+ "is_j1939": false,
+ "signals": {
+ "PT_EngineOilTempHigh": {
+ "generic_name": "engine.oil.temp.high",
+ "bit_position": 7,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "writable": true,
+ "decoder": "decoder_t::decode_boolean"
+ },
+ "PT_EngineOilTemp": {
+ "generic_name": "engine.oil.temp",
+ "bit_position": 16,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "writable": true
+ }
+ }
+ },
+ "0x3E9": {
+ "bus": "hs",
+ "is_fd": false,
+ "is_extended": false,
+ "is_j1939": false,
+ "signals": {
+ "PT_VehicleAvgSpeed": {
+ "generic_name": "vehicle.average.speed",
+ "bit_position": 0,
+ "bit_size": 15,
+ "factor": 0.015625,
+ "offset": 0,
+ "writable": false
+ }
+ }
+ },
+ "0x30": {
+ "bus": "ls",
+ "is_fd": false,
+ "is_extended": true,
+ "is_j1939": false,
+ "signals": {
+ "LeftTemperature": {
+ "generic_name": "hvac.temperature.left",
+ "bit_position": 0,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "writable": true
+ },
+ "RightTemperature": {
+ "generic_name": "hvac.temperature.right",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "writable": true
+ },
+ "Temperature": {
+ "generic_name": "hvac.temperature.average",
+ "bit_position": 16,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "writable": true
+ },
+ "FanSpeed": {
+ "generic_name": "hvac.fan.speed",
+ "bit_position": 32,
+ "bit_size": 8,
+ "factor": 23.529411765,
+ "offset": 0,
+ "writable": true
+ }
+ }
+ },
+ "0x21": {
+ "bus": "ls",
+ "is_fd": false,
+ "is_extended": false,
+ "is_j1939": false,
+ "length": 8,
+ "signals": {
+ "SW_Previous": {
+ "generic_name": "steering_wheel.previous",
+ "bit_position": 32,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_VolumeUp": {
+ "generic_name": "steering_wheel.volume.up",
+ "bit_position": 33,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_Mode": {
+ "generic_name": "steering_wheel.mode",
+ "bit_position": 34,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_VolumeDown": {
+ "generic_name": "steering_wheel.volume.down",
+ "bit_position": 35,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_Next": {
+ "generic_name": "steering_wheel.next",
+ "bit_position": 36,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_Info": {
+ "generic_name": "steering_wheel.info",
+ "bit_position": 38,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_VolumeMute": {
+ "generic_name": "steering_wheel.volume.mute",
+ "bit_position": 39,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_Voice": {
+ "generic_name": "steering_wheel.voice",
+ "bit_position": 45,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_PhoneHangup": {
+ "generic_name": "steering_wheel.phone.hangup",
+ "bit_position": 46,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_PhoneCall": {
+ "generic_name": "steering_wheel.phone.call",
+ "bit_position": 47,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseEnable": {
+ "generic_name": "steering_wheel.cruise.enable",
+ "bit_position": 48,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseResume": {
+ "generic_name": "steering_wheel.cruise.resume",
+ "bit_position": 49,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseSet": {
+ "generic_name": "steering_wheel.cruise.set",
+ "bit_position": 51,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseCancel": {
+ "generic_name": "steering_wheel.cruise.cancel",
+ "bit_position": 52,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseLimit": {
+ "generic_name": "steering_wheel.cruise.limit",
+ "bit_position": 54,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_CruiseDistance": {
+ "generic_name": "steering_wheel.cruise.distance",
+ "bit_position": 55,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_Horn": {
+ "generic_name": "steering_wheel.horn",
+ "bit_position": 56,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ },
+ "SW_LaneDepartureWarning": {
+ "generic_name": "steering_wheel.lane_departure_warning",
+ "bit_position": 63,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::decode_boolean",
+ "writable": false
+ }
+ }
+ },
+ "61442": {
+ "comment": "Electronic Transmission Controller 1",
+ "length": 8,
+ "name": "ETC1",
+ "bus": "j1939",
+ "is_fd": false,
+ "is_extended": false,
+ "is_j1939": true,
+ "signals": {
+ "Trns.Trque.Converter.Lockup.Engaged": {
+ "generic_name": "Trns.Trque.Converter.Lockup.Engaged",
+ "bit_position": 2,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "State signal which indicates whether the torque converter lockup is engaged.",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "TorqueConverterLockupDisengaged": [
+ 0
+ ],
+ "TorqueConverterLockupEngaged": [
+ 1
+ ],
+ "Error": [
+ 2
+ ],
+ "NotAvailable": [
+ 3
+ ]
+ }
+ },
+ "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess": {
+ "generic_name": "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess",
+ "bit_position": 6,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "State signal indicating whether or not the transmission torque converter lock up clutch is transitioning between being",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "TransitionIsNotInProcess": [
+ 0
+ ],
+ "TransitionIsInProcess": [
+ 1
+ ],
+ "Error": [
+ 2
+ ],
+ "NotAvailable": [
+ 3
+ ]
+ }
+ },
+ "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl": {
+ "generic_name": "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl",
+ "bit_position": 56,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "comment": "The source address of the SAE J1939 device currently controlling the transmission.",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true
+ },
+ "Momentary.Eng.Max.Power.Enable": {
+ "generic_name": "Momentary.Eng.Max.Power.Enable",
+ "bit_position": 36,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Momentarily Requesting highest torque map from the engine control",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "notRqingMaxPowerAvailable": [
+ 0
+ ],
+ "mmntarilyRqingMaxPowerAvailable": [
+ 1
+ ],
+ "fault": [
+ 2
+ ],
+ "notAvailable": [
+ 3
+ ]
+ }
+ },
+ "Trans.Input.Shaft.Speed": {
+ "generic_name": "Trans.Input.Shaft.Speed",
+ "bit_position": 40,
+ "bit_size": 16,
+ "factor": 0.125,
+ "offset": 0,
+ "comment": "Rotational velocity of the primary shaft transferring power into the transmission.",
+ "unit": "rpm",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true
+ },
+ "Progressive.Shift.Disable": {
+ "generic_name": "Progressive.Shift.Disable",
+ "bit_position": 34,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Command signal used to indicate that progressive shifting by the engine should be disallowed.",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "ProgressiveShiftIsNotDisabled": [
+ 0
+ ],
+ "ProgressiveShiftIsDisabled": [
+ 1
+ ],
+ "Reserved": [
+ 2
+ ],
+ "TakeNoAction": [
+ 3
+ ]
+ }
+ },
+ "Eng.Momentary.Overspeed.Enable": {
+ "generic_name": "Eng.Momentary.Overspeed.Enable",
+ "bit_position": 32,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Command signal used to indicate that the engine speed may be boosted up to the maximum engine overspeed value to",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "MomentaryEngOverspeedIsDisabled": [
+ 0
+ ],
+ "MomentaryEngOverspeedIsEnabled": [
+ 1
+ ],
+ "Reserved": [
+ 2
+ ],
+ "TakeNoAction": [
+ 3
+ ]
+ }
+ },
+ "Percent.Clutch.Slip": {
+ "generic_name": "Percent.Clutch.Slip",
+ "bit_position": 24,
+ "bit_size": 8,
+ "factor": 0.4,
+ "offset": 0,
+ "comment": "Parameter which represents the ratio of input shaft speed to current engine speed (in percent).",
+ "unit": "%",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true
+ },
+ "Trans.Output.Shaft.Speed": {
+ "generic_name": "Trans.Output.Shaft.Speed",
+ "bit_position": 8,
+ "bit_size": 16,
+ "factor": 0.125,
+ "offset": 0,
+ "comment": "Calculated speed of the transmission output shaft.",
+ "unit": "rpm",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true
+ },
+ "Trans.Shift.In.Process": {
+ "generic_name": "Trans.Shift.In.Process",
+ "bit_position": 4,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Indicates that the transmission is in process of shifting from the current gear to the selected gear.",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "ShiftIsNotInProcess": [
+ 0
+ ],
+ "ShiftInProcess": [
+ 1
+ ],
+ "Error": [
+ 2
+ ],
+ "NotAvailable": [
+ 3
+ ]
+ }
+ },
+ "Trans.Driveline.Engaged": {
+ "generic_name": "Trans.Driveline.Engaged",
+ "bit_position": 0,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Driveline engaged indicates the transmission controlled portion of the driveline is engaged sufficiently to allow a transfer",
+ "is_big_endian": false,
+ "sign": 0,
+ "writable": true,
+ "states": {
+ "DrivelineDisengaged": [
+ 0
+ ],
+ "DrivelineEngaged": [
+ 1
+ ],
+ "Error": [
+ 2
+ ],
+ "NotAvailable": [
+ 3
+ ]
+ }
+ }
+ }
+ },
+ "61444": {
+ "comment": "Electronic Engine Controller 1",
+ "length": 8,
+ "name": "EEC1",
+ "bus": "j1939",
+ "is_fd": false,
+ "is_j1939": true,
+ "signals": {
+ "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl": {
+ "generic_name": "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl",
+ "bit_position": 40,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": 0,
+ "comment": "The source address of the SAE J1939 device currently controlling the engine.",
+ "is_big_endian": false,
+ "sign": 0
+ },
+ "Actl.Eng.Prcnt.Trque.High.Resolution": {
+ "generic_name": "Actl.Eng.Prcnt.Trque.High.Resolution",
+ "bit_position": 4,
+ "bit_size": 4,
+ "factor": 0.125,
+ "offset": 0,
+ "comment": "This parameter displays an additional torque in percent of the reference engine torque.",
+ "unit": "%",
+ "is_big_endian": false,
+ "sign": 0,
+ "states": {
+ "0000": [
+ 0
+ ],
+ "0125": [
+ 1
+ ],
+ "0875": [
+ 7
+ ],
+ "1111NotAvailable": [
+ 8
+ ]
+ }
+ },
+ "Eng.Demand.Percent.Torque": {
+ "generic_name": "Eng.Demand.Percent.Torque",
+ "bit_position": 56,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": -125,
+ "comment": "The requested torque output of the engine by all dynamic internal inputs, including smoke control, noise control and low",
+ "unit": "%",
+ "is_big_endian": false,
+ "sign": 0
+ },
+ "Eng.Starter.Mode": {
+ "generic_name": "Eng.Starter.Mode",
+ "bit_position": 48,
+ "bit_size": 4,
+ "factor": 1,
+ "offset": 0,
+ "comment": "There are several phases in a starting action and different reasons why a start cannot take place.",
+ "is_big_endian": false,
+ "sign": 0,
+ "states": {
+ "startNotRqed": [
+ 0
+ ],
+ "starterActiveGearNotEngaged": [
+ 1
+ ],
+ "starterActiveGearEngaged": [
+ 2
+ ],
+ "strtFnshdStrtrNtActvAftrHvngBnA": [
+ 3
+ ],
+ "strtrInhbtdDToEngAlreadyRunning": [
+ 4
+ ],
+ "strtrInhbtdDTEngNtReadyForStart": [
+ 5
+ ],
+ "strtrInhbtdDTDrvlnEnggdOthrTrns": [
+ 6
+ ],
+ "strtrInhbtdDToActiveImmobilizer": [
+ 7
+ ],
+ "strtrInhbtdDueToStarterOvertemp": [
+ 8
+ ],
+ "1011Reserved": [
+ 9
+ ],
+ "starterInhibitedReasonUnknown": [
+ 12
+ ],
+ "error": [
+ 14
+ ],
+ "notAvailable": [
+ 15
+ ]
+ }
+ },
+ "Eng.Speed": {
+ "generic_name": "Eng.Speed",
+ "bit_position": 24,
+ "bit_size": 16,
+ "factor": 0.125,
+ "offset": 0,
+ "comment": "Actual engine speed which is calculated over a minimum crankshaft angle of 720 degrees divided by the number of cylinders.",
+ "unit": "rpm",
+ "is_big_endian": false,
+ "sign": 0
+ },
+ "Actual.Eng.Percent.Torque": {
+ "generic_name": "Actual.Eng.Percent.Torque",
+ "bit_position": 16,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": -125,
+ "comment": "The calculated output torque of the engine.",
+ "unit": "%",
+ "is_big_endian": false,
+ "sign": 0
+ },
+ "Drivers.Demand.Eng.Percent.Torque": {
+ "generic_name": "Drivers.Demand.Eng.Percent.Torque",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": -125,
+ "comment": "The requested torque output of the engine by the driver.",
+ "unit": "%",
+ "is_big_endian": false,
+ "sign": 0
+ },
+ "Eng.Torque.Mode": {
+ "generic_name": "Eng.Torque.Mode",
+ "bit_position": 0,
+ "bit_size": 4,
+ "factor": 1,
+ "offset": 0,
+ "comment": "State signal which indicates which engine torque mode is currently generating, limiting, or controlling the torque.",
+ "is_big_endian": false,
+ "sign": 0,
+ "states": {
+ "Low idle governor/no request (de": [
+ 0
+ ],
+ "Accelerator pedal/operator selec": [
+ 1
+ ],
+ "Cruise control": [
+ 2
+ ],
+ "PTO governor": [
+ 3
+ ],
+ "Road speed governor": [
+ 4
+ ],
+ "ASR control": [
+ 5
+ ],
+ "Transmission control": [
+ 6
+ ],
+ "ABS control": [
+ 7
+ ],
+ "Torque limiting": [
+ 8
+ ],
+ "High speed governor": [
+ 9
+ ],
+ "Braking system": [
+ 10
+ ],
+ "Remote accelerator": [
+ 11
+ ],
+ "Not available": [
+ 15
+ ]
+ }
+ }
+ }
+ },
+ "130306": {
+ "name": "Wind.Data",
+ "bus": "j1939",
+ "comment": "Wind Data",
+ "length": 8,
+ "is_fd": false,
+ "is_extended": false,
+ "is_j1939": true,
+ "byte_frame_is_big_endian": true,
+ "bit_position_reversed": true,
+ "signals": {
+ "Sid": {
+ "bit_position": 0,
+ "bit_size": 8,
+ "sign": 0,
+ "generic_name": "Wind.Data.Sid"
+ },
+ "Wind.Speed": {
+ "bit_position": 8,
+ "bit_size": 16,
+ "factor": 0.01,
+ "sign": 0,
+ "unit": "m/s",
+ "generic_name": "Wind.Data.Wind.Speed"
+ },
+ "Wind.Angle": {
+ "bit_position": 24,
+ "bit_size": 16,
+ "factor": 0.0001,
+ "sign": 0,
+ "unit": "rad",
+ "generic_name": "Wind.Data.Wind.Angle"
+ },
+ "Reference": {
+ "bit_position": 40,
+ "bit_size": 3,
+ "decoder": "decoder_t::decode_state",
+ "sign": 0,
+ "states": {
+ "True (ground referenced to North)": [
+ 0
+ ],
+ "Magnetic (ground referenced to Magnetic North)": [
+ 1
+ ],
+ "Apparent": [
+ 2
+ ],
+ "True (boat referenced)": [
+ 3
+ ],
+ "True (water referenced)": [
+ 4
+ ]
+ },
+ "generic_name": "Wind.Data.Reference"
+ },
+ "Reserved": {
+ "bit_position": 43,
+ "bit_size": 21,
+ "decoder": "decoder_t::decode_bytes",
+ "sign": 0,
+ "generic_name": "Wind.Data.Reserved"
+ }
+ }
+ }
+ },
+ "diagnostic_messages": [
+ {
+ "bus": "hs",
+ "pid": 4,
+ "name": "engine.load",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 5,
+ "name": "engine.coolant.temperature",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 10,
+ "name": "fuel.pressure",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 11,
+ "name": "intake.manifold.pressure",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 12,
+ "name": "engine.speed",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 13,
+ "name": "vehicle.speed",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 15,
+ "name": "intake.air.temperature",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 16,
+ "name": "mass.airflow",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 17,
+ "name": "throttle.position",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 31,
+ "name": "running.time",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 45,
+ "name": "EGR.error",
+ "frequency": 0,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 47,
+ "name": "fuel.level",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 51,
+ "name": "barometric.pressure",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 70,
+ "name": "ambient.air.temperature",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 76,
+ "name": "commanded.throttle.position",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 82,
+ "name": "ethanol.fuel.percentage",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 90,
+ "name": "accelerator.pedal.position",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 91,
+ "name": "hybrid.battery-pack.remaining.life",
+ "frequency": 5,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 92,
+ "name": "engine.oil.temperature",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 94,
+ "name": "engine.fuel.rate",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ },
+ {
+ "bus": "hs",
+ "pid": 99,
+ "name": "engine.torque",
+ "frequency": 1,
+ "decoder": "decoder_t::decode_obd2_response"
+ }
+ ]
}