X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=examples%2Fbasic%2Fapplication-generated.cpp;h=97482f65266ab6ffab5c00eea7b5b8da40b7ee2d;hb=b1428786c5968319b6c963d236b78814958de6e3;hp=f4fddf0a943639c4cbaa5683177fecb5daf712c2;hpb=37379a61a19689c00e4e11ded644467c10b720ef;p=apps%2Fagl-service-can-low-level.git diff --git a/examples/basic/application-generated.cpp b/examples/basic/application-generated.cpp index f4fddf0a..97482f65 100644 --- a/examples/basic/application-generated.cpp +++ b/examples/basic/application-generated.cpp @@ -2,6 +2,29 @@ #include "../can/can-decoder.hpp" #include "../can/can-encoder.hpp" +#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 >>>>> #include "can/canread.h" @@ -30,40 +53,45 @@ void myLooper() { 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, + , message_set_{ + {std::make_shared(message_set_t{0,"example", + { // beginning message_definition_ vector + {std::make_shared(message_definition_t{"hs",0x128,"ECM_z_5D2",8,0,true,frequency_clock_t(5.00000f),true, + { // beginning signals vector + {std::make_shared (signal_t{ + "engine_speed",// generic_name + 12,// bit_position + 8,// bit_size + 1.00000f,// factor + 0.00000f,// offset + 0,// min_value + 0,// max_value + frequency_clock_t(15.0000f),// frequency + true,// send_same + false,// force_send_changed { - }, - false, - nullptr, - nullptr, - false + },// states + false,// writable + nullptr,// decoder + nullptr,// encoder + false,// received + std::make_pair(false, 0),// multiplex + false,// is_big_endian + static_cast(0),// signed + -1,// bit_sign_position + ""// unit })}, - {std::make_shared (can_signal_t{ - "GearshiftPosition", - 41, - 3, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, + {std::make_shared (signal_t{ + "GearshiftPosition",// generic_name + 41,// bit_position + 3,// bit_size + 1.00000f,// factor + 0.00000f,// offset + 0,// min_value + 0,// max_value + frequency_clock_t(0.00000f),// frequency + true,// send_same + false,// force_send_changed { {1,"FIRST"}, {4,"FOURTH"}, @@ -71,70 +99,90 @@ application_t::application_t() {5,"REVERSE"}, {2,"SECOND"}, {3,"THIRD"} - }, - false, - nullptr, - nullptr, - false + },// states + false,// writable + decoder_t::decode_state,// decoder + nullptr,// encoder + false,// received + std::make_pair(false, 0),// multiplex + false,// is_big_endian + static_cast(0),// signed + -1,// bit_sign_position + ""// unit })}, - {std::make_shared (can_signal_t{ - "SteeringWheelAngle", - 52, - 12, - 0.153920f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, + {std::make_shared (signal_t{ + "SteeringWheelAngle",// generic_name + 52,// bit_position + 12,// bit_size + 0.153920f,// factor + 0.00000f,// offset + 0,// min_value + 0,// max_value + frequency_clock_t(0.00000f),// frequency + true,// send_same + false,// force_send_changed { - }, - false, - handleUnsignedSteeringWheelAngle, - nullptr, - false + },// states + false,// writable + decoder_t::v1_to_v2_gnedSteeringWheelAngle,// decoder + nullptr,// encoder + false,// received + std::make_pair(false, 0),// multiplex + false,// is_big_endian + static_cast(0),// signed + -1,// bit_sign_position + ""// unit })}, - {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, + {std::make_shared (signal_t{ + "steering_wheel_angle_error",// generic_name + 44,// bit_position + 12,// 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 { - }, - false, - ignoreDecoder, - nullptr, - false + },// states + false,// writable + decoder_t::v1_to_v2_der,// decoder + nullptr,// encoder + false,// received + std::make_pair(false, 0),// multiplex + false,// is_big_endian + static_cast(0),// signed + -1,// bit_sign_position + ""// unit })}, - {std::make_shared (can_signal_t{ - "steering_angle_sign", - 52, - 12, - 1.00000f, - 0.00000, - 0, - 0, - frequency_clock_t(0.00000f), - true, - false, + {std::make_shared (signal_t{ + "steering_angle_sign",// generic_name + 52,// bit_position + 12,// 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 { - }, - false, - ignoreDecoder, - nullptr, - false + },// states + false,// writable + decoder_t::v1_to_v2_der,// decoder + nullptr,// encoder + false,// received + std::make_pair(false, 0),// multiplex + false,// is_big_endian + static_cast(0),// signed + -1,// bit_sign_position + ""// unit })} - } // end can_signals vector - })} // end can_message_definition entry + } // end signals vector + })} // end message_definition entry - }, // end can_message_definition vector + }, // end message_definition vector { // beginning diagnostic_messages_ vector {std::make_shared(diagnostic_message_t{ 12, @@ -143,7 +191,7 @@ application_t::application_t() 0, UNIT::INVALID, 1.00000f, - handleObd2Pid, + decoder_t::v1_to_v2_Pid, nullptr, true, false @@ -167,33 +215,33 @@ application_t::application_t() 0, UNIT::INVALID, 1.00000f, - handleMyDiagRequest, + decoder_t::v1_to_v2_agRequest, nullptr, true, false })} } // end diagnostic_messages_ vector - })} // end can_message_set entry - } // end can_message_set vector + })} // end message_set entry + } // end message_set vector { - for(auto& cms: can_message_set_) + for(std::shared_ptr cms: message_set_) { - std::vector >& can_messages_definition = cms->get_can_message_definition(); - for(auto& cmd : can_messages_definition) + std::vector> messages_definition = cms->get_messages_definition(); + for(std::shared_ptr cmd : messages_definition) { - cmd->set_parent(cms.get()); - std::vector >& can_signals = cmd->get_can_signals(); - for(auto& sig: can_signals) + cmd->set_parent(cms); + std::vector> signals = cmd->get_signals(); + for(std::shared_ptr sig: signals) { - sig->set_parent(cmd.get()); + sig->set_parent(cmd); } } - std::vector >& diagnostic_messages = cms->get_diagnostic_messages(); - for(auto& dm : diagnostic_messages) + std::vector> diagnostic_messages = cms->get_diagnostic_messages(); + for(std::shared_ptr dm : diagnostic_messages) { - dm->set_parent(cms.get()); + dm->set_parent(cms); } } } @@ -204,3 +252,43 @@ const std::string application_t::get_diagnostic_bus() const } +openxc_DynamicField decoder_t::v1_to_v2_gnedSteeringWheelAngle(signal_t& signal, std::shared_ptr message, bool* send){ + float value = decoder_t::parse_signal_bitfield(signal, message); + openxc_DynamicField ret = decoder_t::gnedSteeringWheelAngle(signal, value, send); + if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){ + *send = false; + } + signal.set_last_value(value); + return ret; +} + +openxc_DynamicField decoder_t::v1_to_v2_der(signal_t& signal, std::shared_ptr message, bool* send){ + float value = decoder_t::parse_signal_bitfield(signal, message); + openxc_DynamicField ret = decoder_t::der(signal, value, send); + if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){ + *send = false; + } + signal.set_last_value(value); + return ret; +} + +openxc_DynamicField decoder_t::v1_to_v2_Pid(signal_t& signal, std::shared_ptr message, bool* send){ + float value = decoder_t::parse_signal_bitfield(signal, message); + openxc_DynamicField ret = decoder_t::Pid(signal, value, send); + if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){ + *send = false; + } + signal.set_last_value(value); + return ret; +} + +openxc_DynamicField decoder_t::v1_to_v2_agRequest(signal_t& signal, std::shared_ptr message, bool* send){ + float value = decoder_t::parse_signal_bitfield(signal, message); + openxc_DynamicField ret = decoder_t::agRequest(signal, value, send); + if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){ + *send = false; + } + signal.set_last_value(value); + return ret; +} +