#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"
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
}
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"},
{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,
0,
UNIT::INVALID,
1.00000f,
- handleObd2Pid,
+ decoder_t::v1_to_v2_Pid,
nullptr,
- true
+ true,
+ false
})}
, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
12,
1.00000f,
nullptr,
nullptr,
- true
+ true,
+ false
})}
, {std::make_shared<diagnostic_message_t>(diagnostic_message_t{
6,
0,
UNIT::INVALID,
1.00000f,
- handleMyDiagRequest,
+ decoder_t::v1_to_v2_agRequest,
nullptr,
- true
+ 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);
}
}
}
}
+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;
+}
+