From fc7bb1703535dfada494a1fb7b174a2446927dfa Mon Sep 17 00:00:00 2001 From: Tianyu Yuan <62664574+paperplane110@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:05:55 +0000 Subject: [PATCH 1/2] Feat: enable flexray msg's reading and writing --- can/__init__.py | 1 + can/flexray_message.py | 48 ++++++++++++++++++++++++++++++++++++++ can/io/blf.py | 53 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 can/flexray_message.py diff --git a/can/__init__.py b/can/__init__.py index 9b6a26f58..ee13ff9a2 100644 --- a/can/__init__.py +++ b/can/__init__.py @@ -120,6 +120,7 @@ ) from .listener import AsyncBufferedReader, BufferedReader, Listener, RedirectReader from .message import Message +from .flexray_message import FlexRayVFrReceiveMsgEx from .notifier import Notifier from .thread_safe_bus import ThreadSafeBus from .util import set_logging_level diff --git a/can/flexray_message.py b/can/flexray_message.py new file mode 100644 index 000000000..9c966c099 --- /dev/null +++ b/can/flexray_message.py @@ -0,0 +1,48 @@ +""" +This module contains the implementation of :class:`can.FlexRayVFrReceiveMsgEx`. +""" + +class FlexRayVFrReceiveMsgEx: + """ + The :class:`~can.FlexRayVFrReceiveMsgEx` object is used to represent Flexray message. + """ + + __slots__ = [ + "timestamp", "is_flexray", + "channel", "version", "channelMask", "_dir", "clientIndexFlexRayVFrReceiveMsgEx", + "clusterNo", "frameId", "headerCrc1", "headerCrc2", "byteCount", "dataCount", + "cycle", "tag", "_data", "frameFlags", "appParameter", "frameCrc", "frameLengthNs", + "frameId1", "pduOffset", "blfLogMask", "reservedFlexRayVFrReceiveMsgEx1" + ] + + def __init__( + self, timestamp, is_flexray, channel, version, channelMask, _dir, + clientIndexFlexRayVFrReceiveMsgEx, clusterNo, frameId, headerCrc1, headerCrc2, + byteCount, dataCount, cycle, tag, _data, frameFlags, appParameter, frameCrc, + frameLengthNs, frameId1, pduOffset, blfLogMask, reservedFlexRayVFrReceiveMsgEx1 + ) -> None: + """Create FlexRayVFrReceiveMsgEx object""" + self.timestamp = timestamp + self.is_flexray = is_flexray + self.channel = channel + self.version = version + self.channelMask = channelMask + self._dir = _dir + self.clientIndexFlexRayVFrReceiveMsgEx = clientIndexFlexRayVFrReceiveMsgEx + self.clusterNo = clusterNo + self.frameId = frameId + self.headerCrc1 = headerCrc1 + self.headerCrc2 = headerCrc2 + self.byteCount = byteCount + self.dataCount = dataCount + self.cycle = cycle + self.tag = tag + self._data = _data + self.frameFlags = frameFlags + self.appParameter = appParameter + self.frameCrc = frameCrc + self.frameLengthNs = frameLengthNs + self.frameId1 = frameId1 + self.pduOffset = pduOffset + self.blfLogMask = blfLogMask + self.reservedFlexRayVFrReceiveMsgEx1 = reservedFlexRayVFrReceiveMsgEx1 diff --git a/can/io/blf.py b/can/io/blf.py index 81146233d..63b1c9a02 100644 --- a/can/io/blf.py +++ b/can/io/blf.py @@ -20,6 +20,7 @@ from typing import Any, BinaryIO, Generator, List, Optional, Tuple, Union, cast from ..message import Message +from ..flexray_message import FlexRayVFrReceiveMsgEx from ..typechecking import StringPathLike from ..util import channel2int, dlc2len, len2dlc from .generic import BinaryIOMessageReader, FileIOMessageWriter @@ -76,6 +77,11 @@ class BLFParseError(Exception): # group name length, marker name length, description length GLOBAL_MARKER_STRUCT = struct.Struct(" Date: Fri, 15 Mar 2024 11:07:43 +0000 Subject: [PATCH 2/2] Feat: enable flexray msg's reading and writing --- can/io/blf.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/can/io/blf.py b/can/io/blf.py index 63b1c9a02..f1530554e 100644 --- a/can/io/blf.py +++ b/can/io/blf.py @@ -474,8 +474,7 @@ def on_message_received(self, msg): # Many interfaces start channel numbering at 0 which is invalid channel += 1 - if getattr(msg, "is_flexray"): - msg: FlexRayVFrReceiveMsgEx + if getattr(msg, "is_flexray", False): data = FR_RCVMESSAGE_EX_STRUCT.pack( msg.channel - 10, msg.version,