X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fcan%2Fcan-decoder.cpp;h=5fe22541f2fda5834a26edcfc463049bbc00ed36;hb=0c3b1aa689131736110dcee346dc6a87f156bde9;hp=488fdfb8e8e5af8008321e5697bf014df9fd1f5a;hpb=542e3d732ec17e4c49d1059a9262f6535a7f3e62;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/can/can-decoder.cpp b/low-can-binding/can/can-decoder.cpp index 488fdfb8..5fe22541 100644 --- a/low-can-binding/can/can-decoder.cpp +++ b/low-can-binding/can/can-decoder.cpp @@ -65,11 +65,9 @@ int decoder_t::handle_sign(const signal_t& signal, std::vector& data_si case sign_t::TWOS_COMPLEMENT: //complement only until end_bit data_signal[0] = ((data_signal[0] ^ mask) & mask); - if(data_signal.size() > 1) { - for(int i=1; i < data_signal.size(); i++) { + if(data_signal.size() > 1) + for(int i=1; i < data_signal.size(); i++) data_signal[i] = data_signal[i] ^ 0xFF; - } - } if(signal.get_sign() == sign_t::TWOS_COMPLEMENT) data_signal[data_signal.size() - 1] = static_cast(data_signal[data_signal.size() - 1] + 1); break; @@ -106,17 +104,6 @@ float decoder_t::parse_signal_bitfield(signal_t& signal, std::shared_ptrget_flags() & CONTINENTAL_BIT_POSITION) - bit_position = converter_t::continental_bit_position_mess(message->get_length(), - signal.get_bit_position(), - bit_size); - if(signal.get_message()->get_flags() & BIT_POSITION_REVERSED) - bit_position = converter_t::bit_position_swap(message->get_length(), - signal.get_bit_position(), - bit_size); - if(signal.get_message()->get_flags() & FRAME_LAYOUT_IS_BIGENDIAN) - message->frame_swap(); - data = message->get_data_vector(); converter_t::signal_to_bits_bytes(bit_position, bit_size, new_start_byte, new_end_byte, new_start_bit, new_end_bit); @@ -195,6 +182,60 @@ openxc_DynamicField decoder_t::decode_bytes(signal_t& signal, std::shared_ptr message, bool* send) +{ + std::string ret_s = ""; + openxc_DynamicField openxc_bytes = decode_bytes(signal,message,send); + if(!openxc_bytes.has_bytes_value) + AFB_ERROR("Error no bytes value to translate to ascii"); + ret_s = converter_t::to_ascii(openxc_bytes.bytes_value,openxc_bytes.length_array); + openxc_DynamicField ret = build_DynamicField(ret_s); + return ret; +} + +//edit +openxc_DynamicField decoder_t::decode_date(signal_t& signal, std::shared_ptr message, bool* send) +{ + float value = decoder_t::parse_signal_bitfield(signal, message); + AFB_DEBUG("Decoded message from parse_signal_bitfield: %f", value); + openxc_DynamicField decoded_value = build_DynamicField(value); + + // Don't send if they is no changes + if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send ) + *send = false; + signal.set_last_value(value); + + return decoded_value; +} + +//edit +openxc_DynamicField decoder_t::decode_time(signal_t& signal, std::shared_ptr message, bool* send) +{ + float value = decoder_t::parse_signal_bitfield(signal, message); + AFB_DEBUG("Decoded message from parse_signal_bitfield: %f", value); + openxc_DynamicField decoded_value = build_DynamicField(value); + + // Don't send if they is no changes + *send = (signal.get_last_value() == value && !signal.get_send_same()) || !*send ? false : true; + signal.set_last_value(value); + + return decoded_value; +} + + /// @brief Wraps a raw CAN signal value in a DynamicField without modification. /// /// This is an implementation of the Signal type signature, and can be @@ -217,9 +258,7 @@ openxc_DynamicField decoder_t::decode_noop(signal_t& signal, std::shared_ptr