This commit allows to change all enum types by masks.
Now to implement new protocol you don't need to add
more attribute in class. All can be contained in
the flags field.
Bug-AGL : SPEC-2779
Change-Id: I814d0052139be5d5efefc9ff1b4b558f46b85e90
Signed-off-by: Arthur Guyader <arthur.guyader@iot.bzh>
, 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",0x30,"",0,false,message_format_t::EXTENDED,frequency_clock_t(5.00000f),true,
+ {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
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",0,true,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,2050,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.speed",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"vehicle.average.speed",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.oil.temp",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"doors.boot.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"windows.front_left.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
"is_fd" : false,
"is_extended": false,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"doors.driver.open": {
"generic_name": "doors.front_left.open",
"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_size": 1,
"factor": 1.0,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"},
"doors.rearleft.open": {
"generic_name": "doors.rear_left.open",
"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_size": 4,
"factor": 1.0,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"},
"doors.coffer.open": {
"generic_name": "doors.boot.open",
"bit_size": 1,
"factor": 1.0,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"}
}
},
"is_fd" : false,
"is_extended": false,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"windows.driver.open": {
"generic_name": "windows.front_left.open",
"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_size": 1,
"factor": 1.0,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"},
"windows.rearleft.open": {
"generic_name": "windows.rear_left.open",
"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_size": 4,
"factor": 1.0,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"}
}
},
"is_fd" : true,
"is_extended": false,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"PT_FuelLevelPct": {
"generic_name": "fuel.level",
"bit_position": 8,
"bit_size": 8,
"factor": 0.392157,
- "offset": 0
+ "offset": 0,
+ "writable": true
},
"PT_EngineSpeed": {
"generic_name": "engine.speed",
"bit_position": 16,
"bit_size": 16,
"factor": 0.25,
- "offset": 0
+ "offset": 0,
+ "writable": true
},
"PT_FuelLevelLow": {
"generic_name": "fuel.level.low",
"bit_size": 1,
"factor": 1,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"
}
}
"is_fd" : false,
"is_extended": false,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"PT_EngineOilTempHigh": {
"generic_name": "engine.oil.temp.high",
"bit_size": 1,
"factor": 1,
"offset": 0,
+ "writable": true,
"decoder": "decoder_t::decode_boolean"
},
"PT_EngineOilTemp": {
"bit_position": 16,
"bit_size": 8,
"factor": 1,
- "offset": 0
+ "offset": 0,
+ "writable": true
}
}
},
"is_fd" : false,
"is_extended": false,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"PT_VehicleAvgSpeed": {
"generic_name": "vehicle.average.speed",
"bit_position": 0,
"bit_size": 15,
"factor": 0.015625,
- "offset": 0
+ "offset": 0,
+ "writable": false
}
}
},
"is_fd" : false,
"is_extended": true,
"is_j1939" : false,
+ "length" : 8,
"signals": {
"LeftTemperature": {
"generic_name": "hvac.temperature.left",
"bit_position": 32,
"bit_size": 8,
"factor": 23.529411765,
- "offset": 0
+ "offset": 0,
+ "writable": true
}
}
}
, 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",0x30,"",0,false,message_format_t::EXTENDED,frequency_clock_t(5.00000f),true, { // beginning signals vector
+ {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
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"hvac.temperature.left",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"hvac.temperature.right",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"hvac.temperature.average",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",0,true,message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,2050,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.speed",// generic_name
16,// bit_position
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"fuel.level.low",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"fuel.level",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,2,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"vehicle.average.speed",// generic_name
0,// bit_position
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,2,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.oil.temp",// generic_name
16,// bit_position
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"engine.oil.temp.high",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,2,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"doors.boot.open",// generic_name
47,// bit_position
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"doors.front_left.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"doors.front_right.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"doors.rear_left.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"doors.rear_right.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,2,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
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"windows.front_right.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"windows.rear_left.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"windows.rear_right.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,18,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
{3,"TakeNoAction"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Momentary.Eng.Max.Power.Enable",// generic_name
{0,"notRqingMaxPowerAvailable"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Percent.Clutch.Slip",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Progressive.Shift.Disable",// generic_name
{3,"TakeNoAction"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trans.Driveline.Engaged",// generic_name
{3,"NotAvailable"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trans.Input.Shaft.Speed",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "rpm",// unit
+ "rpm"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trans.Output.Shaft.Speed",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "rpm",// unit
+ "rpm"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trans.Shift.In.Process",// generic_name
{0,"ShiftIsNotInProcess"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess",// generic_name
{0,"TransitionIsNotInProcess"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Trns.Trque.Converter.Lockup.Engaged",// generic_name
{1,"TorqueConverterLockupEngaged"}
},// states
true,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,18,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
{8,"1111NotAvailable"}
},// states
false,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Actual.Eng.Percent.Torque",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Drivers.Demand.Eng.Percent.Torque",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Demand.Percent.Torque",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Speed",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "rpm",// unit
+ "rpm"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Starter.Mode",// generic_name
{8,"strtrInhbtdDueToStarterOvertemp"}
},// states
false,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Torque.Mode",// generic_name
{6,"Transmission control"}
},// states
false,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61449,"VDC2",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61449,"VDC2",8,18,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Lateral.Acceleration",// generic_name
40,// bit_position
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "m/s/s",// unit
+ "m/s/s"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Longitudinal.Acceleration",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "m/s/s",// unit
+ "m/s/s"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Steer.Wheel.Angle",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "rad",// unit
+ "rad"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Steer.Wheel.Angle.Sensor.Type",// generic_name
{2,"Reserved"}
},// states
false,// writable
- nullptr,// decoder
+ decoder_t::decode_state,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "",// unit
+ ""// unit
})},
{std::make_shared<signal_t> (signal_t{
"Steer.Wheel.Turn.Counter",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "turns",// unit
+ "turns"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Yaw.Rate",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "rad/s",// unit
+ "rad/s"// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65215,"EBC2",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65215,"EBC2",8,18,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Front.Axle.Speed",// generic_name
0,// bit_position
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Relative.Speed.Front.Axle.Left.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Relative.Speed.Rear.Axle1.Left.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Relative.Speed.Rear.Axle2.Left.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Rlative.Speed.Front.Axle.Right.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Rlative.Speed.Rear.Axle1.Right.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Rlative.Speed.Rear.Axle2.Right.Wheel",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "km/h",// unit
+ "km/h"// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65253,"HOURS",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65253,"HOURS",8,18,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
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "hr",// unit
+ "hr"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Total.Revolutions",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "r",// unit
+ "r"// unit
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65262,"ET1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true, { // beginning signals vector
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65262,"ET1",8,18,frequency_clock_t(5.00000f),true,
+ { // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Eng.Coolant.Temp",// generic_name
0,// bit_position
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "deg C",// unit
+ "deg C"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Fuel.Temp1",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "deg C",// unit
+ "deg C"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Intercooler.Temp",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "deg C",// unit
+ "deg C"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Intercooler.Thermostat.Opening",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "%",// unit
+ "%"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Oil.Temp1",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "deg C",// unit
+ "deg C"// unit
})},
{std::make_shared<signal_t> (signal_t{
"Eng.Turbo.Oil.Temp",// generic_name
nullptr,// decoder
nullptr,// encoder
false,// received
- std::make_pair<bool, int>(false,0),// multiplex
+ std::make_pair<bool, int>(false, 0),// multiplex
0,// is_big_endian
0,// is_signed
- "deg C",// unit
+ "deg C"// 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{
--- /dev/null
+{ "name": "AGL Virtual Car",
+ "extra_sources": [],
+ "initializers": [],
+ "loopers": [],
+ "buses": {},
+ "commands": [],
+ "messages": {
+ "0x620": {
+ "bus": "hs",
+ "is_fd" : false,
+ "is_extended": false,
+ "is_j1939" : false,
+ "length" : 8,
+ "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_extended": false,
+ "is_j1939" : false,
+ "length" : 8,
+ "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,
+ "length" : 8,
+ "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,
+ "length" : 8,
+ "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,
+ "length" : 8,
+ "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,
+ "length" : 8,
+ "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
+ }
+ }
+ },
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false,
+ "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_extended": 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,
+ "is_signed": false
+ },
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false
+ },
+ "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,
+ "is_signed": false,
+ "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,
+ "is_signed": false
+ },
+ "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,
+ "is_signed": false
+ },
+ "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,
+ "is_signed": false
+ },
+ "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,
+ "is_signed": false,
+ "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]
+ }
+ }
+ }
+ },
+ "65253": {
+ "comment": "Engine Hours, Revolutions",
+ "length": 8,
+ "name": "HOURS",
+ "bus" : "j1939",
+ "is_fd" : false,
+ "is_extended": false,
+ "is_j1939" : true,
+ "signals" : {
+ "Eng.Total.Revolutions" : {
+ "generic_name": "Eng.Total.Revolutions",
+ "bit_position": 32,
+ "bit_size": 32,
+ "factor": 1000,
+ "offset": 0,
+ "comment": "Accumulated number of revolutions of engine crankshaft during its operation.",
+ "unit": "r",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Total.Hours.Of.Operation" : {
+ "generic_name": "Eng.Total.Hours.Of.Operation",
+ "bit_position": 0,
+ "bit_size": 32,
+ "factor": 0.05,
+ "offset": 0,
+ "comment": "Accumulated time of operation of engine.",
+ "unit": "hr",
+ "is_big_endian": false,
+ "is_signed": false
+ }
+ }
+ },
+ "61449": {
+ "comment": "Vehicle Dynamic Stability Control 2",
+ "length": 8,
+ "name": "VDC2",
+ "bus" : "j1939",
+ "is_fd" : false,
+ "is_extended": false,
+ "is_j1939" : true,
+ "signals" : {
+ "Steer.Wheel.Angle" : {
+ "generic_name": "Steer.Wheel.Angle",
+ "bit_position": 0,
+ "bit_size": 16,
+ "factor": 0.0009765625,
+ "offset": -31.374,
+ "comment": "The main operator`s steering wheel angle (on the steering column, not the actual wheel angle).",
+ "unit": "rad",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Longitudinal.Acceleration" : {
+ "generic_name": "Longitudinal.Acceleration",
+ "bit_position": 56,
+ "bit_size": 8,
+ "factor": 0.1,
+ "offset": -12.5,
+ "comment": "Indicates the longitudinal acceleration of the vehicle.",
+ "unit": "m/s/s",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Lateral.Acceleration" : {
+ "generic_name": "Lateral.Acceleration",
+ "bit_position": 40,
+ "bit_size": 16,
+ "factor": 0.00048828125,
+ "offset": -15.687,
+ "comment": "Indicates a lateral acceleration of the vehicle.",
+ "unit": "m/s/s",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Yaw.Rate" : {
+ "generic_name": "Yaw.Rate",
+ "bit_position": 24,
+ "bit_size": 16,
+ "factor": 0.0001220703125,
+ "offset": -3.92,
+ "comment": "Indicates the rotation about the vertical axis.",
+ "unit": "rad/s",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Steer.Wheel.Angle.Sensor.Type" : {
+ "generic_name": "Steer.Wheel.Angle.Sensor.Type",
+ "bit_position": 22,
+ "bit_size": 2,
+ "factor": 1,
+ "offset": 0,
+ "comment": "Indicates whether the steering wheel angle sensor is capable of absolute measuring of the number of steering wheel",
+ "is_big_endian": false,
+ "is_signed": false,
+ "states": {
+ "RelativeMeasuringPrinciple": [0],
+ "AbsMeasuringPrinciple": [1],
+ "Reserved": [2],
+ "NotAvailable": [3]
+ }
+ },
+ "Steer.Wheel.Turn.Counter" : {
+ "generic_name": "Steer.Wheel.Turn.Counter",
+ "bit_position": 16,
+ "bit_size": 6,
+ "factor": 1,
+ "offset": -32,
+ "comment": "Indicates number of steering wheel turns, absolute position or relative position at ignition on.",
+ "unit": "turns",
+ "is_big_endian": false,
+ "is_signed": false
+ }
+ }
+ },
+ "65215": {
+ "comment": "Wheel Speed Information",
+ "length": 8,
+ "name": "EBC2",
+ "bus" : "j1939",
+ "is_fd" : false,
+ "is_extended": false,
+ "is_j1939" : true,
+ "signals" : {
+ "Rlative.Speed.Rear.Axle2.Right.Wheel" : {
+ "generic_name": "Rlative.Speed.Rear.Axle2.Right.Wheel",
+ "bit_position": 56,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the rear axle #2, right wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Relative.Speed.Rear.Axle2.Left.Wheel" : {
+ "generic_name": "Relative.Speed.Rear.Axle2.Left.Wheel",
+ "bit_position": 48,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the rear axle #2, left wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Rlative.Speed.Rear.Axle1.Right.Wheel" : {
+ "generic_name": "Rlative.Speed.Rear.Axle1.Right.Wheel",
+ "bit_position": 40,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the rear axle #1, right wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Relative.Speed.Rear.Axle1.Left.Wheel" : {
+ "generic_name": "Relative.Speed.Rear.Axle1.Left.Wheel",
+ "bit_position": 32,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the rear axle #1, left wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Rlative.Speed.Front.Axle.Right.Wheel" : {
+ "generic_name": "Rlative.Speed.Front.Axle.Right.Wheel",
+ "bit_position": 24,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the front axle, right wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Relative.Speed.Front.Axle.Left.Wheel" : {
+ "generic_name": "Relative.Speed.Front.Axle.Left.Wheel",
+ "bit_position": 16,
+ "bit_size": 8,
+ "factor": 0.0625,
+ "offset": -7.8125,
+ "comment": "The speed of the front axle, left wheel relative to the front axle speed, SPN 904.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Front.Axle.Speed" : {
+ "generic_name": "Front.Axle.Speed",
+ "bit_position": 0,
+ "bit_size": 16,
+ "factor": 0.00390625,
+ "offset": 0,
+ "comment": "The average speed of the two front wheels.",
+ "unit": "km/h",
+ "is_big_endian": false,
+ "is_signed": false
+ }
+ }
+ },
+ "65262": {
+ "comment": "Engine Temperature 1",
+ "length": 8,
+ "name": "ET1",
+ "bus" : "j1939",
+ "is_fd" : false,
+ "is_extended": false,
+ "is_j1939" : true,
+ "signals" : {
+ "Eng.Fuel.Temp1" : {
+ "generic_name": "Eng.Fuel.Temp1",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": -40,
+ "comment": "Temperature of fuel (or gas) passing through the first fuel control system.",
+ "unit": "deg C",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Intercooler.Thermostat.Opening" : {
+ "generic_name": "Eng.Intercooler.Thermostat.Opening",
+ "bit_position": 56,
+ "bit_size": 8,
+ "factor": 0.4,
+ "offset": 0,
+ "comment": "The current position of the thermostat used to regulate the temperature of the engine intercooler.",
+ "unit": "%",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Intercooler.Temp" : {
+ "generic_name": "Eng.Intercooler.Temp",
+ "bit_position": 48,
+ "bit_size": 8,
+ "factor": 1,
+ "offset": -40,
+ "comment": "Temperature of liquid found in the intercooler located after the turbocharger.",
+ "unit": "deg C",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Turbo.Oil.Temp" : {
+ "generic_name": "Eng.Turbo.Oil.Temp",
+ "bit_position": 32,
+ "bit_size": 16,
+ "factor": 0.03125,
+ "offset": -273,
+ "comment": "Temperature of the turbocharger lubricant.",
+ "unit": "deg C",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Oil.Temp1" : {
+ "generic_name": "Eng.Oil.Temp1",
+ "bit_position": 16,
+ "bit_size": 16,
+ "factor": 0.03125,
+ "offset": -273,
+ "comment": "Temperature of the engine lubricant.",
+ "unit": "deg C",
+ "is_big_endian": false,
+ "is_signed": false
+ },
+ "Eng.Coolant.Temp" : {
+ "generic_name": "Eng.Coolant.Temp",
+ "bit_position": 0,
+ "bit_size": 8,
+ "factor": 0.03125,
+ "offset": -273,
+ "comment": "Temperature of liquid found in engine cooling system.",
+ "unit": "deg C",
+ "is_big_endian": false,
+ "is_signed": 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"
+ }
+ ]
+}
, 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",0x30,"",0,false,message_format_t::EXTENDED,frequency_clock_t(5.00000f),true,
+ {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
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",0,true,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,2050,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.speed",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"vehicle.average.speed",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"engine.oil.temp",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
nullptr,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"doors.boot.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",0,false,message_format_t::STANDARD,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,2,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"windows.front_left.open",// generic_name
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
false,// force_send_changed
{
},// states
- false,// writable
+ true,// writable
decoder_t::decode_boolean,// decoder
nullptr,// encoder
false,// received
} // end signals vector
})} // end message_definition entry
#ifdef USE_FEATURE_J1939
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61442,"ETC1",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Eng.Momentary.Overspeed.Enable",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61444,"EEC1",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Actl.Eng.Prcnt.Trque.High.Resolution",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61449,"VDC2",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",61449,"VDC2",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Lateral.Acceleration",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65215,"EBC2",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65215,"EBC2",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Front.Axle.Speed",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65253,"HOURS",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65253,"HOURS",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Eng.Total.Hours.Of.Operation",// generic_name
})}
} // end signals vector
})} // end message_definition entry
-, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65262,"ET1",8,false,message_format_t::J1939,frequency_clock_t(5.00000f),true,
+, {std::make_shared<message_definition_t>(message_definition_t{"j1939",65262,"ET1",8,18,frequency_clock_t(5.00000f),true,
{ // beginning signals vector
{std::make_shared<signal_t> (signal_t{
"Eng.Coolant.Temp",// generic_name
{
return "hs";
}
-
-
std::shared_ptr<message_t> message = s->read_message();
// Sure we got a valid CAN message ?
- if (! message->get_id() == 0 && ! message->get_length() == 0 && message->get_msg_format() != message_format_t::INVALID)
+ if (! message->get_id() == 0 && ! message->get_length() == 0 && !(message->get_flags()&INVALID_FLAG))
{
push_n_notify(message);
}
}
}
*/
-static int send_message(message_t *message, const std::string& bus_name, socket_type type)
+static int send_message(message_t *message, const std::string& bus_name, uint32_t flags)
{
if(bus_name.empty())
{
}
- if(type == socket_type::BCM)
+ if(flags&BCM_PROTOCOL)
{
return low_can_subscription_t::tx_send(*cd[bus_name], message, bus_name);
}
#ifdef USE_FEATURE_J1939
- else if(type == socket_type::J1939)
+ else if(flags&J1939_PROTOCOL)
{
return low_can_subscription_t::j1939_send(*cd[bus_name], message, bus_name);
}
}
-static void write_raw_frame(afb_req_t request, const std::string& bus_name, message_t *message, struct json_object *can_data, socket_type type)
+static void write_raw_frame(afb_req_t request, const std::string& bus_name, message_t *message, struct json_object *can_data, uint32_t flags)
{
struct utils::signals_found sf;
if( !sf.signals.empty() )
{
AFB_DEBUG("ID WRITE RAW : %d",sf.signals[0]->get_message()->get_id());
- if(type == socket_type::BCM)
+ if(flags&BCM_PROTOCOL)
{
if(sf.signals[0]->get_message()->is_fd())
{
}
if((message->get_length()> 0 && (
- ((type == socket_type::BCM) && (
+ ((flags&BCM_PROTOCOL) && (
(message->get_length() <= CANFD_MAX_DLEN * MAX_BCM_CAN_FRAMES && message->get_flags() & CAN_FD_FRAME)
|| (message->get_length() <= CAN_MAX_DLEN * MAX_BCM_CAN_FRAMES && !(message->get_flags() & CAN_FD_FRAME))
))
#ifdef USE_FEATURE_J1939
- || (message->get_length() <= J1939_MAX_DLEN && type == socket_type::J1939)
+ || (message->get_length() <= J1939_MAX_DLEN && flags&J1939_PROTOCOL)
#endif
)))
{
}
else
{
- if(type == socket_type::BCM)
+ if(flags&BCM_PROTOCOL)
{
afb_req_fail(request, "Invalid", "Frame BCM");
}
- else if(type == socket_type::J1939)
+ else if(flags&J1939_PROTOCOL)
{
afb_req_fail(request, "Invalid", "Frame J1939");
}
return;
}
- if(! send_message(message, application_t::instance().get_can_bus_manager().get_can_device_name(bus_name),type))
+ if(! send_message(message, application_t::instance().get_can_bus_manager().get_can_device_name(bus_name),flags))
{
afb_req_success(request, nullptr, "Message correctly sent");
}
"can_dlc", &length,
"can_data", &can_data))
{
- message = new can_message_t(0,(uint32_t)id,(uint32_t)length,message_format_t::STANDARD,false,0,data,0);
- write_raw_frame(request,bus_name,message,can_data,socket_type::BCM);
+ message = new can_message_t(0,(uint32_t)id,(uint32_t)length,false,0,data,0);
+ write_raw_frame(request,bus_name,message,can_data,BCM_PROTOCOL);
}
#ifdef USE_FEATURE_J1939
else if(!wrap_json_unpack(json_value, "{si, si, so !}",
"length", &length,
"data", &can_data))
{
- message = new j1939_message_t(J1939_MAX_DLEN,(uint32_t)length,message_format_t::J1939,data,0,J1939_NO_NAME,(pgn_t)id,J1939_NO_ADDR);
- write_raw_frame(request,bus_name,message,can_data,socket_type::J1939);
+ message = new j1939_message_t((uint32_t)length,data,0,J1939_NO_NAME,(pgn_t)id,J1939_NO_ADDR);
+ write_raw_frame(request,bus_name,message,can_data,J1939_PROTOCOL);
}
#endif
else
encoder(*sig, dynafield_value, &send) :
encoder_t::encode_DynamicField(*sig, dynafield_value, &send);
- socket_type type = socket_type::INVALID;
+ uint32_t flags = INVALID_FLAG;
if(sig->get_message()->is_j1939())
{
- type = socket_type::J1939;
+ flags = J1939_PROTOCOL;
}
else
{
- type = socket_type::BCM;
+ flags = BCM_PROTOCOL;
}
// cfd = encoder_t::build_frame(sig, value);
message_t *message = encoder_t::build_message(sig,value,false,false);
- if(! send_message(message, sig->get_message()->get_bus_device_name(), type) && send)
+ if(! send_message(message, sig->get_message()->get_bus_device_name(), flags) && send)
{
afb_req_success(request, nullptr, "Message correctly sent");
}
ret = low_can_subscription_t::open_socket(*low_can_j1939,
message_definition->get_bus_device_name(),
- socket_type::J1939_ADDR_CLAIM);
+ J1939_ADDR_CLAIM_PROTOCOL);
if(ret < 0)
{
AFB_ERROR("Error open socket address claiming for j1939 protocol");
/// it will open the socket with the required CAN bus device name.
///
/// @return INVALID_SOCKET on failure, else positive integer
-int low_can_subscription_t::open_socket(low_can_subscription_t &subscription, const std::string& bus_name, socket_type type)
+int low_can_subscription_t::open_socket(low_can_subscription_t &subscription, const std::string& bus_name, uint32_t flags)
{
int ret = -1;
if(! subscription.socket_)
{
- switch (type)
- {
- case socket_type::BCM:
+ if(flags&BCM_PROTOCOL)
{
if( subscription.signal_ != nullptr)
{
ret = subscription.socket_->open(bus_name);
}
subscription.index_ = (int)subscription.socket_->socket();
- break;
}
#ifdef USE_FEATURE_J1939
- case socket_type::J1939_ADDR_CLAIM:
+ else if(flags&J1939_ADDR_CLAIM_PROTOCOL)
{
pgn_t pgn = J1939_NO_PGN;
if(!bus_name.empty())
subscription.socket_ = socket;
}
subscription.index_ = (int)subscription.socket_->socket();
- break;
}
- case socket_type::J1939:
+ else if(flags&J1939_PROTOCOL)
{
pgn_t pgn = J1939_NO_PGN;
if(subscription.signal_ != nullptr)
subscription.socket_ = socket;
}
subscription.index_ = (int)subscription.socket_->socket();
- break;
}
#endif
- default:
+ else
{
AFB_ERROR("Socket format not supported");
return INVALID_SOCKET;
- break;
- }
}
}
else{
subscription.signal_= sig;
// Make sure that socket is opened.
- if(open_socket(subscription,"",socket_type::J1939) < 0)
+ if(open_socket(subscription,"",J1939_PROTOCOL) < 0)
{
return -1;
}
/// @return 0 if ok else -1
int low_can_subscription_t::create_rx_filter_can(low_can_subscription_t &subscription, std::shared_ptr<signal_t> sig)
{
- uint32_t flags;
+ uint32_t flags_bcm;
float val;
struct timeval freq, timeout = {0, 0};
struct canfd_frame cfd;
if (is_fd)
{
- flags = SETTIMER|RX_NO_AUTOTIMER|CAN_FD_FRAME;
+ flags_bcm = SETTIMER|RX_NO_AUTOTIMER|CAN_FD_FRAME;
cfd.len = CANFD_MAX_DLEN;
- cm = can_message_t(CANFD_MAX_DLEN,sig->get_message()->get_id(),length_msg,sig->get_message()->get_format(),false,CAN_FD_FRAME,data,0);
+ cm = can_message_t( CANFD_MAX_DLEN,
+ sig->get_message()->get_id(),
+ length_msg,
+ false,
+ sig->get_message()->get_flags(),
+ data,
+ 0);
}
else
{
- flags = SETTIMER|RX_NO_AUTOTIMER;
+ flags_bcm = SETTIMER|RX_NO_AUTOTIMER;
cfd.len = CAN_MAX_DLEN;
- cm = can_message_t(CAN_MAX_DLEN,sig->get_message()->get_id(),length_msg,sig->get_message()->get_format(),false,0,data,0);
+ cm = can_message_t( CAN_MAX_DLEN,
+ sig->get_message()->get_id(),
+ length_msg,
+ false,
+ sig->get_message()->get_flags(),
+ data,
+ 0);
}
frequency_clock_t f = subscription.event_filter_.frequency == 0 ? subscription.signal_->get_frequency() : frequency_clock_t(subscription.event_filter_.frequency);
freq = f.get_timeval_from_period();
- struct bcm_msg bcm_msg = subscription.make_bcm_head(RX_SETUP, subscription.signal_->get_message()->get_id(), flags, timeout, freq);
+ struct bcm_msg bcm_msg = subscription.make_bcm_head(RX_SETUP, subscription.signal_->get_message()->get_id(), flags_bcm, timeout, freq);
std::vector<canfd_frame> cfd_vect = cm.convert_to_canfd_frame_vector();
int low_can_subscription_t::create_rx_filter_bcm(low_can_subscription_t &subscription, struct bcm_msg& bcm_msg)
{
// Make sure that socket is opened.
- if(subscription.open_socket(subscription,"",socket_type::BCM) < 0)
+ if(subscription.open_socket(subscription,"",BCM_PROTOCOL) < 0)
{return -1;}
// If it's not an OBD2 CAN ID then just add a simple RX_SETUP job
std::vector<canfd_frame> cfd_vect = cm->convert_to_canfd_frame_vector();
- if(subscription.open_socket(subscription, bus_name,socket_type::BCM) < 0)
+ if(subscription.open_socket(subscription, bus_name, BCM_PROTOCOL) < 0)
{
return -1;
}
//struct bcm_msg bcm_msg = subscription.make_bcm_head(TX_SEND, cfd.can_id);
//subscription.add_one_bcm_frame(cfd, bcm_msg);
- if(subscription.open_socket(subscription, bus_name, socket_type::J1939) < 0)
+ if(subscription.open_socket(subscription, bus_name, J1939_PROTOCOL) < 0)
{
return -1;
}
static void add_one_bcm_frame(struct canfd_frame& cfd, struct bcm_msg& bcm_msg);
static void remove_last_bcm_frame(struct bcm_msg& bcm_msg);
- static int open_socket(low_can_subscription_t &subscription, const std::string& bus_name = "", socket_type type = socket_type::INVALID);
+ static int open_socket(low_can_subscription_t &subscription, const std::string& bus_name = "", uint32_t flags = INVALID_FLAG);
int create_rx_filter(std::shared_ptr<signal_t> sig);
int create_rx_filter(std::shared_ptr<diagnostic_message_t> sig);
std::vector<uint8_t> data;
if(signal->get_message()->is_fd())
{
- message = new can_message_t(CANFD_MAX_DLEN,signal->get_message()->get_id(),CANFD_MAX_DLEN,signal->get_message()->get_format(),false,CAN_FD_FRAME,data,0);
+ message = new can_message_t( CANFD_MAX_DLEN,
+ signal->get_message()->get_id(),
+ CANFD_MAX_DLEN,
+ false,
+ signal->get_message()->get_flags(),
+ data,
+ 0);
return build_frame(signal,value,message, factor, offset);
}
#ifdef USE_FEATURE_J1939
else if(signal->get_message()->is_j1939())
{
- message = new j1939_message_t(J1939_MAX_DLEN,signal->get_message()->get_length(),signal->get_message()->get_format(),data,0,J1939_NO_NAME,signal->get_message()->get_id(),J1939_NO_ADDR);
+ message = new j1939_message_t( signal->get_message()->get_length(),
+ data,
+ 0,
+ J1939_NO_NAME,
+ signal->get_message()->get_id(),
+ J1939_NO_ADDR);
return build_frame(signal,value,message, factor, offset);
}
#endif
else
{
- message = new can_message_t(CAN_MAX_DLEN,signal->get_message()->get_id(),CAN_MAX_DLEN,signal->get_message()->get_format(),false,0,data,0);
+ message = new can_message_t(CAN_MAX_DLEN,
+ signal->get_message()->get_id(),
+ CAN_MAX_DLEN,
+ false,
+ signal->get_message()->get_flags(),
+ data,
+ 0);
return build_frame(signal,value,message, factor, offset);
}
}
message_definition_t::message_definition_t(
const std::string bus,
uint32_t id,
- bool is_fd,
- message_format_t format,
+ uint32_t flags,
frequency_clock_t frequency_clock,
bool force_send_changed,
const std::vector<std::shared_ptr<signal_t> >& signals)
: parent_{nullptr},
bus_{bus},
id_{id},
- is_fd_(is_fd),
- format_{format},
+ flags_{flags},
frequency_clock_{frequency_clock},
force_send_changed_{force_send_changed},
last_value_{CAN_MESSAGE_SIZE},
uint32_t id,
const std::string name,
uint32_t length,
- bool is_fd,
- message_format_t format,
+ uint32_t flags,
frequency_clock_t frequency_clock,
bool force_send_changed,
const std::vector<std::shared_ptr<signal_t> >& signals)
id_{id},
name_{name},
length_{length},
- is_fd_(is_fd),
- format_{format},
+ flags_{flags},
frequency_clock_{frequency_clock},
force_send_changed_{force_send_changed},
last_value_{CAN_MESSAGE_SIZE},
bool message_definition_t::is_fd() const
{
- return is_fd_;
+ return (flags_&FD_FRAME);
}
bool message_definition_t::is_j1939() const
{
- if(format_ == message_format_t::J1939)
- {
- return true;
- }
- else
- {
- return false;
- }
+ return (flags_&J1939_PROTOCOL);
}
std::vector<std::shared_ptr<signal_t>>& message_definition_t::get_signals()
return length_;
}
-message_format_t message_definition_t::get_format() const
+uint32_t message_definition_t::get_flags() const
{
- return format_;
+ return flags_;
}
\ No newline at end of file
uint32_t id_; ///< id_ - The ID or the PGN (if j1939) of the message.*/
std::string name_; ///< name_ - J1939 PGN name
uint32_t length_; ///< length_ - Message data length in bytes. For J1939 message, this is the expected data size
- bool is_fd_; /*!< uses_fd_ - Flags to enable an FD CAN message communication*/
- message_format_t format_; ///< format_ - the format of the message's ID.*/
+ uint32_t flags_; ///< format_ - the format of the message's ID.*/
frequency_clock_t frequency_clock_; ///< clock_ - an optional frequency clock to control the output of this
/// message, if sent raw, or simply to mark the max frequency for custom
/// handlers to retrieve.*/
//message_definition_t(const message_definition_t& b);
message_definition_t(const std::string bus);
message_definition_t(const std::string bus, uint32_t id, frequency_clock_t frequency_clock, bool force_send_changed);
- message_definition_t(const std::string bus, uint32_t id, message_format_t format, frequency_clock_t frequency_clock, bool force_send_changed);
+ message_definition_t(const std::string bus, uint32_t id, uint32_t flags, frequency_clock_t frequency_clock, bool force_send_changed);
message_definition_t(const std::string bus,
uint32_t id,
- bool is_fd,
- message_format_t format,
+ uint32_t flags,
frequency_clock_t frequency_clock,
bool force_send_changed,
const std::vector<std::shared_ptr<signal_t> >& signals);
uint32_t id,
std::string name,
uint32_t length,
- bool is_fd,
- message_format_t format,
+ uint32_t flags,
frequency_clock_t frequency_clock,
bool force_send_changed,
const std::vector<std::shared_ptr<signal_t> >& signals);
bool is_j1939() const;
std::vector<std::shared_ptr<signal_t>>& get_signals();
uint32_t get_length() const;
- message_format_t get_format() const;
+ uint32_t get_flags() const;
void set_parent(std::shared_ptr<message_set_t> parent);
void set_last_value(std::shared_ptr<message_t> m);
can_message_t::can_message_t(uint32_t maxdlen,
uint32_t id,
uint32_t length,
- message_format_t format,
bool rtr_flag,
uint32_t flags,
std::vector<uint8_t>& data,
uint64_t timestamp)
- : message_t(maxdlen, length, format, data, timestamp, flags),
+ : message_t(maxdlen, length, flags, data, timestamp),
id_{id},
rtr_flag_{rtr_flag}
{}
/// @return True if object correctly initialized and false if not.
bool can_message_t::is_correct_to_send()
{
- if (id_ != 0 && length_ != 0 && format_ != message_format_t::INVALID)
+ if (id_ != 0 && length_ != 0 && !(flags_&INVALID_FLAG))
{
int i;
for(i=0;i<length_;i++)
std::shared_ptr<can_message_t> can_message_t::convert_from_frame(const struct canfd_frame& frame, size_t nbytes, uint64_t timestamp)
{
uint32_t maxdlen = 0, length = 0;
- uint8_t flags = 0;
+ uint32_t flags = 0;
uint32_t id;
- message_format_t format;
bool rtr_flag;
std::vector<uint8_t> data;
if (frame.can_id & CAN_ERR_FLAG)
{
- format = message_format_t::INVALID;
+ flags = flags|INVALID_FLAG;
id = frame.can_id & (CAN_ERR_MASK|CAN_ERR_FLAG);
}
else if (frame.can_id & CAN_EFF_FLAG)
{
- format = message_format_t::EXTENDED;
+ flags = flags|EXTENDED_ID;
id = frame.can_id & CAN_EFF_MASK;
}
else
{
- format = message_format_t::STANDARD;
+ flags = flags|STANDARD_ID;
id = frame.can_id & CAN_SFF_MASK;
}
length = (frame.len > maxdlen) ? maxdlen : frame.len;
/* Flags field only present for CAN FD frames*/
- if(maxdlen == CANFD_MAX_DLEN)
- flags = frame.flags & 0xF;
+ /*if(maxdlen == CANFD_MAX_DLEN)
+ flags = frame.flags & 0xF;*/
if (data.capacity() < maxdlen)
data.reserve(maxdlen);
};
AFB_DEBUG("Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X",
- id, (uint8_t)format, length, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
+ id, (uint32_t)flags, length, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
}
- return std::make_shared<can_message_t>(can_message_t(maxdlen, id, length, format, rtr_flag, flags, data, timestamp));
+ return std::make_shared<can_message_t>(can_message_t(maxdlen, id, length, rtr_flag, flags, data, timestamp));
}
/// @brief Take all initialized class members and build a
public:
can_message_t();
- can_message_t(uint32_t maxdlen, uint32_t id, uint32_t length, message_format_t format, bool rtr_flag_, uint32_t flags, std::vector<uint8_t>& data, uint64_t timestamp);
-
+ can_message_t(uint32_t maxdlen, uint32_t id, uint32_t length, bool rtr_flag_, uint32_t flags, std::vector<uint8_t>& data, uint64_t timestamp);
uint32_t get_id() const;
static std::shared_ptr<can_message_t> convert_from_frame(const canfd_frame& frame, size_t nbytes, uint64_t timestamp);
* @param addr The address of the message
*/
j1939_message_t::j1939_message_t(uint32_t length,
- message_format_t format,
std::vector<uint8_t>& data,
uint64_t timestamp,
name_t name,
pgn_t pgn,
uint8_t addr):
- message_t(J1939_MAX_DLEN,length, format, data, timestamp, 0),
+ message_t(J1939_MAX_DLEN, length, J1939_PROTOCOL, data, timestamp),
name_{name},
pgn_{pgn},
addr_{addr}
{
int i;
uint32_t length = 0;
- message_format_t format;
+ uint32_t flags;
std::vector<uint8_t> data_vector;
if(nbytes > J1939_MAX_DLEN)
{
AFB_DEBUG("Unsupported j1939 frame");
- format = message_format_t::INVALID;
- }
- else
- {
- //AFB_DEBUG("Got a j1939 frame");
- format = message_format_t::J1939;
+ return std::make_shared<j1939_message_t>(j1939_message_t());
}
length = (uint32_t) nbytes;
data_vector.push_back(data[i]);
};
- AFB_DEBUG("Found pgn: %X, format: %X, length: %X, data %s",
- addr.can_addr.j1939.pgn, (uint8_t)format, length, data_string.c_str());
+ AFB_DEBUG("Found pgn: %X, length: %X, data %s",
+ addr.can_addr.j1939.pgn, length, data_string.c_str());
- return std::make_shared<j1939_message_t>(j1939_message_t(J1939_MAX_DLEN,length, format, data_vector, timestamp,addr.can_addr.j1939.name,addr.can_addr.j1939.pgn,addr.can_addr.j1939.addr));
+ return std::make_shared<j1939_message_t>(j1939_message_t(length, data_vector, timestamp,addr.can_addr.j1939.name,addr.can_addr.j1939.pgn,addr.can_addr.j1939.addr));
}
/// @brief Test if members pgn_ and length are set.
public:
j1939_message_t();
- j1939_message_t(uint32_t maxdlen, uint32_t length, message_format_t format, std::vector<uint8_t>& data, uint64_t timestamp, name_t name, pgn_t pgn, uint8_t addr);
+ j1939_message_t(uint32_t length, std::vector<uint8_t>& data, uint64_t timestamp, name_t name, pgn_t pgn, uint8_t addr);
uint64_t get_name() const;
uint32_t get_pgn() const;
uint8_t get_addr() const;
struct sockaddr_can get_sockname();
void set_sockname(struct sockaddr_can sockname);
void set_sockname(pgn_t pgn, name_t name, uint8_t addr);
-};
+};
\ No newline at end of file
message_t::message_t()
: maxdlen_{0},
length_{0},
- format_{message_format_t::INVALID},
+ flags_{INVALID_FLAG},
timestamp_{0},
- sub_id_{-1},
- flags_{0}
+ sub_id_{-1}
{}
/**
*/
message_t::message_t(uint32_t maxdlen,
uint32_t length,
- message_format_t format,
+ uint32_t flags,
std::vector<uint8_t>& data,
- uint64_t timestamp,
- uint32_t flags)
+ uint64_t timestamp)
: maxdlen_{maxdlen},
length_{length},
- format_{format},
+ flags_{flags},
data_{data},
timestamp_{timestamp},
- sub_id_{-1},
- flags_{flags}
+ sub_id_{-1}
{}
/**
return timestamp_;
}
-/**
- * @brief Return the format of the message
- *
- * @return message_format_t The message format
- */
-message_format_t message_t::get_msg_format()
-{
- return format_;
-}
-
-
uint32_t message_t::get_flags()
{
return flags_;
/**
- * @enum message_format_t
- * @brief The ID format for a CAN message.
+ * FLAGS
*/
-enum class message_format_t {
- STANDARD, ///< STANDARD - standard 11-bit CAN arbitration ID. */
- EXTENDED, ///< EXTENDED - an extended frame, with a 29-bit arbitration ID. */
- J1939, ///< J1939 - Format for j1939 messages
- INVALID, ///< INVALID - INVALID code used at initialization to signify that it isn't usable'*/
-};
+#define INVALID_FLAG 0x0001
+#define STANDARD_ID 0x0002
+#define EXTENDED_ID 0x0004
+#define BCM_PROTOCOL 0x0008
+#define J1939_PROTOCOL 0x0010
+#define J1939_ADDR_CLAIM_PROTOCOL 0x0020
+#define ISOTP_PROTOCOL 0x0040
+#define FD_FRAME 0x0800
/// @class message_t
///
protected:
uint32_t maxdlen_; ///< maxdlen_ - Max data length deduce from number of bytes read from the socket.*/
uint32_t length_; ///< length_ - the length of the data array. */
- message_format_t format_; ///< format_ - the format of the message's ID.*/
+ uint32_t flags_; ///< format_ - the format mask of the message*/
std::vector<uint8_t> data_; ///< data_ - The message's data field with a size of 8 which is the standard about CAN bus messages.*/
uint64_t timestamp_; ///< timestamp_ - timestamp of the received message*/
int sub_id_; ///< sub_id_ - Subscription index. */
- uint32_t flags_; ///< flags_ - flags of a CAN FD frame. Needed if we catch FD frames.*/
public:
message_t();
- message_t(uint32_t maxdlen, uint32_t length, message_format_t format, std::vector<uint8_t>& data, uint64_t timestamp, uint32_t flags);
+ message_t(uint32_t maxdlen, uint32_t length, uint32_t flags, std::vector<uint8_t>& data, uint64_t timestamp);
virtual ~message_t() = default;
int get_sub_id() const;
void set_data(std::vector<uint8_t> &data);
void set_sub_id(int sub_id);
void set_timestamp(uint64_t timestamp);
- message_format_t get_msg_format();
virtual bool is_set() = 0;
virtual std::string get_debug_message() = 0;
virtual uint32_t get_id() const = 0;
/// @return True if the active diagnostic request match the response.
bool diagnostic_manager_t::is_diagnostic_response(std::shared_ptr<message_t> m)
{
- if(m->get_msg_format() == message_format_t::STANDARD || m->get_msg_format() == message_format_t::EXTENDED)
+ if(m->get_flags()&STANDARD_ID || m->get_flags()&EXTENDED_ID)
{
if (m->get_id() >= 0x7e8 && m->get_id() <= 0x7ef)
return true;
*/
int socketcan_j1939_t::write_j1939_message(pgn_t pgn, std::vector<uint8_t> &data, uint32_t len_data)
{
- j1939_message_t msg = j1939_message_t(J1939_MAX_DLEN, len_data, message_format_t::J1939, data, 0, 0, pgn, 0);
+ j1939_message_t msg = j1939_message_t(len_data, data, 0, 0, pgn, 0);
msg.set_sockname(pgn,J1939_NO_NAME,J1939_NO_ADDR);
return write_message(msg);
}
#define INVALID_SOCKET -1
-/**
- * @enum socket_type
- * @brief The type of socket
- */
-enum class socket_type {
- BCM, ///< BCM - Socket BCM
- J1939_ADDR_CLAIM, ///< J1939 - Socket J1939
- J1939, ///< J1939 - Socket J1939
- INVALID
-};
-
namespace utils
{