#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,"Virtual J1939",
			{ // beginning message_definition_ vector
				{std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,4,true,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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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,4,true,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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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
							false,// is_big_endian
							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",61449,"VDC2",8,4,true,frequency_clock_t(5.00000f),true,
					{ // beginning signals vector
						{std::make_shared<signal_t> (signal_t{
							"Lateral.Acceleration",// generic_name
							40,// bit_position
							16,// bit_size
							0.000488281f,// factor
							-15.6870f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"m/s/s"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Longitudinal.Acceleration",// generic_name
							56,// bit_position
							8,// bit_size
							0.100000f,// factor
							-12.5000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"m/s/s"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Steer.Wheel.Angle",// generic_name
							0,// bit_position
							16,// bit_size
							0.000976562f,// factor
							-31.3740f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"rad"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Steer.Wheel.Angle.Sensor.Type",// generic_name
							22,// 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,"AbsMeasuringPrinciple"},
								{3,"NotAvailable"},
								{0,"RelativeMeasuringPrinciple"},
								{2,"Reserved"}
							},// states
							false,// writable
							decoder_t::decode_state,// decoder
							nullptr,// encoder
							false,// received
							std::make_pair<bool, int>(false, 0),// multiplex
							false,// is_big_endian
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							""// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Steer.Wheel.Turn.Counter",// generic_name
							16,// bit_position
							6,// bit_size
							1.00000f,// factor
							-32.0000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"turns"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Yaw.Rate",// generic_name
							24,// bit_position
							16,// bit_size
							0.000122070f,// factor
							-3.92000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"rad/s"// unit
						})}
					} // end signals vector
				})} // end message_definition entry
,				{std::make_shared<message_definition_t>(message_definition_t{"j1939",65215,"EBC2",8,4,true,frequency_clock_t(5.00000f),true,
					{ // beginning signals vector
						{std::make_shared<signal_t> (signal_t{
							"Front.Axle.Speed",// generic_name
							0,// bit_position
							16,// bit_size
							0.00390625f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Relative.Speed.Front.Axle.Left.Wheel",// generic_name
							16,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Relative.Speed.Rear.Axle1.Left.Wheel",// generic_name
							32,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Relative.Speed.Rear.Axle2.Left.Wheel",// generic_name
							48,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Rlative.Speed.Front.Axle.Right.Wheel",// generic_name
							24,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Rlative.Speed.Rear.Axle1.Right.Wheel",// generic_name
							40,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Rlative.Speed.Rear.Axle2.Right.Wheel",// generic_name
							56,// bit_position
							8,// bit_size
							0.0625000f,// factor
							-7.81250f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"km/h"// unit
						})}
					} // end signals vector
				})} // end message_definition entry
,				{std::make_shared<message_definition_t>(message_definition_t{"j1939",65253,"HOURS",8,4,true,frequency_clock_t(5.00000f),true,
					{ // beginning signals vector
						{std::make_shared<signal_t> (signal_t{
							"Eng.Total.Hours.Of.Operation",// generic_name
							0,// bit_position
							32,// bit_size
							0.0500000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"hr"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Total.Revolutions",// generic_name
							32,// bit_position
							32,// bit_size
							1000.00f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"r"// unit
						})}
					} // end signals vector
				})} // end message_definition entry
,				{std::make_shared<message_definition_t>(message_definition_t{"j1939",65262,"ET1",8,4,true,frequency_clock_t(5.00000f),true,
					{ // beginning signals vector
						{std::make_shared<signal_t> (signal_t{
							"Eng.Coolant.Temp",// generic_name
							0,// bit_position
							8,// bit_size
							0.0312500f,// factor
							-273.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
							false,// is_big_endian
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"deg C"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Fuel.Temp1",// generic_name
							8,// bit_position
							8,// bit_size
							1.00000f,// factor
							-40.0000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"deg C"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Intercooler.Temp",// generic_name
							48,// bit_position
							8,// bit_size
							1.00000f,// factor
							-40.0000f,// 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
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"deg C"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Intercooler.Thermostat.Opening",// generic_name
							56,// 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
							false,// writable
							nullptr,// decoder
							nullptr,// encoder
							false,// received
							std::make_pair<bool, int>(false, 0),// multiplex
							false,// is_big_endian
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"%"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Oil.Temp1",// generic_name
							16,// bit_position
							16,// bit_size
							0.0312500f,// factor
							-273.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
							false,// is_big_endian
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"deg C"// unit
						})},
						{std::make_shared<signal_t> (signal_t{
							"Eng.Turbo.Oil.Temp",// generic_name
							32,// bit_position
							16,// bit_size
							0.0312500f,// factor
							-273.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
							false,// is_big_endian
							static_cast<sign_t>(0),// signed
							-1,// bit_sign_position
							"deg C"// unit
						})}
					} // end signals vector
				})} // end message_definition entry

		}, // end message_definition vector
			{ // beginning diagnostic_messages_ vector

			} // 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 "";
}