diff options
Diffstat (limited to 'low-can-binding')
-rw-r--r-- | low-can-binding/CMakeLists.txt | 4 | ||||
-rw-r--r-- | low-can-binding/binding/application-generated.cpp | 864 | ||||
-rw-r--r-- | low-can-binding/binding/application.cpp | 41 | ||||
-rw-r--r-- | low-can-binding/binding/application.hpp | 2 | ||||
-rw-r--r-- | low-can-binding/can/message-definition.cpp | 4 | ||||
-rw-r--r-- | low-can-binding/can/message-definition.hpp | 1 | ||||
-rw-r--r-- | low-can-binding/can/message-set.cpp | 36 | ||||
-rw-r--r-- | low-can-binding/can/message-set.hpp | 5 |
8 files changed, 90 insertions, 867 deletions
diff --git a/low-can-binding/CMakeLists.txt b/low-can-binding/CMakeLists.txt index ada0e808..fd13b427 100644 --- a/low-can-binding/CMakeLists.txt +++ b/low-can-binding/CMakeLists.txt @@ -23,7 +23,6 @@ PROJECT_TARGET_ADD(low-can) # Define project Targets set (SOURCES - #binding/${TARGET_NAME}-hat.cpp binding/${TARGET_NAME}-cb.cpp binding/${TARGET_NAME}-subscription.cpp binding/application.cpp @@ -46,7 +45,6 @@ PROJECT_TARGET_ADD(low-can) utils/socketcan-bcm.cpp utils/config-parser.cpp utils/converter.cpp - binding/application-generated.cpp ) @@ -84,6 +82,6 @@ PROJECT_TARGET_ADD(low-can) uds-c isotp-c bitfield-c - afb-helpers + appcontroller ${link_libraries}) diff --git a/low-can-binding/binding/application-generated.cpp b/low-can-binding/binding/application-generated.cpp deleted file mode 100644 index edde0e24..00000000 --- a/low-can-binding/binding/application-generated.cpp +++ /dev/null @@ -1,864 +0,0 @@ -#include "application.hpp" -#include "../can/can-decoder.hpp" -#include "../can/can-encoder.hpp" - -application_t::application_t() - : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}} - , message_set_{ - {std::make_shared<message_set_t>(message_set_t{0,"example", - { // beginning message_definition_ vector - {std::make_shared<message_definition_t>(message_definition_t{"ls",0x21,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.cruise.cancel",// generic_name - 52,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.cruise.distance",// generic_name - 55,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.cruise.enable",// generic_name - 48,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.cruise.limit",// generic_name - 54,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.cruise.resume",// generic_name - 49,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.horn",// generic_name - 56,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.info",// generic_name - 38,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.lane_departure_warning",// generic_name - 63,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.mode",// generic_name - 34,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.next",// generic_name - 36,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.phone.call",// generic_name - 47,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.phone.hangup",// generic_name - 46,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.previous",// generic_name - 32,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.voice",// generic_name - 45,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.volume.down",// generic_name - 35,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.volume.mute",// generic_name - 39,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "steering_wheel.volume.up",// generic_name - 33,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"ls",0x30,"",8,4,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "hvac.fan.speed",// generic_name - 32,// bit_position - 8,// bit_size - 23.5294f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "hvac.temperature.left",// generic_name - 0,// bit_position - 8,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "hvac.temperature.right",// generic_name - 8,// bit_position - 8,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "hvac.temperature.average",// generic_name - 16,// bit_position - 8,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3D9,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "engine.speed",// generic_name - 16,// bit_position - 16,// bit_size - 0.250000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "fuel.level.low",// generic_name - 55,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "fuel.level",// generic_name - 8,// bit_position - 8,// bit_size - 0.392157f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x3E9,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "vehicle.average.speed",// generic_name - 0,// bit_position - 15,// bit_size - 0.0156250f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - false,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x4D1,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "engine.oil.temp",// generic_name - 16,// bit_position - 8,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - nullptr,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "engine.oil.temp.high",// generic_name - 7,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x620,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "doors.boot.open",// generic_name - 47,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "doors.front_left.open",// generic_name - 43,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "doors.front_right.open",// generic_name - 44,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "doors.rear_left.open",// generic_name - 46,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "doors.rear_right.open",// generic_name - 45,// bit_position - 4,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry -, {std::make_shared<message_definition_t>(message_definition_t{"hs",0x799,"",8,2,frequency_clock_t(5.00000f),true, - { // beginning signals vector - {std::make_shared<signal_t> (signal_t{ - "windows.front_left.open",// generic_name - 43,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "windows.front_right.open",// generic_name - 44,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "windows.rear_left.open",// generic_name - 46,// bit_position - 1,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })}, - {std::make_shared<signal_t> (signal_t{ - "windows.rear_right.open",// generic_name - 45,// bit_position - 4,// bit_size - 1.00000f,// factor - 0.00000f,// offset - 0,// min_value - 0,// max_value - frequency_clock_t(0.00000f),// frequency - true,// send_same - false,// force_send_changed - { - },// states - true,// writable - decoder_t::decode_boolean,// decoder - nullptr,// encoder - false,// received - std::make_pair<bool, int>(false, 0),// multiplex - false,// is_big_endian - false,// is_signed - ""// unit - })} - } // end signals vector - })} // end message_definition entry - - }, // end message_definition vector - { // beginning diagnostic_messages_ vector - - } // end diagnostic_messages_ vector - })} // end message_set entry - } // end message_set vector -{ - for(std::shared_ptr<message_set_t> cms: message_set_) - { - std::vector<std::shared_ptr<message_definition_t>> messages_definition = cms->get_messages_definition(); - for(std::shared_ptr<message_definition_t> cmd : messages_definition) - { - cmd->set_parent(cms); - std::vector<std::shared_ptr<signal_t>> signals = cmd->get_signals(); - for(std::shared_ptr<signal_t> sig: signals) - { - sig->set_parent(cmd); - } - } - - std::vector<std::shared_ptr<diagnostic_message_t>> diagnostic_messages = cms->get_diagnostic_messages(); - for(std::shared_ptr<diagnostic_message_t> dm : diagnostic_messages) - { - dm->set_parent(cms); - } - } - } - -const std::string application_t::get_diagnostic_bus() const -{ - return diagnostic_manager_.get_bus_device_name();; -} - - diff --git a/low-can-binding/binding/application.cpp b/low-can-binding/binding/application.cpp index d22633f9..bcb8d732 100644 --- a/low-can-binding/binding/application.cpp +++ b/low-can-binding/binding/application.cpp @@ -52,6 +52,47 @@ uint8_t application_t::get_active_message_set() const return active_message_set_; } +int application_t::add_message_set(std::shared_ptr<message_set_t> new_message_set) +{ + + vect_ptr_msg_def_t messages_definition = new_message_set->get_messages_definition(); + for(std::shared_ptr<message_definition_t> cmd : messages_definition) + { + cmd->set_parent(new_message_set); + std::vector<std::shared_ptr<signal_t>> signals = cmd->get_signals(); + for(std::shared_ptr<signal_t> sig: signals) + sig->set_parent(cmd); + } + + std::vector<std::shared_ptr<diagnostic_message_t>> diagnostic_messages = new_message_set->get_diagnostic_messages(); + for(std::shared_ptr<diagnostic_message_t> dm : diagnostic_messages) + dm->set_parent(new_message_set); + + for(auto old_msg_set : message_set_) + { + if(old_msg_set->get_index() == new_message_set->get_index()) + { + + for(auto new_msg_def : new_message_set->get_messages_definition()) + { + if(old_msg_set->add_message_definition(new_msg_def) < 0) + return -1; + } + + for(auto new_diag_msg : new_message_set->get_diagnostic_messages()) + { + if(old_msg_set->add_diagnostic_message(new_diag_msg) < 0) + return -1; + } + + return 0; + } + } + + message_set_.push_back(new_message_set); + return 0; +} + std::vector<std::shared_ptr<message_set_t> > application_t::get_message_set() { return message_set_; diff --git a/low-can-binding/binding/application.hpp b/low-can-binding/binding/application.hpp index 47a0e2f1..95f64cf3 100644 --- a/low-can-binding/binding/application.hpp +++ b/low-can-binding/binding/application.hpp @@ -71,6 +71,8 @@ class application_t uint8_t get_active_message_set() const; + int add_message_set(std::shared_ptr<message_set_t> new_message_set); + std::vector<std::shared_ptr<message_set_t> > get_message_set(); vect_ptr_signal_t get_all_signals(); diff --git a/low-can-binding/can/message-definition.cpp b/low-can-binding/can/message-definition.cpp index b761ad68..114307e5 100644 --- a/low-can-binding/can/message-definition.cpp +++ b/low-can-binding/can/message-definition.cpp @@ -62,6 +62,10 @@ const std::string message_definition_t::get_bus_device_name() const .get_can_device_name(bus_); } +const std::string message_definition_t::get_name() const{ + return name_; +} + uint32_t message_definition_t::get_id() const { return id_ & CAN_EFF_MASK ? diff --git a/low-can-binding/can/message-definition.hpp b/low-can-binding/can/message-definition.hpp index cce42e14..ca264b7e 100644 --- a/low-can-binding/can/message-definition.hpp +++ b/low-can-binding/can/message-definition.hpp @@ -79,6 +79,7 @@ public: const std::string get_bus_name() const; const std::string get_bus_device_name() const; + const std::string get_name() const; uint32_t get_id() const; bool is_fd() const; bool is_j1939() const; diff --git a/low-can-binding/can/message-set.cpp b/low-can-binding/can/message-set.cpp index 2fc300ac..6bf80c97 100644 --- a/low-can-binding/can/message-set.cpp +++ b/low-can-binding/can/message-set.cpp @@ -31,6 +31,37 @@ message_set_t::message_set_t( , diagnostic_messages_{diagnostic_messages} {} + +int message_set_t::add_message_definition(std::shared_ptr<message_definition_t> msg_def) +{ + for (auto old_msg_def : messages_definition_) + { + if(old_msg_def->get_id() == msg_def->get_id()) + { + AFB_ERROR("Same id between : %s and %s", old_msg_def->get_name().c_str(), msg_def->get_name().c_str()); + return -1; + } + } + messages_definition_.push_back(msg_def); + return 0; +} + + +int message_set_t::add_diagnostic_message(std::shared_ptr<diagnostic_message_t> diag_msg) +{ + for (auto old_diag_msg : diagnostic_messages_) + { + if(old_diag_msg->get_pid() == diag_msg->get_pid()) + { + AFB_ERROR("Same pid between : %s and %s", old_diag_msg->get_generic_name().c_str(), diag_msg->get_generic_name().c_str()); + return -1; + } + } + diagnostic_messages_.push_back(diag_msg); + return 0; +} + + /// @brief Returns a vector holding all message definitions which are handled by this message set. vect_ptr_msg_def_t& message_set_t::get_messages_definition() { @@ -57,3 +88,8 @@ vect_ptr_diag_msg_t& message_set_t::get_diagnostic_messages() { return diagnostic_messages_; } + +uint8_t message_set_t::get_index() const +{ + return index_; +} diff --git a/low-can-binding/can/message-set.hpp b/low-can-binding/can/message-set.hpp index d54f27ac..eab4ed69 100644 --- a/low-can-binding/can/message-set.hpp +++ b/low-can-binding/can/message-set.hpp @@ -48,7 +48,12 @@ public: const std::vector<std::shared_ptr<message_definition_t> >& messages_definition, const vect_ptr_diag_msg_t& diagnostic_messages); + int add_message_definition(std::shared_ptr<message_definition_t> msg_def); + int add_diagnostic_message(std::shared_ptr<diagnostic_message_t> diag_msg); + vect_ptr_msg_def_t& get_messages_definition(); vect_ptr_signal_t get_all_signals() const; vect_ptr_diag_msg_t& get_diagnostic_messages(); + + uint8_t get_index() const; }; |