Update agl-vcar to match test expectations
[apps/agl-service-can-low-level.git] / examples / agl-vcar / signals.json
index c1542eb..f3ca23d 100644 (file)
-{   "name": "AGL Virtual Car",
-       "version": "2.0",
-       "extra_sources": [],
-       "initializers": [],
-       "loopers": [],
-       "buses": {},
-       "commands": [],
-       "messages": {
-               "0x620": {
-                       "bus": "hs",
-                       "is_fd" : false,
-                       "is_j1939" : false,
-                       "signals": {
-                               "doors.driver.open": {
-                                       "generic_name": "doors.front_left.open",
-                                       "bit_position": 43,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "doors.passenger.open": {
-                                       "generic_name": "doors.front_right.open",
-                                       "bit_position": 44,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "doors.rearleft.open": {
-                                       "generic_name": "doors.rear_left.open",
-                                       "bit_position": 46,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "doors.rearright.open": {
-                                       "generic_name": "doors.rear_right.open",
-                                       "bit_position": 45,
-                                       "bit_size": 4,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "doors.coffer.open": {
-                                       "generic_name": "doors.boot.open",
-                                       "bit_position": 47,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"}
-                       }
-               },
-               "0x799": {
-                       "bus": "hs",
-                       "is_fd" : false,
-                       "is_j1939" : false,
-                       "signals": {
-                               "windows.driver.open": {
-                                       "generic_name": "windows.front_left.open",
-                                       "bit_position": 43,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "windows.passenger.open": {
-                                       "generic_name": "windows.front_right.open",
-                                       "bit_position": 44,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "windows.rearleft.open": {
-                                       "generic_name": "windows.rear_left.open",
-                                       "bit_position": 46,
-                                       "bit_size": 1,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"},
-                               "windows.rearright.open": {
-                                       "generic_name": "windows.rear_right.open",
-                                       "bit_position": 45,
-                                       "bit_size": 4,
-                                       "factor": 1.0,
-                                       "offset": 0,
-                                       "writable": true,
-                                       "decoder": "decoder_t::decode_boolean"}
-               }
-       },
-       "0x3D9": {
-       "bus": "hs",
-       "is_fd" : false,
-       "is_extended": false,
-       "is_j1939" : false,
-       "signals": {
-               "PT_FuelLevelPct": {
-                       "generic_name": "fuel.level",
-                       "bit_position": 8,
-                       "bit_size": 8,
-                       "factor": 0.392157,
-                       "offset": 0,
-                       "writable": true
-               },
-               "PT_EngineSpeed": {
-                       "generic_name": "engine.speed",
-                       "bit_position": 16,
-                       "bit_size": 16,
-                       "factor": 0.25,
-                       "offset": 0,
-                       "writable": true
-               },
-               "PT_FuelLevelLow": {
-                       "generic_name": "fuel.level.low",
-                       "bit_position": 55,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true,
-                       "decoder": "decoder_t::decode_boolean"
-               }
-       }
-       },
-       "0x4D1": {
-       "bus": "hs",
-       "is_fd" : false,
-       "is_extended": false,
-       "is_j1939" : false,
-       "signals": {
-               "PT_EngineOilTempHigh": {
-                       "generic_name": "engine.oil.temp.high",
-                       "bit_position": 7,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true,
-                       "decoder": "decoder_t::decode_boolean"
-               },
-               "PT_EngineOilTemp": {
-                       "generic_name": "engine.oil.temp",
-                       "bit_position": 16,
-                       "bit_size": 8,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true
-               }
-       }
-       },
-       "0x3E9": {
-       "bus": "hs",
-       "is_fd" : false,
-       "is_extended": false,
-       "is_j1939" : false,
-       "signals": {
-               "PT_VehicleAvgSpeed": {
-                       "generic_name": "vehicle.average.speed",
-                       "bit_position": 0,
-                       "bit_size": 15,
-                       "factor": 0.015625,
-                       "offset": 0,
-                       "writable": false
-               }
-       }
-       },
-       "0x30": {
-       "bus": "ls",
-       "is_fd" : false,
-       "is_extended": true,
-       "is_j1939" : false,
-       "signals": {
-               "LeftTemperature": {
-                       "generic_name": "hvac.temperature.left",
-                       "bit_position": 0,
-                       "bit_size": 8,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true
-               },
-               "RightTemperature": {
-                       "generic_name": "hvac.temperature.right",
-                       "bit_position": 8,
-                       "bit_size": 8,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true
-               },
-               "Temperature": {
-                       "generic_name": "hvac.temperature.average",
-                       "bit_position": 16,
-                       "bit_size": 8,
-                       "factor": 1,
-                       "offset": 0,
-                       "writable": true
-               },
-               "FanSpeed": {
-                       "generic_name": "hvac.fan.speed",
-                       "bit_position": 32,
-                       "bit_size": 8,
-                       "factor": 23.529411765,
-                       "offset": 0,
-                       "writable": true
-               }
-       }
-       },
-       "0x21": {
-       "bus": "ls",
-       "is_fd" : false,
-       "is_extended": false,
-       "is_j1939" : false,
-       "length" : 8,
-       "signals": {
-               "SW_Previous": {
-                       "generic_name": "steering_wheel.previous",
-                       "bit_position": 32,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_VolumeUp": {
-                       "generic_name": "steering_wheel.volume.up",
-                       "bit_position": 33,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_Mode": {
-                       "generic_name": "steering_wheel.mode",
-                       "bit_position": 34,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_VolumeDown": {
-                       "generic_name": "steering_wheel.volume.down",
-                       "bit_position": 35,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_Next": {
-                       "generic_name": "steering_wheel.next",
-                       "bit_position": 36,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_Info": {
-                       "generic_name": "steering_wheel.info",
-                       "bit_position": 38,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_VolumeMute": {
-                       "generic_name": "steering_wheel.volume.mute",
-                       "bit_position": 39,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_Voice": {
-                       "generic_name": "steering_wheel.voice",
-                       "bit_position": 45,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_PhoneHangup": {
-                       "generic_name": "steering_wheel.phone.hangup",
-                       "bit_position": 46,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_PhoneCall": {
-                       "generic_name": "steering_wheel.phone.call",
-                       "bit_position": 47,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseEnable": {
-                       "generic_name": "steering_wheel.cruise.enable",
-                       "bit_position": 48,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseResume": {
-                       "generic_name": "steering_wheel.cruise.resume",
-                       "bit_position": 49,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseSet": {
-                       "generic_name": "steering_wheel.cruise.set",
-                       "bit_position": 51,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseCancel": {
-                       "generic_name": "steering_wheel.cruise.cancel",
-                       "bit_position": 52,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseLimit": {
-                       "generic_name": "steering_wheel.cruise.limit",
-                       "bit_position": 54,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_CruiseDistance": {
-                       "generic_name": "steering_wheel.cruise.distance",
-                       "bit_position": 55,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_Horn": {
-                       "generic_name": "steering_wheel.horn",
-                       "bit_position": 56,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               },
-               "SW_LaneDepartureWarning": {
-                       "generic_name": "steering_wheel.lane_departure_warning",
-                       "bit_position": 63,
-                       "bit_size": 1,
-                       "factor": 1,
-                       "offset": 0,
-                       "decoder": "decoder_t::decode_boolean",
-                       "writable": false
-               }
-       }
-       }
-},
-"diagnostic_messages": [
-               {
-                       "bus": "hs",
-                       "pid": 4,
-                       "name": "engine.load",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 5,
-                       "name": "engine.coolant.temperature",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 10,
-                       "name": "fuel.pressure",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 11,
-                       "name": "intake.manifold.pressure",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 12,
-                       "name": "engine.speed",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 13,
-                       "name": "vehicle.speed",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 15,
-                       "name": "intake.air.temperature",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 16,
-                       "name": "mass.airflow",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 17,
-                       "name": "throttle.position",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 31,
-                       "name": "running.time",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 45,
-                       "name": "EGR.error",
-                       "frequency": 0,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 47,
-                       "name": "fuel.level",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 51,
-                       "name": "barometric.pressure",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 70,
-                       "name": "ambient.air.temperature",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 76,
-                       "name": "commanded.throttle.position",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 82,
-                       "name": "ethanol.fuel.percentage",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 90,
-                       "name": "accelerator.pedal.position",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 91,
-                       "name": "hybrid.battery-pack.remaining.life",
-                       "frequency": 5,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 92,
-                       "name": "engine.oil.temperature",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 94,
-                       "name": "engine.fuel.rate",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               },
-               {
-                       "bus": "hs",
-                       "pid": 99,
-                       "name": "engine.torque",
-                       "frequency": 1,
-                       "decoder": "decoder_t::decode_obd2_response"
-               }
-       ]
+{
+    "name": "AGL Virtual Car",
+    "version": "2.0",
+    "extra_sources": [],
+    "initializers": [],
+    "loopers": [],
+    "buses": {},
+    "commands": [],
+    "messages": {
+        "0x620": {
+            "bus": "hs",
+            "is_fd": false,
+            "is_j1939": false,
+            "signals": {
+                "doors.driver.open": {
+                    "generic_name": "doors.front_left.open",
+                    "bit_position": 43,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "doors.passenger.open": {
+                    "generic_name": "doors.front_right.open",
+                    "bit_position": 44,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "doors.rearleft.open": {
+                    "generic_name": "doors.rear_left.open",
+                    "bit_position": 46,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "doors.rearright.open": {
+                    "generic_name": "doors.rear_right.open",
+                    "bit_position": 45,
+                    "bit_size": 4,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "doors.coffer.open": {
+                    "generic_name": "doors.boot.open",
+                    "bit_position": 47,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                }
+            }
+        },
+        "0x799": {
+            "bus": "hs",
+            "is_fd": false,
+            "is_j1939": false,
+            "signals": {
+                "windows.driver.open": {
+                    "generic_name": "windows.front_left.open",
+                    "bit_position": 43,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "windows.passenger.open": {
+                    "generic_name": "windows.front_right.open",
+                    "bit_position": 44,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "windows.rearleft.open": {
+                    "generic_name": "windows.rear_left.open",
+                    "bit_position": 46,
+                    "bit_size": 1,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "windows.rearright.open": {
+                    "generic_name": "windows.rear_right.open",
+                    "bit_position": 45,
+                    "bit_size": 4,
+                    "factor": 1.0,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                }
+            }
+        },
+        "0x3D9": {
+            "bus": "hs",
+            "is_fd": true,
+            "is_extended": false,
+            "is_j1939": false,
+            "signals": {
+                "PT_FuelLevelPct": {
+                    "generic_name": "fuel.level",
+                    "bit_position": 8,
+                    "bit_size": 8,
+                    "factor": 0.392157,
+                    "offset": 0,
+                    "writable": true
+                },
+                "PT_EngineSpeed": {
+                    "generic_name": "engine.speed",
+                    "bit_position": 16,
+                    "bit_size": 16,
+                    "factor": 0.25,
+                    "offset": 0,
+                    "writable": true
+                },
+                "PT_FuelLevelLow": {
+                    "generic_name": "fuel.level.low",
+                    "bit_position": 55,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                }
+            }
+        },
+        "0x3DA": {
+            "bus": "hs",
+            "is_fd": true,
+            "is_extended": false,
+            "is_j1939": false,
+            "signals": {
+                "FD_PT_FuelLevelPct": {
+                    "generic_name": "fd.fuel.level",
+                    "bit_position": 8,
+                    "bit_size": 8,
+                    "factor": 0.392157,
+                    "offset": 0,
+                    "writable": true
+                },
+                "FD_PT_EngineSpeed": {
+                    "generic_name": "fd.engine.speed",
+                    "bit_position": 16,
+                    "bit_size": 16,
+                    "factor": 0.25,
+                    "offset": 0,
+                    "writable": true
+                },
+                "FD_PT_FuelLevelLow": {
+                    "generic_name": "fd.fuel.level.low",
+                    "bit_position": 55,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                }
+            }
+        },
+        "0x4D1": {
+            "bus": "hs",
+            "is_fd": false,
+            "is_extended": false,
+            "is_j1939": false,
+            "signals": {
+                "PT_EngineOilTempHigh": {
+                    "generic_name": "engine.oil.temp.high",
+                    "bit_position": 7,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true,
+                    "decoder": "decoder_t::decode_boolean"
+                },
+                "PT_EngineOilTemp": {
+                    "generic_name": "engine.oil.temp",
+                    "bit_position": 16,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true
+                }
+            }
+        },
+        "0x3E9": {
+            "bus": "hs",
+            "is_fd": false,
+            "is_extended": false,
+            "is_j1939": false,
+            "signals": {
+                "PT_VehicleAvgSpeed": {
+                    "generic_name": "vehicle.average.speed",
+                    "bit_position": 0,
+                    "bit_size": 15,
+                    "factor": 0.015625,
+                    "offset": 0,
+                    "writable": false
+                }
+            }
+        },
+        "0x30": {
+            "bus": "ls",
+            "is_fd": false,
+            "is_extended": true,
+            "is_j1939": false,
+            "signals": {
+                "LeftTemperature": {
+                    "generic_name": "hvac.temperature.left",
+                    "bit_position": 0,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true
+                },
+                "RightTemperature": {
+                    "generic_name": "hvac.temperature.right",
+                    "bit_position": 8,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true
+                },
+                "Temperature": {
+                    "generic_name": "hvac.temperature.average",
+                    "bit_position": 16,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "writable": true
+                },
+                "FanSpeed": {
+                    "generic_name": "hvac.fan.speed",
+                    "bit_position": 32,
+                    "bit_size": 8,
+                    "factor": 23.529411765,
+                    "offset": 0,
+                    "writable": true
+                }
+            }
+        },
+        "0x21": {
+            "bus": "ls",
+            "is_fd": false,
+            "is_extended": false,
+            "is_j1939": false,
+            "length": 8,
+            "signals": {
+                "SW_Previous": {
+                    "generic_name": "steering_wheel.previous",
+                    "bit_position": 32,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_VolumeUp": {
+                    "generic_name": "steering_wheel.volume.up",
+                    "bit_position": 33,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_Mode": {
+                    "generic_name": "steering_wheel.mode",
+                    "bit_position": 34,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_VolumeDown": {
+                    "generic_name": "steering_wheel.volume.down",
+                    "bit_position": 35,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_Next": {
+                    "generic_name": "steering_wheel.next",
+                    "bit_position": 36,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_Info": {
+                    "generic_name": "steering_wheel.info",
+                    "bit_position": 38,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_VolumeMute": {
+                    "generic_name": "steering_wheel.volume.mute",
+                    "bit_position": 39,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_Voice": {
+                    "generic_name": "steering_wheel.voice",
+                    "bit_position": 45,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_PhoneHangup": {
+                    "generic_name": "steering_wheel.phone.hangup",
+                    "bit_position": 46,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_PhoneCall": {
+                    "generic_name": "steering_wheel.phone.call",
+                    "bit_position": 47,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseEnable": {
+                    "generic_name": "steering_wheel.cruise.enable",
+                    "bit_position": 48,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseResume": {
+                    "generic_name": "steering_wheel.cruise.resume",
+                    "bit_position": 49,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseSet": {
+                    "generic_name": "steering_wheel.cruise.set",
+                    "bit_position": 51,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseCancel": {
+                    "generic_name": "steering_wheel.cruise.cancel",
+                    "bit_position": 52,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseLimit": {
+                    "generic_name": "steering_wheel.cruise.limit",
+                    "bit_position": 54,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_CruiseDistance": {
+                    "generic_name": "steering_wheel.cruise.distance",
+                    "bit_position": 55,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_Horn": {
+                    "generic_name": "steering_wheel.horn",
+                    "bit_position": 56,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                },
+                "SW_LaneDepartureWarning": {
+                    "generic_name": "steering_wheel.lane_departure_warning",
+                    "bit_position": 63,
+                    "bit_size": 1,
+                    "factor": 1,
+                    "offset": 0,
+                    "decoder": "decoder_t::decode_boolean",
+                    "writable": false
+                }
+            }
+        },
+        "61442": {
+            "comment": "Electronic Transmission Controller 1",
+            "length": 8,
+            "name": "ETC1",
+            "bus": "j1939",
+            "is_fd": false,
+            "is_extended": false,
+            "is_j1939": true,
+            "signals": {
+                "Trns.Trque.Converter.Lockup.Engaged": {
+                    "generic_name": "Trns.Trque.Converter.Lockup.Engaged",
+                    "bit_position": 2,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "State signal which indicates whether the torque converter lockup is engaged.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "TorqueConverterLockupDisengaged": [
+                            0
+                        ],
+                        "TorqueConverterLockupEngaged": [
+                            1
+                        ],
+                        "Error": [
+                            2
+                        ],
+                        "NotAvailable": [
+                            3
+                        ]
+                    }
+                },
+                "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess": {
+                    "generic_name": "Trns.Trq.Cnvrtr.Lckp.Trnstn.In.Prcess",
+                    "bit_position": 6,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "State signal indicating whether or not the transmission torque converter lock up clutch is transitioning between being",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "TransitionIsNotInProcess": [
+                            0
+                        ],
+                        "TransitionIsInProcess": [
+                            1
+                        ],
+                        "Error": [
+                            2
+                        ],
+                        "NotAvailable": [
+                            3
+                        ]
+                    }
+                },
+                "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl": {
+                    "generic_name": "Src.Addrss.Of.Ctrllng.Dvc.Fr.Trns.Cntrl",
+                    "bit_position": 56,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "The source address of the SAE J1939 device currently controlling the transmission.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true
+                },
+                "Momentary.Eng.Max.Power.Enable": {
+                    "generic_name": "Momentary.Eng.Max.Power.Enable",
+                    "bit_position": 36,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "Momentarily Requesting highest torque map from the engine control",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "notRqingMaxPowerAvailable": [
+                            0
+                        ],
+                        "mmntarilyRqingMaxPowerAvailable": [
+                            1
+                        ],
+                        "fault": [
+                            2
+                        ],
+                        "notAvailable": [
+                            3
+                        ]
+                    }
+                },
+                "Trans.Input.Shaft.Speed": {
+                    "generic_name": "Trans.Input.Shaft.Speed",
+                    "bit_position": 40,
+                    "bit_size": 16,
+                    "factor": 0.125,
+                    "offset": 0,
+                    "comment": "Rotational velocity of the primary shaft transferring power into the transmission.",
+                    "unit": "rpm",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true
+                },
+                "Progressive.Shift.Disable": {
+                    "generic_name": "Progressive.Shift.Disable",
+                    "bit_position": 34,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "Command signal used to indicate that progressive shifting by the engine should be disallowed.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "ProgressiveShiftIsNotDisabled": [
+                            0
+                        ],
+                        "ProgressiveShiftIsDisabled": [
+                            1
+                        ],
+                        "Reserved": [
+                            2
+                        ],
+                        "TakeNoAction": [
+                            3
+                        ]
+                    }
+                },
+                "Eng.Momentary.Overspeed.Enable": {
+                    "generic_name": "Eng.Momentary.Overspeed.Enable",
+                    "bit_position": 32,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "Command signal used to indicate that the engine speed may be boosted up to the maximum engine overspeed value to",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "MomentaryEngOverspeedIsDisabled": [
+                            0
+                        ],
+                        "MomentaryEngOverspeedIsEnabled": [
+                            1
+                        ],
+                        "Reserved": [
+                            2
+                        ],
+                        "TakeNoAction": [
+                            3
+                        ]
+                    }
+                },
+                "Percent.Clutch.Slip": {
+                    "generic_name": "Percent.Clutch.Slip",
+                    "bit_position": 24,
+                    "bit_size": 8,
+                    "factor": 0.4,
+                    "offset": 0,
+                    "comment": "Parameter which represents the ratio of input shaft speed to current engine speed (in percent).",
+                    "unit": "%",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true
+                },
+                "Trans.Output.Shaft.Speed": {
+                    "generic_name": "Trans.Output.Shaft.Speed",
+                    "bit_position": 8,
+                    "bit_size": 16,
+                    "factor": 0.125,
+                    "offset": 0,
+                    "comment": "Calculated speed of the transmission output shaft.",
+                    "unit": "rpm",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true
+                },
+                "Trans.Shift.In.Process": {
+                    "generic_name": "Trans.Shift.In.Process",
+                    "bit_position": 4,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "Indicates that the transmission is in process of shifting from the current gear to the selected gear.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "ShiftIsNotInProcess": [
+                            0
+                        ],
+                        "ShiftInProcess": [
+                            1
+                        ],
+                        "Error": [
+                            2
+                        ],
+                        "NotAvailable": [
+                            3
+                        ]
+                    }
+                },
+                "Trans.Driveline.Engaged": {
+                    "generic_name": "Trans.Driveline.Engaged",
+                    "bit_position": 0,
+                    "bit_size": 2,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "Driveline engaged indicates the transmission controlled portion of the driveline is engaged sufficiently to allow a transfer",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "writable": true,
+                    "states": {
+                        "DrivelineDisengaged": [
+                            0
+                        ],
+                        "DrivelineEngaged": [
+                            1
+                        ],
+                        "Error": [
+                            2
+                        ],
+                        "NotAvailable": [
+                            3
+                        ]
+                    }
+                }
+            }
+        },
+        "61444": {
+            "comment": "Electronic Engine Controller 1",
+            "length": 8,
+            "name": "EEC1",
+            "bus": "j1939",
+            "is_fd": false,
+            "is_j1939": true,
+            "signals": {
+                "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl": {
+                    "generic_name": "Src.AddrssOf.Ctrllng.Dvc.Fr.Eng.Cntrl",
+                    "bit_position": 40,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "The source address of the SAE J1939 device currently controlling the engine.",
+                    "is_big_endian": false,
+                    "sign": 0
+                },
+                "Actl.Eng.Prcnt.Trque.High.Resolution": {
+                    "generic_name": "Actl.Eng.Prcnt.Trque.High.Resolution",
+                    "bit_position": 4,
+                    "bit_size": 4,
+                    "factor": 0.125,
+                    "offset": 0,
+                    "comment": "This parameter displays an additional torque in percent of the reference engine torque.",
+                    "unit": "%",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "states": {
+                        "0000": [
+                            0
+                        ],
+                        "0125": [
+                            1
+                        ],
+                        "0875": [
+                            7
+                        ],
+                        "1111NotAvailable": [
+                            8
+                        ]
+                    }
+                },
+                "Eng.Demand.Percent.Torque": {
+                    "generic_name": "Eng.Demand.Percent.Torque",
+                    "bit_position": 56,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": -125,
+                    "comment": "The requested torque output of the engine by all dynamic internal inputs, including smoke control, noise control and low",
+                    "unit": "%",
+                    "is_big_endian": false,
+                    "sign": 0
+                },
+                "Eng.Starter.Mode": {
+                    "generic_name": "Eng.Starter.Mode",
+                    "bit_position": 48,
+                    "bit_size": 4,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "There are several phases in a starting action and different reasons why a start cannot take place.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "states": {
+                        "startNotRqed": [
+                            0
+                        ],
+                        "starterActiveGearNotEngaged": [
+                            1
+                        ],
+                        "starterActiveGearEngaged": [
+                            2
+                        ],
+                        "strtFnshdStrtrNtActvAftrHvngBnA": [
+                            3
+                        ],
+                        "strtrInhbtdDToEngAlreadyRunning": [
+                            4
+                        ],
+                        "strtrInhbtdDTEngNtReadyForStart": [
+                            5
+                        ],
+                        "strtrInhbtdDTDrvlnEnggdOthrTrns": [
+                            6
+                        ],
+                        "strtrInhbtdDToActiveImmobilizer": [
+                            7
+                        ],
+                        "strtrInhbtdDueToStarterOvertemp": [
+                            8
+                        ],
+                        "1011Reserved": [
+                            9
+                        ],
+                        "starterInhibitedReasonUnknown": [
+                            12
+                        ],
+                        "error": [
+                            14
+                        ],
+                        "notAvailable": [
+                            15
+                        ]
+                    }
+                },
+                "Eng.Speed": {
+                    "generic_name": "Eng.Speed",
+                    "bit_position": 24,
+                    "bit_size": 16,
+                    "factor": 0.125,
+                    "offset": 0,
+                    "comment": "Actual engine speed which is calculated over a minimum crankshaft angle of 720 degrees divided by the number of cylinders.",
+                    "unit": "rpm",
+                    "is_big_endian": false,
+                    "sign": 0
+                },
+                "Actual.Eng.Percent.Torque": {
+                    "generic_name": "Actual.Eng.Percent.Torque",
+                    "bit_position": 16,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": -125,
+                    "comment": "The calculated output torque of the engine.",
+                    "unit": "%",
+                    "is_big_endian": false,
+                    "sign": 0
+                },
+                "Drivers.Demand.Eng.Percent.Torque": {
+                    "generic_name": "Drivers.Demand.Eng.Percent.Torque",
+                    "bit_position": 8,
+                    "bit_size": 8,
+                    "factor": 1,
+                    "offset": -125,
+                    "comment": "The requested torque output of the engine by the driver.",
+                    "unit": "%",
+                    "is_big_endian": false,
+                    "sign": 0
+                },
+                "Eng.Torque.Mode": {
+                    "generic_name": "Eng.Torque.Mode",
+                    "bit_position": 0,
+                    "bit_size": 4,
+                    "factor": 1,
+                    "offset": 0,
+                    "comment": "State signal which indicates which engine torque mode is currently generating, limiting, or controlling the torque.",
+                    "is_big_endian": false,
+                    "sign": 0,
+                    "states": {
+                        "Low idle governor/no request (de": [
+                            0
+                        ],
+                        "Accelerator pedal/operator selec": [
+                            1
+                        ],
+                        "Cruise control": [
+                            2
+                        ],
+                        "PTO governor": [
+                            3
+                        ],
+                        "Road speed governor": [
+                            4
+                        ],
+                        "ASR control": [
+                            5
+                        ],
+                        "Transmission control": [
+                            6
+                        ],
+                        "ABS control": [
+                            7
+                        ],
+                        "Torque limiting": [
+                            8
+                        ],
+                        "High speed governor": [
+                            9
+                        ],
+                        "Braking system": [
+                            10
+                        ],
+                        "Remote accelerator": [
+                            11
+                        ],
+                        "Not available": [
+                            15
+                        ]
+                    }
+                }
+            }
+        },
+        "130306": {
+            "name": "Wind.Data",
+            "bus": "j1939",
+            "comment": "Wind Data",
+            "length": 8,
+            "is_fd": false,
+            "is_extended": false,
+            "is_j1939": true,
+            "byte_frame_is_big_endian": true,
+            "bit_position_reversed": true,
+            "signals": {
+                "Sid": {
+                    "bit_position": 0,
+                    "bit_size": 8,
+                    "sign": 0,
+                    "generic_name": "Wind.Data.Sid"
+                },
+                "Wind.Speed": {
+                    "bit_position": 8,
+                    "bit_size": 16,
+                    "factor": 0.01,
+                    "sign": 0,
+                    "unit": "m/s",
+                    "generic_name": "Wind.Data.Wind.Speed"
+                },
+                "Wind.Angle": {
+                    "bit_position": 24,
+                    "bit_size": 16,
+                    "factor": 0.0001,
+                    "sign": 0,
+                    "unit": "rad",
+                    "generic_name": "Wind.Data.Wind.Angle"
+                },
+                "Reference": {
+                    "bit_position": 40,
+                    "bit_size": 3,
+                    "decoder": "decoder_t::decode_state",
+                    "sign": 0,
+                    "states": {
+                        "True (ground referenced to North)": [
+                            0
+                        ],
+                        "Magnetic (ground referenced to Magnetic North)": [
+                            1
+                        ],
+                        "Apparent": [
+                            2
+                        ],
+                        "True (boat referenced)": [
+                            3
+                        ],
+                        "True (water referenced)": [
+                            4
+                        ]
+                    },
+                    "generic_name": "Wind.Data.Reference"
+                },
+                "Reserved": {
+                    "bit_position": 43,
+                    "bit_size": 21,
+                    "decoder": "decoder_t::decode_bytes",
+                    "sign": 0,
+                    "generic_name": "Wind.Data.Reserved"
+                }
+            }
+        }
+    },
+    "diagnostic_messages": [
+        {
+            "bus": "hs",
+            "pid": 4,
+            "name": "engine.load",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 5,
+            "name": "engine.coolant.temperature",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 10,
+            "name": "fuel.pressure",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 11,
+            "name": "intake.manifold.pressure",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 12,
+            "name": "engine.speed",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 13,
+            "name": "vehicle.speed",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 15,
+            "name": "intake.air.temperature",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 16,
+            "name": "mass.airflow",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 17,
+            "name": "throttle.position",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 31,
+            "name": "running.time",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 45,
+            "name": "EGR.error",
+            "frequency": 0,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 47,
+            "name": "fuel.level",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 51,
+            "name": "barometric.pressure",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 70,
+            "name": "ambient.air.temperature",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 76,
+            "name": "commanded.throttle.position",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 82,
+            "name": "ethanol.fuel.percentage",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 90,
+            "name": "accelerator.pedal.position",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 91,
+            "name": "hybrid.battery-pack.remaining.life",
+            "frequency": 5,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 92,
+            "name": "engine.oil.temperature",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 94,
+            "name": "engine.fuel.rate",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        },
+        {
+            "bus": "hs",
+            "pid": 99,
+            "name": "engine.torque",
+            "frequency": 1,
+            "decoder": "decoder_t::decode_obd2_response"
+        }
+    ]
 }