+ uint8_t data_signal[len_signal_bytes] = {0};
+ float factor_v = 1;
+ if(factor)
+ {
+ factor_v = sig->get_factor();
+ }
+
+ float offset_v = 0;
+ if(factor)
+ {
+ offset_v = sig->get_offset();
+ }
+
+ if(filter)
+ {
+ uint8_t tmp = 0;
+ int j=0;
+ for(int i=0;i<new_bit_size;i++)
+ {
+ int mask = 0x80 >> ((i%8)+new_start_bit);
+
+ uint8_t mask_v = 0;
+ if(mask > 255)
+ {
+ AFB_ERROR("Error mask too large");
+ }
+ else
+ {
+ mask_v = (uint8_t) mask;
+ }
+ tmp = tmp|mask_v;
+
+ if(i%8 == 7)
+ {
+ data_signal[j] = tmp;
+ tmp = 0;
+ j++;
+ }
+ }
+ data_signal[j]=tmp;
+ }
+ else
+ {
+ bitfield_encode_float( sig->get_last_value(),
+ new_start_bit,
+ new_bit_size,
+ factor_v,
+ offset_v,
+ data_signal,
+ len_signal_bytes);
+ }
+
+ for(size_t i = new_start_byte; i <= new_end_byte ; i++)
+ {
+ data[i] = data[i] | data_signal[i-new_start_byte];
+ }
+}
+
+/**
+ * @brief Allows to build a multi frame message with correct data to be send
+ *
+ * @param signal The CAN signal to write, including the bit position and bit size.
+ * @param value The encoded integer value to write in the CAN signal.
+ * @param message A multi frame message to complete
+ * @param factor If true that will use the factor of the signal else 1
+ * @param offset If true that will use the offset of the signal else 0
+ * @return message_t* The message that is generated
+ */
+message_t* encoder_t::build_frame(const std::shared_ptr<signal_t>& signal, uint64_t value, message_t *message, bool factor, bool offset)
+{