Detect engine state and use it during diagnostic messages subscriptions
[apps/agl-service-can-low-level.git] / low-can-binding / can / can-encoder.cpp
index 9ba8531..5dc632b 100644 (file)
@@ -20,7 +20,6 @@
 #include "canutil/write.h"
 #include "../utils/openxc-utils.hpp"
 #include "can-message-definition.hpp"
-#include "../binding/low-can-hat.hpp"
 
 /// @brief Write a value into a CAN signal in the destination buffer.
 ///
@@ -37,13 +36,20 @@ const can_frame encoder_t::build_frame(const std::shared_ptr<can_signal_t>& sign
 
        cf.can_id = signal->get_message()->get_id();
        cf.can_dlc = CAN_MAX_DLEN;
-       bitfield_encode_float((float)value,
-                                               signal->get_bit_position(),
-                                               signal->get_bit_size(),
-                                               signal->get_factor(),
-                                               signal->get_offset(),
-                                               cf.data,
-                                               CAN_MAX_DLEN);
+
+       signal->set_last_value((float)value);
+
+       for(const auto& sig: signal->get_message()->get_can_signals())
+       {
+               float last_value = sig->get_last_value();
+               bitfield_encode_float(last_value,
+                                                       sig->get_bit_position(),
+                                                       sig->get_bit_size(),
+                                                       sig->get_factor(),
+                                                       sig->get_offset(),
+                                                       cf.data,
+                                                       CAN_MAX_DLEN);
+       }
 
        return cf;
 }