From ab6a4a5eb285a1ca88b3ad87ee035b9956e253ed Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 20 Jul 2017 16:40:35 +0200 Subject: Examples reorganization Separated by protocols and created signals from reversed engineered signals. Meld all used signals into an "agl-vcar" folder to be used as default. Change-Id: I27f7bc227a6fcea3db6672819e6a4d7bbf09863b Signed-off-by: Romain Forlot --- conf.d/app-templates | 2 +- examples/OBD2/application-generated.cpp | 274 +++++++++ examples/OBD2/signals.json | 158 ++++++ examples/agl-vcar/application-generated.cpp | 640 ++++++++++++++++++++++ examples/agl-vcar/signals.json | 323 +++++++++++ examples/basic/application-generated.cpp | 203 +++++++ examples/basic/generate_example.cpp | 203 ------- examples/engine/application-generated.cpp | 163 ++++++ examples/engine/signals.json | 68 +++ examples/hvac/application-generated.cpp | 119 ++++ examples/hvac/signals.json | 345 ++---------- examples/toyota/auris/application-generated.cpp | 564 +++++++++++++++++++ examples/toyota/auris/signals.json | 290 ++++++++++ examples/toyota/configuration-generated.cpp | 339 ------------ examples/toyota/signals.json | 290 ---------- low-can-binding/binding/application-generated.cpp | 78 ++- low-can-binding/can/can-bus-device.hpp | 65 +++ 17 files changed, 2977 insertions(+), 1147 deletions(-) create mode 100644 examples/OBD2/application-generated.cpp create mode 100644 examples/OBD2/signals.json create mode 100644 examples/agl-vcar/application-generated.cpp create mode 100644 examples/agl-vcar/signals.json create mode 100644 examples/basic/application-generated.cpp delete mode 100644 examples/basic/generate_example.cpp create mode 100644 examples/engine/application-generated.cpp create mode 100644 examples/engine/signals.json create mode 100644 examples/hvac/application-generated.cpp create mode 100644 examples/toyota/auris/application-generated.cpp create mode 100644 examples/toyota/auris/signals.json delete mode 100644 examples/toyota/configuration-generated.cpp delete mode 100644 examples/toyota/signals.json create mode 100644 low-can-binding/can/can-bus-device.hpp diff --git a/conf.d/app-templates b/conf.d/app-templates index bac77a7..011277d 160000 --- a/conf.d/app-templates +++ b/conf.d/app-templates @@ -1 +1 @@ -Subproject commit bac77a71ab848131dfc85670117af22483458702 +Subproject commit 011277d2af3cfee674b50fa8a7362e91e8ad29e8 diff --git a/examples/OBD2/application-generated.cpp b/examples/OBD2/application-generated.cpp new file mode 100644 index 0000000..f66748b --- /dev/null +++ b/examples/OBD2/application-generated.cpp @@ -0,0 +1,274 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + {std::make_shared(diagnostic_message_t{ + 4, + "engine.load", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 5, + "engine.coolant.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 10, + "fuel.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 11, + "intake.manifold.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 12, + "engine.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 13, + "vehicle.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 15, + "intake.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 16, + "mass.airflow", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 17, + "throttle.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 31, + "running.time", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 45, + "EGR.error", + 0, + 0, + UNIT::INVALID, + 0.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 47, + "fuel.level", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 51, + "barometric.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 70, + "ambient.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 76, + "commanded.throttle.position", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 82, + "ethanol.fuel.percentage", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 90, + "accelerator.pedal.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 91, + "hybrid.battery-pack.remaining.life", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 92, + "engine.oil.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 94, + "engine.fuel.rate", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 99, + "engine.torque", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return "hs"; +} + + diff --git a/examples/OBD2/signals.json b/examples/OBD2/signals.json new file mode 100644 index 0000000..8927629 --- /dev/null +++ b/examples/OBD2/signals.json @@ -0,0 +1,158 @@ +{ "name": "example", + "extra_sources": [], + "initializers": [], + "loopers": [], + "buses": {}, + "commands": [], + "messages": { + }, +"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" + } + ] +} diff --git a/examples/agl-vcar/application-generated.cpp b/examples/agl-vcar/application-generated.cpp new file mode 100644 index 0000000..876b95b --- /dev/null +++ b/examples/agl-vcar/application-generated.cpp @@ -0,0 +1,640 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + {std::make_shared(can_message_definition_t{"ls",0x30,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "hvac.fan.speed", + 32, + 8, + 23.5294f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.left", + 0, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.right", + 8, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.average", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x3D9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.speed", + 16, + 16, + 0.250000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level.low", + 55, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level", + 8, + 8, + 0.392157f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x3E9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "vehicle.average.speed", + 0, + 15, + 0.0156250f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x4D1,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.oil.temp", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "engine.oil.temp.high", + 7, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x620,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "doors.boot.open", + 47, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.front_left.open", + 43, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.front_right.open", + 44, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.rear_left.open", + 46, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.rear_right.open", + 45, + 4, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x799,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "windows.front_left.open", + 43, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.front_right.open", + 44, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.rear_left.open", + 46, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.rear_right.open", + 45, + 4, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::decode_boolean, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + {std::make_shared(diagnostic_message_t{ + 4, + "engine.load", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 5, + "engine.coolant.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 10, + "fuel.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 11, + "intake.manifold.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 12, + "engine.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 13, + "vehicle.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 15, + "intake.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 16, + "mass.airflow", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 17, + "throttle.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 31, + "running.time", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 45, + "EGR.error", + 0, + 0, + UNIT::INVALID, + 0.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 47, + "fuel.level", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 51, + "barometric.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 70, + "ambient.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 76, + "commanded.throttle.position", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 82, + "ethanol.fuel.percentage", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 90, + "accelerator.pedal.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 91, + "hybrid.battery-pack.remaining.life", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 92, + "engine.oil.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 94, + "engine.fuel.rate", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 99, + "engine.torque", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return "hs"; +} + + diff --git a/examples/agl-vcar/signals.json b/examples/agl-vcar/signals.json new file mode 100644 index 0000000..9fa9b30 --- /dev/null +++ b/examples/agl-vcar/signals.json @@ -0,0 +1,323 @@ +{ "name": "AGL Virtual Car", + "extra_sources": [], + "initializers": [], + "loopers": [], + "buses": {}, + "commands": [], + "messages": { + "0x620": { + "bus": "hs", + "signals": { + "doors.driver.open": { + "generic_name": "doors.front_left.open", + "bit_position": 43, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "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, + "decoder": "decoder_t::booleanDecoder"}, + "doors.rearleft.open": { + "generic_name": "doors.rear_left.open", + "bit_position": 46, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.rearright.open": { + "generic_name": "doors.rear_right.open", + "bit_position": 45, + "bit_size": 4, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.coffer.open": { + "generic_name": "doors.boot.open", + "bit_position": 47, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"} + } + }, + "0x799": { + "bus": "hs", + "signals": { + "windows.driver.open": { + "generic_name": "windows.front_left.open", + "bit_position": 43, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.passenger.open": { + "generic_name": "windows.front_right.open", + "bit_position": 44, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.rearleft.open": { + "generic_name": "windows.rear_left.open", + "bit_position": 46, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.rearright.open": { + "generic_name": "windows.rear_right.open", + "bit_position": 45, + "bit_size": 4, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"} + } + }, + "0x3D9": { + "bus": "hs", + "signals": { + "PT_FuelLevelPct": { + "generic_name": "fuel.level", + "bit_position": 8, + "bit_size": 8, + "factor": 0.392157, + "offset": 0 + }, + "PT_EngineSpeed": { + "generic_name": "engine.speed", + "bit_position": 16, + "bit_size": 16, + "factor": 0.25, + "offset": 0 + }, + "PT_FuelLevelLow": { + "generic_name": "fuel.level.low", + "bit_position": 55, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + } + } + }, + "0x4D1": { + "bus": "hs", + "signals": { + "PT_EngineOilTempHigh": { + "generic_name": "engine.oil.temp.high", + "bit_position": 7, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + }, + "PT_EngineOilTemp": { + "generic_name": "engine.oil.temp", + "bit_position": 16, + "bit_size": 8, + "factor": 1, + "offset": 0 + } + } + }, + "0x3E9": { + "bus": "hs", + "signals": { + "PT_VehicleAvgSpeed": { + "generic_name": "vehicle.average.speed", + "bit_position": 0, + "bit_size": 15, + "factor": 0.015625, + "offset": 0 + } + } + }, + "0x30": { + "bus": "ls", + "signals": { + "LeftTemperature": { + "generic_name": "hvac.temperature.left", + "bit_position": 0, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "RightTemperature": { + "generic_name": "hvac.temperature.right", + "bit_position": 8, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "Temperature": { + "generic_name": "hvac.temperature.average", + "bit_position": 16, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "FanSpeed": { + "generic_name": "hvac.fan.speed", + "bit_position": 32, + "bit_size": 8, + "factor": 23.529411765, + "offset": 0 + } + } + } +}, +"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" + } + ] +} diff --git a/examples/basic/application-generated.cpp b/examples/basic/application-generated.cpp new file mode 100644 index 0000000..88ee94b --- /dev/null +++ b/examples/basic/application-generated.cpp @@ -0,0 +1,203 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + + +// >>>>> handlers.cpp >>>>> +#include "can/canread.h" + +using openxc::can::read::publishNumericalMessage; + +void handleSteeringWheelMessage(CanMessage* message, + CanSignal* signals, int signalCount, Pipeline* pipeline) { + publishNumericalMessage("latitude", 42.0, pipeline); +} + +openxc_DynamicField handleInverted(CanSignal* signal, CanSignal* signals, + int signalCount, float value, bool* send) { + return openxc::payload::wrapNumber(value * -1); +} + +void initializeMyStuff() { } + +void initializeOtherStuff() { } + +void myLooper() { + // this function will be called once each time through the main loop, after + // all CAN message processing has been completed +} + +// <<<<< handlers.cpp <<<<< + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + {std::make_shared(can_message_definition_t{"hs",0x128,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine_speed", + 12, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(15.0000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "GearshiftPosition", + 41, + 3, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + {1,"FIRST"}, + {4,"FOURTH"}, + {6,"NEUTRAL"}, + {5,"REVERSE"}, + {2,"SECOND"}, + {3,"THIRD"} + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "SteeringWheelAngle", + 52, + 12, + 0.153920f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + handleUnsignedSteeringWheelAngle, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "steering_wheel_angle_error", + 44, + 12, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + ignoreDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "steering_angle_sign", + 52, + 12, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + ignoreDecoder, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + {std::make_shared(diagnostic_message_t{ + 12, + "", + 0, + 0, + UNIT::INVALID, + 1.00000f, + handleObd2Pid, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 12, + "", + 0, + 0, + UNIT::INVALID, + 1.00000f, + nullptr, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 6, + "", + 0, + 0, + UNIT::INVALID, + 1.00000f, + handleMyDiagRequest, + nullptr, + true + })} + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return "hs"; +} + + diff --git a/examples/basic/generate_example.cpp b/examples/basic/generate_example.cpp deleted file mode 100644 index 88ee94b..0000000 --- a/examples/basic/generate_example.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "application.hpp" -#include "../can/can-decoder.hpp" - - -// >>>>> handlers.cpp >>>>> -#include "can/canread.h" - -using openxc::can::read::publishNumericalMessage; - -void handleSteeringWheelMessage(CanMessage* message, - CanSignal* signals, int signalCount, Pipeline* pipeline) { - publishNumericalMessage("latitude", 42.0, pipeline); -} - -openxc_DynamicField handleInverted(CanSignal* signal, CanSignal* signals, - int signalCount, float value, bool* send) { - return openxc::payload::wrapNumber(value * -1); -} - -void initializeMyStuff() { } - -void initializeOtherStuff() { } - -void myLooper() { - // this function will be called once each time through the main loop, after - // all CAN message processing has been completed -} - -// <<<<< handlers.cpp <<<<< - -application_t::application_t() - : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} - , can_message_set_{ - {std::make_shared(can_message_set_t{0,"example", - { // beginning can_message_definition_ vector - {std::make_shared(can_message_definition_t{"hs",0x128,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, - { // beginning can_signals vector - {std::make_shared (can_signal_t{ - "engine_speed", - 12, - 8, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(15.0000f), - true, - false, - { - }, - false, - nullptr, - nullptr, - false - })}, - {std::make_shared (can_signal_t{ - "GearshiftPosition", - 41, - 3, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - {1,"FIRST"}, - {4,"FOURTH"}, - {6,"NEUTRAL"}, - {5,"REVERSE"}, - {2,"SECOND"}, - {3,"THIRD"} - }, - false, - nullptr, - nullptr, - false - })}, - {std::make_shared (can_signal_t{ - "SteeringWheelAngle", - 52, - 12, - 0.153920f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - handleUnsignedSteeringWheelAngle, - nullptr, - false - })}, - {std::make_shared (can_signal_t{ - "steering_wheel_angle_error", - 44, - 12, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - ignoreDecoder, - nullptr, - false - })}, - {std::make_shared (can_signal_t{ - "steering_angle_sign", - 52, - 12, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - ignoreDecoder, - nullptr, - false - })} - } // end can_signals vector - })} // end can_message_definition entry - - }, // end can_message_definition vector - { // beginning diagnostic_messages_ vector - {std::make_shared(diagnostic_message_t{ - 12, - "", - 0, - 0, - UNIT::INVALID, - 1.00000f, - handleObd2Pid, - nullptr, - true - })} -, {std::make_shared(diagnostic_message_t{ - 12, - "", - 0, - 0, - UNIT::INVALID, - 1.00000f, - nullptr, - nullptr, - true - })} -, {std::make_shared(diagnostic_message_t{ - 6, - "", - 0, - 0, - UNIT::INVALID, - 1.00000f, - handleMyDiagRequest, - nullptr, - true - })} - - } // end diagnostic_messages_ vector - })} // end can_message_set entry - } // end can_message_set vector -{ - for(auto& cms: can_message_set_) - { - std::vector >& can_messages_definition = cms->get_can_message_definition(); - for(auto& cmd : can_messages_definition) - { - cmd->set_parent(cms.get()); - std::vector >& can_signals = cmd->get_can_signals(); - for(auto& sig: can_signals) - { - sig->set_parent(cmd.get()); - } - } - - std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); - for(auto& dm : diagnostic_messages) - { - dm->set_parent(cms.get()); - } - } - } - -const std::string application_t::get_diagnostic_bus() const -{ - return "hs"; -} - - diff --git a/examples/engine/application-generated.cpp b/examples/engine/application-generated.cpp new file mode 100644 index 0000000..cc123b7 --- /dev/null +++ b/examples/engine/application-generated.cpp @@ -0,0 +1,163 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + {std::make_shared(can_message_definition_t{"hs",0x3D9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.speed", + 16, + 16, + 0.250000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level.low", + 55, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level", + 8, + 8, + 0.392157f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x3E9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "vehicle.average.speed", + 0, + 15, + 0.0156250f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x4D1,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.oil.temp", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "engine.oil.temp.high", + 7, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return ""; +} + + diff --git a/examples/engine/signals.json b/examples/engine/signals.json new file mode 100644 index 0000000..5aaf656 --- /dev/null +++ b/examples/engine/signals.json @@ -0,0 +1,68 @@ +{ "name": "example", + "extra_sources": [], + "initializers": [], + "loopers": [], + "buses": {}, + "commands": [], + "messages": { + "0x3D9": { + "bus": "hs", + "signals": { + "PT_FuelLevelPct": { + "generic_name": "fuel.level", + "bit_position": 8, + "bit_size": 8, + "factor": 0.392157, + "offset": 0 + }, + "PT_EngineSpeed": { + "generic_name": "engine.speed", + "bit_position": 16, + "bit_size": 16, + "factor": 0.25, + "offset": 0 + }, + "PT_FuelLevelLow": { + "generic_name": "fuel.level.low", + "bit_position": 55, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + } + } + }, + "0x4D1": { + "bus": "hs", + "signals": { + "PT_EngineOilTempHigh": { + "generic_name": "engine.oil.temp.high", + "bit_position": 7, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + }, + "PT_EngineOilTemp": { + "generic_name": "engine.oil.temp", + "bit_position": 16, + "bit_size": 8, + "factor": 1, + "offset": 0 + } + } + }, + "0x3E9": { + "bus": "hs", + "signals": { + "PT_VehicleAvgSpeed": { + "generic_name": "vehicle.average.speed", + "bit_position": 0, + "bit_size": 15, + "factor": 0.015625, + "offset": 0 + } + } + } +} +} diff --git a/examples/hvac/application-generated.cpp b/examples/hvac/application-generated.cpp new file mode 100644 index 0000000..67b0924 --- /dev/null +++ b/examples/hvac/application-generated.cpp @@ -0,0 +1,119 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + {std::make_shared(can_message_definition_t{"ls",0x30,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "hvac.fan.speed", + 32, + 8, + 23.5294f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.left", + 0, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.right", + 8, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.average", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return ""; +} + + diff --git a/examples/hvac/signals.json b/examples/hvac/signals.json index 06dcd8b..81ad64b 100644 --- a/examples/hvac/signals.json +++ b/examples/hvac/signals.json @@ -5,319 +5,38 @@ "buses": {}, "commands": [], "messages": { - "0x620": { - "bus": "hs", - "signals": { - "doors.driver.open": { - "generic_name": "doors.front_left.open", - "bit_position": 43, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.passenger.open": { - "generic_name": "doors.front_right.open", - "bit_position": 44, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.rearleft.open": { - "generic_name": "doors.rear_left.open", - "bit_position": 46, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.rearright.open": { - "generic_name": "doors.rear_right.open", - "bit_position": 45, - "bit_size": 4, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.coffer.open": { - "generic_name": "doors.boot.open", - "bit_position": 47, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"} - } - }, - "0x799": { - "bus": "hs", - "signals": { - "windows.driver.open": { - "generic_name": "windows.front_left.open", - "bit_position": 43, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.passenger.open": { - "generic_name": "windows.front_right.open", - "bit_position": 44, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.rearleft.open": { - "generic_name": "windows.rear_left.open", - "bit_position": 46, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.rearright.open": { - "generic_name": "windows.rear_right.open", - "bit_position": 45, - "bit_size": 4, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"} - } - }, - "0x3D9": { - "bus": "hs", - "signals": { - "PT_FuelLevelPct": { - "generic_name": "fuel.level", - "bit_position": 8, - "bit_size": 8, - "factor": 0.392157, - "offset": 0 - }, - "PT_EngineSpeed": { - "generic_name": "engine.speed", - "bit_position": 16, - "bit_size": 16, - "factor": 0.25, - "offset": 0 - }, - "PT_FuelLevelLow": { - "generic_name": "fuel.level.low", - "bit_position": 55, - "bit_size": 1, - "factor": 1, - "offset": 0, - "decoder": "decoder_t::booleanDecoder" - } - } - }, - "0x4D1": { - "bus": "hs", - "signals": { - "PT_EngineOilTempHigh": { - "generic_name": "engine.oil.temp.high", - "bit_position": 7, - "bit_size": 1, - "factor": 1, - "offset": 0, - "decoder": "decoder_t::booleanDecoder" - }, - "PT_EngineOilTemp": { - "generic_name": "engine.oil.temp", - "bit_position": 16, - "bit_size": 8, - "factor": 1, - "offset": 0 - } - } - }, - "0x3E9": { - "bus": "hs", - "signals": { - "PT_VehicleAvgSpeed": { - "generic_name": "vehicle.average.speed", - "bit_position": 0, - "bit_size": 15, - "factor": 0.015625, - "offset": 0 + "0x30": { + "bus": "ls", + "signals": { + "LeftTemperature": { + "generic_name": "hvac.temperature.left", + "bit_position": 0, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "RightTemperature": { + "generic_name": "hvac.temperature.right", + "bit_position": 8, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "Temperature": { + "generic_name": "hvac.temperature.average", + "bit_position": 16, + "bit_size": 8, + "factor": 1, + "offset": 0 + }, + "FanSpeed": { + "generic_name": "hvac.fan.speed", + "bit_position": 32, + "bit_size": 8, + "factor": 23.529411765, + "offset": 0 + } } } - }, - "0x30": { - "bus": "ls", - "signals": { - "LeftTemperature": { - "generic_name": "hvac.temperature.left", - "bit_position": 0, - "bit_size": 8, - "factor": 1, - "offset": 0 - }, - "RightTemperature": { - "generic_name": "hvac.temperature.right", - "bit_position": 8, - "bit_size": 8, - "factor": 1, - "offset": 0 - }, - "Temperature": { - "generic_name": "hvac.temperature.average", - "bit_position": 16, - "bit_size": 8, - "factor": 1, - "offset": 0 - }, - "FanSpeed": { - "generic_name": "hvac.fan.speed", - "bit_position": 32, - "bit_size": 8, - "factor": 23.529411765, - "offset": 0 - } - } - } -}, -"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" - } - ] +} } diff --git a/examples/toyota/auris/application-generated.cpp b/examples/toyota/auris/application-generated.cpp new file mode 100644 index 0000000..60a21f5 --- /dev/null +++ b/examples/toyota/auris/application-generated.cpp @@ -0,0 +1,564 @@ +#include "application.hpp" +#include "../can/can-decoder.hpp" + +application_t::application_t() + : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} + , can_message_set_{ + {std::make_shared(can_message_set_t{0,"example", + { // beginning can_message_definition_ vector + {std::make_shared(can_message_definition_t{"hs",0x3D9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.speed", + 16, + 16, + 0.250000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level.low", + 55, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "fuel.level", + 8, + 8, + 0.392157f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x3E9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "vehicle.average.speed", + 0, + 15, + 0.0156250f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x4D1,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "engine.oil.temp", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "engine.oil.temp.high", + 7, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x620,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "doors.boot.open", + 47, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.front_left.open", + 43, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.front_right.open", + 44, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.rear_left.open", + 46, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "doors.rear_right.open", + 45, + 4, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x799,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "windows.front_left.open", + 43, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.front_right.open", + 44, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.rear_left.open", + 46, + 1, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "windows.rear_right.open", + 45, + 4, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + decoder_t::booleanDecoder, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry + + }, // end can_message_definition vector + { // beginning diagnostic_messages_ vector + {std::make_shared(diagnostic_message_t{ + 4, + "engine.load", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 5, + "engine.coolant.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 10, + "fuel.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 11, + "intake.manifold.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 12, + "engine.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 13, + "vehicle.speed", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 15, + "intake.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 16, + "mass.airflow", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 17, + "throttle.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 31, + "running.time", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 45, + "EGR.error", + 0, + 0, + UNIT::INVALID, + 0.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 47, + "fuel.level", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 51, + "barometric.pressure", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 70, + "ambient.air.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 76, + "commanded.throttle.position", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 82, + "ethanol.fuel.percentage", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 90, + "accelerator.pedal.position", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 91, + "hybrid.battery-pack.remaining.life", + 0, + 0, + UNIT::INVALID, + 5.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 92, + "engine.oil.temperature", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 94, + "engine.fuel.rate", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} +, {std::make_shared(diagnostic_message_t{ + 99, + "engine.torque", + 0, + 0, + UNIT::INVALID, + 1.00000f, + decoder_t::decode_obd2_response, + nullptr, + true + })} + + } // end diagnostic_messages_ vector + })} // end can_message_set entry + } // end can_message_set vector +{ + for(auto& cms: can_message_set_) + { + std::vector >& can_messages_definition = cms->get_can_message_definition(); + for(auto& cmd : can_messages_definition) + { + cmd->set_parent(cms.get()); + std::vector >& can_signals = cmd->get_can_signals(); + for(auto& sig: can_signals) + { + sig->set_parent(cmd.get()); + } + } + + std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); + for(auto& dm : diagnostic_messages) + { + dm->set_parent(cms.get()); + } + } + } + +const std::string application_t::get_diagnostic_bus() const +{ + return "hs"; +} + + diff --git a/examples/toyota/auris/signals.json b/examples/toyota/auris/signals.json new file mode 100644 index 0000000..cd08918 --- /dev/null +++ b/examples/toyota/auris/signals.json @@ -0,0 +1,290 @@ +{ "name": "example", + "extra_sources": [], + "initializers": [], + "loopers": [], + "buses": {}, + "commands": [], + "messages": { + "0x620": { + "bus": "hs", + "signals": { + "doors.driver.open": { + "generic_name": "doors.front_left.open", + "bit_position": 43, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.passenger.open": { + "generic_name": "doors.front_right.open", + "bit_position": 44, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.rearleft.open": { + "generic_name": "doors.rear_left.open", + "bit_position": 46, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.rearright.open": { + "generic_name": "doors.rear_right.open", + "bit_position": 45, + "bit_size": 4, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "doors.coffer.open": { + "generic_name": "doors.boot.open", + "bit_position": 47, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"} + } + }, + "0x799": { + "bus": "hs", + "signals": { + "windows.driver.open": { + "generic_name": "windows.front_left.open", + "bit_position": 43, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.passenger.open": { + "generic_name": "windows.front_right.open", + "bit_position": 44, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.rearleft.open": { + "generic_name": "windows.rear_left.open", + "bit_position": 46, + "bit_size": 1, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"}, + "windows.rearright.open": { + "generic_name": "windows.rear_right.open", + "bit_position": 45, + "bit_size": 4, + "factor": 1.0, + "offset": 0, + "decoder": "decoder_t::booleanDecoder"} + } + }, + "0x3D9": { + "bus": "hs", + "signals": { + "PT_FuelLevelPct": { + "generic_name": "fuel.level", + "bit_position": 8, + "bit_size": 8, + "factor": 0.392157, + "offset": 0 + }, + "PT_EngineSpeed": { + "generic_name": "engine.speed", + "bit_position": 16, + "bit_size": 16, + "factor": 0.25, + "offset": 0 + }, + "PT_FuelLevelLow": { + "generic_name": "fuel.level.low", + "bit_position": 55, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + } + } + }, + "0x4D1": { + "bus": "hs", + "signals": { + "PT_EngineOilTempHigh": { + "generic_name": "engine.oil.temp.high", + "bit_position": 7, + "bit_size": 1, + "factor": 1, + "offset": 0, + "decoder": "decoder_t::booleanDecoder" + }, + "PT_EngineOilTemp": { + "generic_name": "engine.oil.temp", + "bit_position": 16, + "bit_size": 8, + "factor": 1, + "offset": 0 + } + } + }, + "0x3E9": { + "bus": "hs", + "signals": { + "PT_VehicleAvgSpeed": { + "generic_name": "vehicle.average.speed", + "bit_position": 0, + "bit_size": 15, + "factor": 0.015625, + "offset": 0 + } + } + } + }, +"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" + } + ] +} diff --git a/examples/toyota/configuration-generated.cpp b/examples/toyota/configuration-generated.cpp deleted file mode 100644 index 61149c5..0000000 --- a/examples/toyota/configuration-generated.cpp +++ /dev/null @@ -1,339 +0,0 @@ -#include "application.hpp" -#include "can/can-decoder.hpp" - -application_t::application_t() - : can_message_set_{{0, "example", 0, 1, 5, 0, 19}} - , can_message_definition_ - { - { - can_message_definition_t(0, "can0", 0x620, can_message_format_t::STANDARD, frequency_clock_t(0.00000f), true) - } - } - , can_signals_ - { - { - { - 0, - 0, - "doors.coffer.open", - 88, - 1, - 0.00000f, - 0, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - decoder_t::decode_boolean, - nullptr, - false - }, - { - 0, - 0, - "doors.driver.open", - 78, - 1, - 0.00000f, - 0, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - decoder_t::decode_boolean, - nullptr, - false - }, - { - 0, - 0, - "doors.passenger.open", - 79, - 1, - 0.00000f, - 0, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - decoder_t::decode_boolean, - nullptr, - false - }, - { - 0, - 0, - "doors.rearleft.open", - 86, - 1, - 0.00000f, - 0, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - decoder_t::decode_boolean, - nullptr, - false - }, - { - 0, - 0, - "doors.rearright.open", - 85, - 4, - 0.00000f, - 0, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, - { - }, - false, - decoder_t::decode_boolean, - nullptr, - false - } - } - } - , diagnostic_messages_ - { - { - { - 4, - "engine.load", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 5, - "engine.coolant.temperature", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 10, - "fuel.pressure", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 11, - "intake.manifold.pressure", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 12, - "engine.speed", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 13, - "vehicle.speed", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 15, - "intake.air.temperature", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 16, - "mass.airflow", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 17, - "throttle.position", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 31, - "running.time", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 45, - "EGR.error", - 0, - 0, - UNIT::INVALID, - 0.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 47, - "fuel.level", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 51, - "barometric.pressure", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 76, - "commanded.throttle.position", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 82, - "ethanol.fuel.percentage", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 90, - "accelerator.pedal.position", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 91, - "hybrid.battery-pack.remaining.life", - 0, - 0, - UNIT::INVALID, - 5.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 92, - "engine.oil.temperature", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - }, - { - 99, - "engine.torque", - 0, - 0, - UNIT::INVALID, - 1.00000f, - decoder_t::decode_obd2_response, - nullptr, - true - } - } - } -{ -} - -const std::string application_t::get_diagnostic_bus() const -{ - return "can0"; -} - - diff --git a/examples/toyota/signals.json b/examples/toyota/signals.json deleted file mode 100644 index cd08918..0000000 --- a/examples/toyota/signals.json +++ /dev/null @@ -1,290 +0,0 @@ -{ "name": "example", - "extra_sources": [], - "initializers": [], - "loopers": [], - "buses": {}, - "commands": [], - "messages": { - "0x620": { - "bus": "hs", - "signals": { - "doors.driver.open": { - "generic_name": "doors.front_left.open", - "bit_position": 43, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.passenger.open": { - "generic_name": "doors.front_right.open", - "bit_position": 44, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.rearleft.open": { - "generic_name": "doors.rear_left.open", - "bit_position": 46, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.rearright.open": { - "generic_name": "doors.rear_right.open", - "bit_position": 45, - "bit_size": 4, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "doors.coffer.open": { - "generic_name": "doors.boot.open", - "bit_position": 47, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"} - } - }, - "0x799": { - "bus": "hs", - "signals": { - "windows.driver.open": { - "generic_name": "windows.front_left.open", - "bit_position": 43, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.passenger.open": { - "generic_name": "windows.front_right.open", - "bit_position": 44, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.rearleft.open": { - "generic_name": "windows.rear_left.open", - "bit_position": 46, - "bit_size": 1, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"}, - "windows.rearright.open": { - "generic_name": "windows.rear_right.open", - "bit_position": 45, - "bit_size": 4, - "factor": 1.0, - "offset": 0, - "decoder": "decoder_t::booleanDecoder"} - } - }, - "0x3D9": { - "bus": "hs", - "signals": { - "PT_FuelLevelPct": { - "generic_name": "fuel.level", - "bit_position": 8, - "bit_size": 8, - "factor": 0.392157, - "offset": 0 - }, - "PT_EngineSpeed": { - "generic_name": "engine.speed", - "bit_position": 16, - "bit_size": 16, - "factor": 0.25, - "offset": 0 - }, - "PT_FuelLevelLow": { - "generic_name": "fuel.level.low", - "bit_position": 55, - "bit_size": 1, - "factor": 1, - "offset": 0, - "decoder": "decoder_t::booleanDecoder" - } - } - }, - "0x4D1": { - "bus": "hs", - "signals": { - "PT_EngineOilTempHigh": { - "generic_name": "engine.oil.temp.high", - "bit_position": 7, - "bit_size": 1, - "factor": 1, - "offset": 0, - "decoder": "decoder_t::booleanDecoder" - }, - "PT_EngineOilTemp": { - "generic_name": "engine.oil.temp", - "bit_position": 16, - "bit_size": 8, - "factor": 1, - "offset": 0 - } - } - }, - "0x3E9": { - "bus": "hs", - "signals": { - "PT_VehicleAvgSpeed": { - "generic_name": "vehicle.average.speed", - "bit_position": 0, - "bit_size": 15, - "factor": 0.015625, - "offset": 0 - } - } - } - }, -"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" - } - ] -} diff --git a/low-can-binding/binding/application-generated.cpp b/low-can-binding/binding/application-generated.cpp index fff40fb..876b95b 100644 --- a/low-can-binding/binding/application-generated.cpp +++ b/low-can-binding/binding/application-generated.cpp @@ -6,7 +6,83 @@ application_t::application_t() , can_message_set_{ {std::make_shared(can_message_set_t{0,"example", { // beginning can_message_definition_ vector - {std::make_shared(can_message_definition_t{"hs",0x3D9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + {std::make_shared(can_message_definition_t{"ls",0x30,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, + { // beginning can_signals vector + {std::make_shared (can_signal_t{ + "hvac.fan.speed", + 32, + 8, + 23.5294f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.left", + 0, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.right", + 8, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })}, + {std::make_shared (can_signal_t{ + "hvac.temperature.average", + 16, + 8, + 1.00000f, + 0.00000, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + { + }, + false, + nullptr, + nullptr, + false + })} + } // end can_signals vector + })} // end can_message_definition entry +, {std::make_shared(can_message_definition_t{"hs",0x3D9,can_message_format_t::STANDARD,frequency_clock_t(5.00000f),true, { // beginning can_signals vector {std::make_shared (can_signal_t{ "engine.speed", diff --git a/low-can-binding/can/can-bus-device.hpp b/low-can-binding/can/can-bus-device.hpp new file mode 100644 index 0000000..0b979b1 --- /dev/null +++ b/low-can-binding/can/can-bus-device.hpp @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015, 2016, 2017 "IoT.bzh" + * Author "Romain Forlot" + * Author "Loïc Collignon" + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "openxc.pb.h" +#include "can-message.hpp" +#include "../utils/config-parser.hpp" +#include "../binding/low-can-hat.hpp" +#include "../binding/low-can-subscription.hpp" + +/// @brief A container for a CAN module paried with a certain bus. +/// +/// There are three things that control the operating mode of the CAN controller: +/// +/// - Should arbitrary CAN message writes be allowed? See rawWritable. +/// - Should translated, simple vehicle message writes be allowed? See the +/// 'writable' field in signals defined for this bus. +/// +class can_bus_t +{ +private: + int index; + std::string name; + std::string device_name; + float max_message_frequency; //