diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2019-11-19 12:44:05 +0100 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2020-01-09 15:55:03 +0100 |
commit | 5178fbebb1b2aa6a25c50259f2545e97502c4248 (patch) | |
tree | 78c67a2ff72a193dba297b8afd33fe2757cb1912 /examples/basic/application-generated.cpp | |
parent | 857547cbdb44eac387bda44c2a61e32ca014e564 (diff) |
examples: Update using new Generator
New generator including new signals capabilities:
- sign
- big_endian frame
- default length
Bug-AGL: SPEC-2988
Change-Id: Icf2e4dd7ef880a73527103c90a8063cf3d042e41
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'examples/basic/application-generated.cpp')
-rw-r--r-- | examples/basic/application-generated.cpp | 101 |
1 files changed, 84 insertions, 17 deletions
diff --git a/examples/basic/application-generated.cpp b/examples/basic/application-generated.cpp index bf321067..97482f65 100644 --- a/examples/basic/application-generated.cpp +++ b/examples/basic/application-generated.cpp @@ -2,6 +2,28 @@ #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" @@ -34,7 +56,7 @@ application_t::application_t() , 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{"hs", 0x128,"ECM_z_5D2", 0, false, message_format_t::STANDARD, frequency_clock_t(5.00000f), true, + {std::make_shared<message_definition_t>(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> (signal_t{ "engine_speed",// generic_name @@ -54,8 +76,9 @@ application_t::application_t() nullptr,// encoder false,// received std::make_pair<bool, int>(false, 0),// multiplex - 0,// is_big_endian - 0,// is_signed + false,// is_big_endian + static_cast<sign_t>(0),// signed + -1,// bit_sign_position ""// unit })}, {std::make_shared<signal_t> (signal_t{ @@ -82,8 +105,9 @@ application_t::application_t() nullptr,// encoder false,// received std::make_pair<bool, int>(false, 0),// multiplex - 0,// is_big_endian - 0,// is_signed + false,// is_big_endian + static_cast<sign_t>(0),// signed + -1,// bit_sign_position ""// unit })}, {std::make_shared<signal_t> (signal_t{ @@ -100,12 +124,13 @@ application_t::application_t() { },// states false,// writable - handleUnsignedSteeringWheelAngle,// decoder + decoder_t::v1_to_v2_gnedSteeringWheelAngle,// decoder nullptr,// encoder false,// received std::make_pair<bool, int>(false, 0),// multiplex - 0,// is_big_endian - 0,// is_signed + false,// is_big_endian + static_cast<sign_t>(0),// signed + -1,// bit_sign_position ""// unit })}, {std::make_shared<signal_t> (signal_t{ @@ -122,12 +147,13 @@ application_t::application_t() { },// states false,// writable - ignoreDecoder,// decoder + decoder_t::v1_to_v2_der,// decoder nullptr,// encoder false,// received std::make_pair<bool, int>(false, 0),// multiplex - 0,// is_big_endian - 0,// is_signed + false,// is_big_endian + static_cast<sign_t>(0),// signed + -1,// bit_sign_position ""// unit })}, {std::make_shared<signal_t> (signal_t{ @@ -144,12 +170,13 @@ application_t::application_t() { },// states false,// writable - ignoreDecoder,// decoder + decoder_t::v1_to_v2_der,// decoder nullptr,// encoder false,// received std::make_pair<bool, int>(false, 0),// multiplex - 0,// is_big_endian - 0,// is_signed + false,// is_big_endian + static_cast<sign_t>(0),// signed + -1,// bit_sign_position ""// unit })} } // end signals vector @@ -164,7 +191,7 @@ application_t::application_t() 0, UNIT::INVALID, 1.00000f, - handleObd2Pid, + decoder_t::v1_to_v2_Pid, nullptr, true, false @@ -188,7 +215,7 @@ application_t::application_t() 0, UNIT::INVALID, 1.00000f, - handleMyDiagRequest, + decoder_t::v1_to_v2_agRequest, nullptr, true, false @@ -200,7 +227,7 @@ application_t::application_t() { for(std::shared_ptr<message_set_t> cms: message_set_) { - vect_ptr_msg_def_t messages_definition = cms->get_messages_definition(); + 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); @@ -225,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_t> 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_t> 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_t> 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_t> 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; +} + |