cmake: fix lib not populated and RPATH usage
[apps/agl-service-can-low-level.git] / examples / basic / application-generated.cpp
index 1cdf67c..97482f6 100644 (file)
@@ -1,6 +1,29 @@
 #include "application.hpp"
 #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"
@@ -22,7 +45,7 @@ void initializeMyStuff() { }
 void initializeOtherStuff() { }
 
 void myLooper() {
-    // this function will be called once each time through the main loop, after
+    // this function will be called once, each time through the main loop, after
     // all CAN message processing has been completed
 }
 
@@ -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>(can_message_set_t{0,"example",
-                       { // beginning can_message_definition_ vector
-                               {std::make_shared<can_message_definition_t>(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> (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>(message_set_t{0,"example",
+                       { // beginning message_definition_ vector
+                               {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
+                                                       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<bool, int>(false, 0),// multiplex
+                                                       false,// is_big_endian
+                                                       static_cast<sign_t>(0),// signed
+                                                       -1,// bit_sign_position
+                                                       ""// unit
                                                })},
-                                               {std::make_shared<can_signal_t> (can_signal_t{
-                                                       "GearshiftPosition",
-                                                       41,
-                                                       3,
-                                                       1.00000f,
-                                                       0.00000,
-                                                       0,
-                                                       0,
-                                                       frequency_clock_t(0.00000f),
-                                                       true,
-                                                       false,
+                                               {std::make_shared<signal_t> (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<bool, int>(false, 0),// multiplex
+                                                       false,// is_big_endian
+                                                       static_cast<sign_t>(0),// signed
+                                                       -1,// bit_sign_position
+                                                       ""// unit
                                                })},
-                                               {std::make_shared<can_signal_t> (can_signal_t{
-                                                       "SteeringWheelAngle",
-                                                       52,
-                                                       12,
-                                                       0.153920f,
-                                                       0.00000,
-                                                       0,
-                                                       0,
-                                                       frequency_clock_t(0.00000f),
-                                                       true,
-                                                       false,
+                                               {std::make_shared<signal_t> (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<bool, int>(false, 0),// multiplex
+                                                       false,// is_big_endian
+                                                       static_cast<sign_t>(0),// signed
+                                                       -1,// bit_sign_position
+                                                       ""// unit
                                                })},
-                                               {std::make_shared<can_signal_t> (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> (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<bool, int>(false, 0),// multiplex
+                                                       false,// is_big_endian
+                                                       static_cast<sign_t>(0),// signed
+                                                       -1,// bit_sign_position
+                                                       ""// unit
                                                })},
-                                               {std::make_shared<can_signal_t> (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> (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<bool, int>(false, 0),// multiplex
+                                                       false,// is_big_endian
+                                                       static_cast<sign_t>(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>(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<message_set_t> cms: message_set_)
        {
-               std::vector<std::shared_ptr<can_message_definition_t> >& can_messages_definition = cms->get_can_message_definition();
-               for(auto& cmd : can_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.get());
-                       std::vector<std::shared_ptr<can_signal_t> >& can_signals = cmd->get_can_signals();
-                       for(auto& sig: can_signals)
+                       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.get());
+                               sig->set_parent(cmd);
                        }
                }
 
-               std::vector<std::shared_ptr<diagnostic_message_t> >& diagnostic_messages = cms->get_diagnostic_messages();
-               for(auto& dm : diagnostic_messages)
+               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.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_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;
+}
+