1 #include <binding/application.hpp>
2 #include <can/can-decoder.hpp>
3 #include <can/can-encoder.hpp>
6 // >>>>> handlers.cpp >>>>>
7 #include "can/canread.h"
9 using openxc::can::read::publishNumericalMessage;
11 void handleSteeringWheelMessage(CanMessage* message,
12 CanSignal* signals, int signalCount, Pipeline* pipeline) {
13 publishNumericalMessage("latitude", 42.0, pipeline);
16 openxc_DynamicField handleInverted(CanSignal* signal, CanSignal* signals,
17 int signalCount, float value, bool* send) {
18 return openxc::payload::wrapNumber(value * -1);
21 void initializeMyStuff() { }
23 void initializeOtherStuff() { }
26 // this function will be called once each time through the main loop, after
27 // all CAN message processing has been completed
30 // <<<<< handlers.cpp <<<<<
33 CTLP_CAPI_REGISTER("example");
35 std::shared_ptr<message_set_t> cms = std::make_shared<message_set_t>(message_set_t{0,"example",
36 { // beginning message_definition_ vector
37 {std::make_shared<message_definition_t>(message_definition_t{"can0",0x128,"ECM_z_5D2",8,0,frequency_clock_t(5.00000f),true,
38 { // beginning signals vector
39 {std::make_shared<signal_t> (signal_t{
40 "engine_speed",// generic_name
47 frequency_clock_t(15.0000f),// frequency
49 false,// force_send_changed
56 std::make_pair<bool, int>(false, 0),// multiplex
57 static_cast<sign_t>(0),// signed
58 -1,// bit_sign_position
61 {std::make_shared<signal_t> (signal_t{
62 "GearshiftPosition",// generic_name
69 frequency_clock_t(0.00000f),// frequency
71 false,// force_send_changed
81 decoder_t::decode_state,// decoder
84 std::make_pair<bool, int>(false, 0),// multiplex
85 static_cast<sign_t>(0),// signed
86 -1,// bit_sign_position
89 {std::make_shared<signal_t> (signal_t{
90 "SteeringWheelAngle",// generic_name
97 frequency_clock_t(0.00000f),// frequency
99 false,// force_send_changed
103 decoder_t::gnedSteeringWheelAngle,// decoder
106 std::make_pair<bool, int>(false, 0),// multiplex
107 static_cast<sign_t>(0),// signed
108 -1,// bit_sign_position
111 {std::make_shared<signal_t> (signal_t{
112 "steering_wheel_angle_error",// generic_name
119 frequency_clock_t(0.00000f),// frequency
121 false,// force_send_changed
125 decoder_t::der,// decoder
128 std::make_pair<bool, int>(false, 0),// multiplex
129 static_cast<sign_t>(0),// signed
130 -1,// bit_sign_position
133 {std::make_shared<signal_t> (signal_t{
134 "steering_angle_sign",// generic_name
141 frequency_clock_t(0.00000f),// frequency
143 false,// force_send_changed
147 decoder_t::der,// decoder
150 std::make_pair<bool, int>(false, 0),// multiplex
151 static_cast<sign_t>(0),// signed
152 -1,// bit_sign_position
155 } // end signals vector
156 })} // end message_definition entry
157 , {std::make_shared<message_definition_t>(message_definition_t{"can0",0x813,"ECM_z_5D2",8,0,frequency_clock_t(5.00000f),true,
158 { // beginning signals vector
159 {std::make_shared<signal_t> (signal_t{
160 "abc",// generic_name
167 frequency_clock_t(0.00000f),// frequency
169 false,// force_send_changed
173 decoder_t::gnedSteeringWheelAngle,// decoder
176 std::make_pair<bool, int>(false, 0),// multiplex
177 static_cast<sign_t>(0),// signed
178 -1,// bit_sign_position
181 {std::make_shared<signal_t> (signal_t{
182 "def",// generic_name
189 frequency_clock_t(0.00000f),// frequency
191 false,// force_send_changed
195 decoder_t::ignoreDecoder,// decoder
198 std::make_pair<bool, int>(false, 0),// multiplex
199 static_cast<sign_t>(0),// signed
200 -1,// bit_sign_position
203 } // end signals vector
204 })} // end message_definition entry
205 }, // end message_definition vector
206 { // beginning diagnostic_messages_ vector
207 {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
219 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
231 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
238 decoder_t::agRequest,
244 } // end diagnostic_messages_ vector
245 }); // end message_set entry
247 CTLP_ONLOAD(plugin, handle) {
248 afb_api_t api = (afb_api_t) plugin->api;
249 CtlConfigT* CtlConfig = (CtlConfigT*) afb_api_get_userdata(api);
250 application_t* app = (application_t*) getExternalData(CtlConfig);
252 return app->add_message_set(cms);