summaryrefslogtreecommitdiffstats
path: root/examples/basic
diff options
context:
space:
mode:
Diffstat (limited to 'examples/basic')
-rw-r--r--examples/basic/application-generated.cpp294
-rw-r--r--examples/basic/basic-signals.cpp230
2 files changed, 230 insertions, 294 deletions
diff --git a/examples/basic/application-generated.cpp b/examples/basic/application-generated.cpp
deleted file mode 100644
index 97482f65..00000000
--- a/examples/basic/application-generated.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-#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"
-
-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"}}
- , 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
- {
- },// 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<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"},
- {6,"NEUTRAL"},
- {5,"REVERSE"},
- {2,"SECOND"},
- {3,"THIRD"}
- },// 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<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
- {
- },// 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<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
- {
- },// 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<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
- {
- },// 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 signals vector
- })} // end message_definition entry
-
- }, // end message_definition vector
- { // beginning diagnostic_messages_ vector
- {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 12,
- "",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::v1_to_v2_Pid,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 12,
- "",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- nullptr,
- nullptr,
- true,
- false
- })}
-, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
- 6,
- "",
- 0,
- 0,
- UNIT::INVALID,
- 1.00000f,
- decoder_t::v1_to_v2_agRequest,
- nullptr,
- true,
- false
- })}
-
- } // 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 "hs";
-}
-
-
-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;
-}
-
diff --git a/examples/basic/basic-signals.cpp b/examples/basic/basic-signals.cpp
new file mode 100644
index 00000000..14b37aef
--- /dev/null
+++ b/examples/basic/basic-signals.cpp
@@ -0,0 +1,230 @@
+#include <binding/application.hpp>
+#include <can/can-decoder.hpp>
+#include <can/can-encoder.hpp>
+
+extern "C" {
+CTLP_CAPI_REGISTER("example");
+
+#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"
+
+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 <<<<<
+
+std::shared_ptr<message_set_t> cms = 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,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
+ {
+ },// states
+ false,// writable
+ nullptr,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {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"},
+ {6,"NEUTRAL"},
+ {5,"REVERSE"},
+ {2,"SECOND"},
+ {3,"THIRD"}
+ },// states
+ false,// writable
+ decoder_t::decode_state,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {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
+ {
+ },// states
+ false,// writable
+ decoder_t::gnedSteeringWheelAngle,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {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
+ {
+ },// states
+ false,// writable
+ decoder_t::der,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })},
+ {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
+ {
+ },// states
+ false,// writable
+ decoder_t::der,// decoder
+ nullptr,// encoder
+ false,// received
+ std::make_pair<bool, int>(false, 0),// multiplex
+ static_cast<sign_t>(0),// signed
+ -1,// bit_sign_position
+ ""// unit
+ })}
+ } // end signals vector
+ })} // end message_definition entry
+ }, // end message_definition vector
+ { // beginning diagnostic_messages_ vector
+ {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
+ 12,
+ "",
+ 0,
+ 0,
+ UNIT::INVALID,
+ 1.00000f,
+ decoder_t::Pid,
+ nullptr,
+ true,
+ false
+ })}
+, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
+ 12,
+ "",
+ 0,
+ 0,
+ UNIT::INVALID,
+ 1.00000f,
+ nullptr,
+ nullptr,
+ true,
+ false
+ })}
+, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
+ 6,
+ "",
+ 0,
+ 0,
+ UNIT::INVALID,
+ 1.00000f,
+ decoder_t::agRequest,
+ nullptr,
+ true,
+ false
+ })}
+
+ } // end diagnostic_messages_ vector
+}); // end message_set entry
+
+CTLP_ONLOAD(plugin, handle) {
+ afb_api_t api = (afb_api_t) plugin->api;
+ CtlConfigT* CtlConfig = (CtlConfigT*) afb_api_get_userdata(api);
+ application_t* app = (application_t*) getExternalData(CtlConfig);
+
+ return app->add_message_set(cms);
+}
+
+
+}