Skip to content

Commit 1ea949d

Browse files
author
Alexander Bessman
committed
modifier_callback should change one message per send
1 parent 7d08dc9 commit 1ea949d

3 files changed

Lines changed: 14 additions & 15 deletions

File tree

can/broadcastmanager.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ class ModifiableCyclicTaskABC(CyclicSendTaskABC):
132132

133133
def _check_modifier_callback(self, modifier_callback):
134134
if modifier_callback is not None:
135-
modified_msgs = modifier_callback(self.messages)
135+
modified_msg = modifier_callback(self.messages[0])
136136

137-
if modified_msgs[0].arbitration_id != self.arbitration_id:
137+
if modified_msg.arbitration_id != self.arbitration_id:
138138
raise ValueError(
139139
"The modifier callback function must not modify the "
140140
"messages' arbitration ID."
@@ -219,9 +219,7 @@ def __init__(
219219
messages: Union[Sequence[Message], Message],
220220
period: float,
221221
duration: Optional[float] = None,
222-
modifier_callback: Optional[
223-
Callable[[Tuple[Message, ...]], Tuple[Message, ...]]
224-
] = None,
222+
modifier_callback: Optional[Callable[[Message], Message]] = None,
225223
):
226224
super().__init__(messages, period, duration)
227225
self.bus = bus
@@ -264,7 +262,8 @@ def _run(self):
264262
started = time.perf_counter()
265263
try:
266264
if self.modifier_callback is not None:
267-
self.messages = self.modifier_callback(self.messages)
265+
modified_msg = self.modifier_callback(self.messages[msg_index])
266+
self.messages[msg_index].data = modified_msg.data
268267
self.bus.send(self.messages[msg_index])
269268
except Exception as exc:
270269
log.exception(exc)

can/bus.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,7 @@ def send_periodic(
176176
period: float,
177177
duration: Optional[float] = None,
178178
store_task: bool = True,
179-
modifier_callback: Optional[
180-
Callable[[Tuple[Message, ...]], Tuple[Message, ...]]
181-
] = None,
179+
modifier_callback: Optional[Callable[[Message], Message]] = None,
182180
) -> can.broadcastmanager.CyclicSendTaskABC:
183181
"""Start sending messages at a given period on this bus.
184182
@@ -200,6 +198,9 @@ def send_periodic(
200198
:param store_task:
201199
If True (the default) the task will be attached to this Bus instance.
202200
Disable to instead manage tasks manually.
201+
:param modifier_callback:
202+
Function which should be used to modify each message's data before
203+
sending. Should take a Message as input and return the same.
203204
:return:
204205
A started task instance. Note the task can be stopped (and depending on
205206
the backend modified) by calling the :meth:`stop` method.

examples/cyclic_checksum.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ def cyclic_checksum_send(bus):
3232
print("stopped cyclic send")
3333

3434

35-
def update_message(messages):
36-
for m in messages:
37-
counter = increment_counter(m)
38-
checksum = compute_xbr_checksum(m, counter)
39-
m.data[7] = (checksum << 4) + counter
35+
def update_message(message):
36+
counter = increment_counter(message)
37+
checksum = compute_xbr_checksum(message, counter)
38+
message.data[7] = (checksum << 4) + counter
4039

41-
return messages
40+
return message
4241

4342

4443
def increment_counter(message):

0 commit comments

Comments
 (0)