Skip to content

Commit 1254f4d

Browse files
committed
Move callback call to decoder
1 parent c599443 commit 1254f4d

File tree

2 files changed

+13
-28
lines changed

2 files changed

+13
-28
lines changed

src/pyccp/daq.py

+5-21
Original file line numberDiff line numberDiff line change
@@ -139,25 +139,18 @@ def __init__(
139139
None.
140140
"""
141141
self._number = number
142-
self.elements = elements
142+
self.elements = {e.name: e for e in elements}
143143
self._assign_element_numbers()
144-
self._callbacks = {e.name: e.callback for e in elements if e.callback}
145144
super().__init__(
146145
frame_id=number,
147146
name=str(number),
148147
length=length,
149-
signals=self.elements,
148+
signals=elements,
150149
)
151150

152-
def decode(self, data, **kwargs):
153-
decoded = super().decode(data, **kwargs)
154-
for k, v in decoded.items():
155-
if k in self._callbacks:
156-
self._callbacks[k](v)
157-
158151
def _assign_element_numbers(self):
159152
start_byte = 0
160-
for e in self.elements:
153+
for e in self.elements.values():
161154
e.start_byte = start_byte
162155
start_byte += e.size
163156

@@ -166,15 +159,6 @@ def number(self):
166159
"""Get the ODT number."""
167160
return self._number
168161

169-
@property
170-
def elements(self):
171-
"""Get Element in the ODT."""
172-
return self._signals
173-
174-
@elements.setter
175-
def elements(self, value):
176-
self._signals = value
177-
178162

179163
class DAQList:
180164
def __init__(
@@ -194,13 +178,13 @@ def __init__(
194178
self.apply()
195179

196180
def update(self):
197-
elements = (e for odt in self.odts for e in odt.elements)
181+
elements = (e for odt in self.odts for e in list(odt.elements.values()))
198182
self.event_channels = {e.event_channel for e in elements}
199183

200184
def apply(self):
201185
self.update()
202186
for i, odt in enumerate(self.odts):
203-
for j, e in enumerate(odt.elements):
187+
for j, e in enumerate(list(odt.elements.values())):
204188
self._node.set_daq_ptr(
205189
daq_list_number=self.number,
206190
odt_number=i,

src/pyccp/decoder.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import enum
22
import queue
33
import logging
4-
from typing import Dict, List
4+
from typing import Callable, Dict, List, Union
55

66
import can
77
import cantools
@@ -60,11 +60,7 @@ def on_message_received(self, msg: can.Message):
6060
class DAQDecoder(can.Listener):
6161
"""Decode incoming messages."""
6262

63-
def __init__(
64-
self,
65-
dto_id: int,
66-
decoders: List[cantools.database.can.Message],
67-
):
63+
def __init__(self, dto_id: int, decoders: List[cantools.database.can.Message]):
6864
self.dto_id = dto_id
6965
self.decoders = decoders
7066
self.queue = queue.Queue()
@@ -80,6 +76,11 @@ def on_message_received(self, msg: can.Message) -> None:
8076
msg.data[MessageByte.DTO_PID] in (odt.number for odt in self.decoders)
8177
):
8278
pid = msg.data[MessageByte.DTO_PID]
83-
decoded = self.decoders[pid].decode(msg.data)
79+
decoder = self.decoders[pid]
80+
decoded = decoder.decode(msg.data[MessageByte.DAQ_DATA_START :])
81+
for element_name, value in decoded.items():
82+
element = decoder.elements[element_name]
83+
if element.callback:
84+
element.callback(element, decoded)
8485
self.queue.put(decoded)
8586
_logger.debug(f"Received DAQ#{pid}: {decoded}")

0 commit comments

Comments
 (0)