1 #include "application.hpp"
2 #include "../can/can-decoder.hpp"
3 #include "../can/can-encoder.hpp"
5 #include "can/canread.h"
7 using openxc::can::read::publishNumericalMessage;
9 void handleSteeringWheelMessage(CanMessage* message,
10 CanSignal* signals, int signalCount, Pipeline* pipeline) {
11 publishNumericalMessage("latitude", 42.0, pipeline);
14 openxc_DynamicField handleInverted(CanSignal* signal, CanSignal* signals,
15 int signalCount, float value, bool* send) {
16 return openxc::payload::wrapNumber(value * -1);
19 void initializeMyStuff() { }
21 void initializeOtherStuff() { }
24 // this function will be called once, each time through the main loop, after
25 // all CAN message processing has been completed
28 // >>>>> handlers.cpp >>>>>
29 #include "can/canread.h"
31 using openxc::can::read::publishNumericalMessage;
33 void handleSteeringWheelMessage(CanMessage* message,
34 CanSignal* signals, int signalCount, Pipeline* pipeline) {
35 publishNumericalMessage("latitude", 42.0, pipeline);
38 openxc_DynamicField handleInverted(CanSignal* signal, CanSignal* signals,
39 int signalCount, float value, bool* send) {
40 return openxc::payload::wrapNumber(value * -1);
43 void initializeMyStuff() { }
45 void initializeOtherStuff() { }
48 // this function will be called once, each time through the main loop, after
49 // all CAN message processing has been completed
52 // <<<<< handlers.cpp <<<<<
54 application_t::application_t()
55 : can_bus_manager_{utils::config_parser_t{"/etc/dev-mapping.conf"}}
57 {std::make_shared<message_set_t>(message_set_t{0,"example",
58 { // beginning message_definition_ vector
59 {std::make_shared<message_definition_t>(message_definition_t{"hs",0x128,"ECM_z_5D2",8,0,true,frequency_clock_t(5.00000f),true,
60 { // beginning signals vector
61 {std::make_shared<signal_t> (signal_t{
62 "engine_speed",// generic_name
69 frequency_clock_t(15.0000f),// frequency
71 false,// force_send_changed
78 std::make_pair<bool, int>(false, 0),// multiplex
79 false,// is_big_endian
80 static_cast<sign_t>(0),// signed
81 -1,// bit_sign_position
84 {std::make_shared<signal_t> (signal_t{
85 "GearshiftPosition",// generic_name
92 frequency_clock_t(0.00000f),// frequency
94 false,// force_send_changed
104 decoder_t::decode_state,// decoder
107 std::make_pair<bool, int>(false, 0),// multiplex
108 false,// is_big_endian
109 static_cast<sign_t>(0),// signed
110 -1,// bit_sign_position
113 {std::make_shared<signal_t> (signal_t{
114 "SteeringWheelAngle",// generic_name
121 frequency_clock_t(0.00000f),// frequency
123 false,// force_send_changed
127 decoder_t::v1_to_v2_gnedSteeringWheelAngle,// decoder
130 std::make_pair<bool, int>(false, 0),// multiplex
131 false,// is_big_endian
132 static_cast<sign_t>(0),// signed
133 -1,// bit_sign_position
136 {std::make_shared<signal_t> (signal_t{
137 "steering_wheel_angle_error",// generic_name
144 frequency_clock_t(0.00000f),// frequency
146 false,// force_send_changed
150 decoder_t::v1_to_v2_der,// decoder
153 std::make_pair<bool, int>(false, 0),// multiplex
154 false,// is_big_endian
155 static_cast<sign_t>(0),// signed
156 -1,// bit_sign_position
159 {std::make_shared<signal_t> (signal_t{
160 "steering_angle_sign",// generic_name
167 frequency_clock_t(0.00000f),// frequency
169 false,// force_send_changed
173 decoder_t::v1_to_v2_der,// decoder
176 std::make_pair<bool, int>(false, 0),// multiplex
177 false,// is_big_endian
178 static_cast<sign_t>(0),// signed
179 -1,// bit_sign_position
182 } // end signals vector
183 })} // end message_definition entry
185 }, // end message_definition vector
186 { // beginning diagnostic_messages_ vector
187 {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
194 decoder_t::v1_to_v2_Pid,
199 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
211 , {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
218 decoder_t::v1_to_v2_agRequest,
224 } // end diagnostic_messages_ vector
225 })} // end message_set entry
226 } // end message_set vector
228 for(std::shared_ptr<message_set_t> cms: message_set_)
230 std::vector<std::shared_ptr<message_definition_t>> messages_definition = cms->get_messages_definition();
231 for(std::shared_ptr<message_definition_t> cmd : messages_definition)
233 cmd->set_parent(cms);
234 std::vector<std::shared_ptr<signal_t>> signals = cmd->get_signals();
235 for(std::shared_ptr<signal_t> sig: signals)
237 sig->set_parent(cmd);
241 std::vector<std::shared_ptr<diagnostic_message_t>> diagnostic_messages = cms->get_diagnostic_messages();
242 for(std::shared_ptr<diagnostic_message_t> dm : diagnostic_messages)
249 const std::string application_t::get_diagnostic_bus() const
255 openxc_DynamicField decoder_t::v1_to_v2_gnedSteeringWheelAngle(signal_t& signal, std::shared_ptr<message_t> message, bool* send){
256 float value = decoder_t::parse_signal_bitfield(signal, message);
257 openxc_DynamicField ret = decoder_t::gnedSteeringWheelAngle(signal, value, send);
258 if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){
261 signal.set_last_value(value);
265 openxc_DynamicField decoder_t::v1_to_v2_der(signal_t& signal, std::shared_ptr<message_t> message, bool* send){
266 float value = decoder_t::parse_signal_bitfield(signal, message);
267 openxc_DynamicField ret = decoder_t::der(signal, value, send);
268 if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){
271 signal.set_last_value(value);
275 openxc_DynamicField decoder_t::v1_to_v2_Pid(signal_t& signal, std::shared_ptr<message_t> message, bool* send){
276 float value = decoder_t::parse_signal_bitfield(signal, message);
277 openxc_DynamicField ret = decoder_t::Pid(signal, value, send);
278 if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){
281 signal.set_last_value(value);
285 openxc_DynamicField decoder_t::v1_to_v2_agRequest(signal_t& signal, std::shared_ptr<message_t> message, bool* send){
286 float value = decoder_t::parse_signal_bitfield(signal, message);
287 openxc_DynamicField ret = decoder_t::agRequest(signal, value, send);
288 if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ){
291 signal.set_last_value(value);