|
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