|
13 | 13 | import logging
|
14 | 14 |
|
15 | 15 | from ..message import Message
|
16 |
| -from ..util import channel2int |
| 16 | +from ..util import channel2int, len2dlc, dlc2len |
17 | 17 | from .generic import FileIOMessageWriter, MessageReader
|
18 | 18 | from ..typechecking import StringPathLike
|
19 | 19 |
|
@@ -194,11 +194,20 @@ def _process_fd_can_frame(self, line: str, msg_kwargs: Dict[str, Any]) -> Messag
|
194 | 194 | msg_kwargs["bitrate_switch"] = brs == "1"
|
195 | 195 | msg_kwargs["error_state_indicator"] = esi == "1"
|
196 | 196 | dlc = int(dlc_str, self._converted_base)
|
197 |
| - msg_kwargs["dlc"] = dlc |
198 | 197 | data_length = int(data_length_str)
|
199 |
| - |
200 |
| - # CAN remote Frame |
201 |
| - msg_kwargs["is_remote_frame"] = data_length == 0 |
| 198 | + if data_length == 0: |
| 199 | + # CAN remote Frame |
| 200 | + msg_kwargs["is_remote_frame"] = True |
| 201 | + msg_kwargs["dlc"] = dlc |
| 202 | + else: |
| 203 | + if dlc2len(dlc) != data_length: |
| 204 | + logger.warning( |
| 205 | + "DLC vs Data Length mismatch %d[%d] != %d", |
| 206 | + dlc, |
| 207 | + dlc2len(dlc), |
| 208 | + data_length, |
| 209 | + ) |
| 210 | + msg_kwargs["dlc"] = data_length |
202 | 211 |
|
203 | 212 | self._process_data_string(data, data_length, msg_kwargs)
|
204 | 213 |
|
@@ -381,8 +390,8 @@ def on_message_received(self, msg: Message) -> None:
|
381 | 390 | symbolic_name="",
|
382 | 391 | brs=1 if msg.bitrate_switch else 0,
|
383 | 392 | esi=1 if msg.error_state_indicator else 0,
|
384 |
| - dlc=msg.dlc, |
385 |
| - data_length=len(data), |
| 393 | + dlc=len2dlc(msg.dlc), |
| 394 | + data_length=len(msg.data), |
386 | 395 | data=" ".join(data),
|
387 | 396 | message_duration=0,
|
388 | 397 | message_length=0,
|
|
0 commit comments