summaryrefslogtreecommitdiffstats
path: root/low-can-binding/can/signals.hpp
diff options
context:
space:
mode:
authorClément Bénier <clement.benier@iot.bzh>2019-11-15 11:20:34 +0100
committerRomain Forlot <romain.forlot@iot.bzh>2020-01-09 14:40:41 +0100
commit6cc152447e74b1ce7fab6c7aa1f9b4e5e8232444 (patch)
tree2e4f9dd31136abd18e5c1c52c8bf2a0ec8921331 /low-can-binding/can/signals.hpp
parent03a4775eefeeba913f69d331e3930700a567c4c5 (diff)
sign: handle decode methods sign from can value
- add enumeration that represents the way of encoding: enum sign_t { UNSIGNED = 0, SIGN_BIT = 1, ONES_COMPLEMENT = 2, TWOS_COMPLEMENT = 3, SIGN_BIT_EXTERN = 4 }; - the function handle_sign allows to transform value if negative and return the sign of the value in order to be multiplied at the end ot the parcing Bug-AGL: SPEC-3021 Change-Id: I5766a286488170d930422474b4c4f3a8578ca726 Signed-off-by: Clément Bénier <clement.benier@iot.bzh> Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'low-can-binding/can/signals.hpp')
-rwxr-xr-xlow-can-binding/can/signals.hpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/low-can-binding/can/signals.hpp b/low-can-binding/can/signals.hpp
index d9453c50..bf779981 100755
--- a/low-can-binding/can/signals.hpp
+++ b/low-can-binding/can/signals.hpp
@@ -60,6 +60,14 @@ typedef openxc_DynamicField (*signal_decoder)(signal_t& signal, std::shared_ptr<
typedef uint64_t (*signal_encoder)(signal_t& signal,
const openxc_DynamicField& field, bool* send);
+enum sign_t
+{
+ UNSIGNED = 0,
+ SIGN_BIT = 1,
+ ONES_COMPLEMENT = 2,
+ TWOS_COMPLEMENT = 3,
+ SIGN_BIT_EXTERN = 4
+};
class signal_t
{
@@ -100,7 +108,8 @@ private:
If bool is true, that indicate that is a multiplexor
If int is different of 0, that indicate the link with a multiplexor */
bool is_big_endian_; /*!< is_big_endian - True if the signal's data are meant to be read as a big_endian */
- bool is_signed_; /* !< is_signed_ - True if the data is signed */
+ sign_t sign_; /* !< sign_ - if the data is signed it indicates the encode */
+ int32_t bit_sign_position_; /*!< bit_sign_position_ - The bit that indicates the sign of the signal in its CAN message*/
std::string unit_; /* !< unit_ - The unit of the data */
public:
@@ -123,7 +132,8 @@ public:
bool received,
std::pair<bool, int> multiplex,
bool is_big_endian,
- bool is_signed,
+ sign_t sign,
+ int32_t bit_sign_position,
std::string unit);
@@ -164,7 +174,8 @@ public:
std::pair<float, uint64_t> get_last_value_with_timestamp() const;
std::pair<bool, int> get_multiplex() const;
bool get_is_big_endian() const;
- bool get_is_signed() const;
+ sign_t get_sign() const;
+ int32_t get_bit_sign_position() const;
const std::string get_unit() const;
void set_parent(std::shared_ptr<message_definition_t> parent);