diff --git a/canard/messaging.py b/canard/messaging.py index bba14e4..54b7bda 100644 --- a/canard/messaging.py +++ b/canard/messaging.py @@ -9,11 +9,11 @@ class MessageDatabase: """ Database of CAN messages """ - + def __init__(self): # message that belong to this database self._messages = [] - + def __getattr__(self, name): return self.lookup_message(name) @@ -30,12 +30,12 @@ def remove_message(self, message): self._messages.remove(message) except ValueError: raise ValueError('Message %s is not in database' % message) - + def lookup_message(self, name): for message in self._messages: if message.name == name: return message - + def decode(self, frame): assert isinstance(frame, can.Frame), 'invalid frame' for message in self._messages: @@ -49,7 +49,7 @@ def __str__(self): return s class Message(object): - + def __getattr__(self, name): return self.lookup_signal(name) @@ -66,7 +66,7 @@ def add_signal(self, signal, start_bit): def remove_signal(self, signal): pass - + def lookup_signal(self, name): for start_bit, signal in self._signals.items(): if signal.name == name: @@ -102,8 +102,8 @@ def decode(self, frame): result_signals.append(signal) - return self - + return result_signals + def encode(self): #start with a single value before breaking up into bytes frame_value = 0 @@ -114,12 +114,12 @@ def encode(self): value = signal.raw_value assert (value < pow(2, signal.bit_length)), 'signal value is too large' assert value >= 0, 'signal value is less than 0' - + frame_value += value << start_bit # find the last bit of the singal start_bit = signal.bit_length + start_bit - + frame = can.Frame(self.id) #print("bits: " + str(start_bit)) frame.dlc = math.ceil(start_bit / 8) @@ -163,18 +163,18 @@ def __init__(self, name, bit_length, factor=1, offset=0, unit=""): def value(self): # convert from raw value to engineering units return ((self._value * self.factor) - self.offset) - + @value.setter def value(self, value): # convert from engineering units to raw value self._value = ((value - self.offset) / self.factor) return self - + @property def raw_value(self): # get raw value directly without any conversions return int(self._value) - + @raw_value.setter def raw_value(self, value): # set raw value directly without any conversions diff --git a/examples/decode.py b/examples/decode.py index 78d81e4..a9ecc59 100644 --- a/examples/decode.py +++ b/examples/decode.py @@ -10,7 +10,7 @@ while True: frame = dev.recv() - signals = b.parse_frame(frame) + signals = b.decode(frame) if signals: for s in signals: print(s)