From 0d0daed86e990bfe582358c0aed7d39e429a710c Mon Sep 17 00:00:00 2001 From: jeankalud Date: Wed, 1 Mar 2017 11:02:46 -0500 Subject: [PATCH 1/2] Add files via upload Fixed little endian handling Fixed offset / scaling handling --- common/dbc.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/common/dbc.py b/common/dbc.py index d333f0a917aa0f..e7609f513b8ee4 100755 --- a/common/dbc.py +++ b/common/dbc.py @@ -134,6 +134,10 @@ def decode(self, x, arr=None, debug=False): Returns (None, None) if the message could not be decoded. """ + + def swap_order(d, wsz=4, gsz=2 ): + return "".join(["".join([m[i:i+gsz] for i in range(wsz-gsz,-gsz,-gsz)]) for m in [d[i:i+wsz] for i in range(0,len(d),wsz)]]) + if arr is None: out = {} else: @@ -151,7 +155,6 @@ def decode(self, x, arr=None, debug=False): print name blen = 8*len(x[2]) - x2_int = int(hexlify(x[2]), 16) for s in msg[1]: if arr is not None and s[0] not in arr: @@ -160,11 +163,17 @@ def decode(self, x, arr=None, debug=False): # big or little endian? # see http://vi-firmware.openxcplatform.com/en/master/config/bit-numbering.html if s[3] is False: + endianness = "big" ss = self.bits.index(s[1]) + x2_int = int(hexlify(x[2]), 16) + data_bit_pos = (blen - (ss + s[2])) else: + endianness = "little" + x2_int = int(swap_order(hexlify(x[2]), 16, 2), 16) ss = s[1] + data_bit_pos = ss - data_bit_pos = (blen - (ss + s[2])) + if data_bit_pos < 0: continue ival = (x2_int >> data_bit_pos) & ((1 << (s[2])) - 1) @@ -173,12 +182,13 @@ def decode(self, x, arr=None, debug=False): ival -= (1< Date: Wed, 1 Mar 2017 18:13:37 -0500 Subject: [PATCH 2/2] Add files via upload Removed unused debug strings --- common/dbc.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/common/dbc.py b/common/dbc.py index e7609f513b8ee4..054da288ef98b5 100755 --- a/common/dbc.py +++ b/common/dbc.py @@ -163,12 +163,10 @@ def swap_order(d, wsz=4, gsz=2 ): # big or little endian? # see http://vi-firmware.openxcplatform.com/en/master/config/bit-numbering.html if s[3] is False: - endianness = "big" ss = self.bits.index(s[1]) x2_int = int(hexlify(x[2]), 16) data_bit_pos = (blen - (ss + s[2])) else: - endianness = "little" x2_int = int(swap_order(hexlify(x[2]), 16, 2), 16) ss = s[1] data_bit_pos = ss