Skip to content

Commit f85c7ec

Browse files
committed
implement trc writer for v1.1
1 parent cc72abb commit f85c7ec

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

can/io/trc.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,15 @@ class TRCWriter(TextIOMessageWriter):
260260
FORMAT_MESSAGE = (
261261
"{msgnr:>7} {time:13.3f} DT {channel:>2} {id:>8} {dir:>2} - {dlc:<4} {data}"
262262
)
263+
FORMAT_MESSAGE_V1_1 = "{msgnr:>6}){time:12.3f} Rx {id:>8} {dlc:<1} {data}"
264+
263265
FORMAT_MESSAGE_V1_0 = "{msgnr:>6}) {time:7.0f} {id:>8} {dlc:<1} {data}"
264266

265267
def __init__(
266268
self,
267269
file: Union[StringPathLike, TextIO],
268270
channel: int = 1,
271+
fileversion : int = TRCFileVersion.V1_1,
269272
**kwargs: Any,
270273
) -> None:
271274
"""
@@ -287,7 +290,7 @@ def __init__(
287290
self.header_written = False
288291
self.msgnr = 0
289292
self.first_timestamp = None
290-
self.file_version = TRCFileVersion.V2_1
293+
self.file_version = fileversion
291294
self._msg_fmt_string = self.FORMAT_MESSAGE_V1_0
292295
self._format_message = self._format_message_init
293296

@@ -312,6 +315,33 @@ def _write_header_V1_0(self, start_time: datetime) -> None:
312315
]
313316
self.file.writelines(line + "\n" for line in lines)
314317

318+
def _write_header_V1_1(self, start_time: datetime) -> None:
319+
header_time = start_time - datetime(year=1899, month=12, day=30)
320+
lines = [
321+
";$FILEVERSION=1.1",
322+
f";$STARTTIME={header_time/timedelta(days=1)}",
323+
";$COLUMNS=N,O,T,B,I,d,R,L,D",
324+
";",
325+
f"; {self.filepath}",
326+
";",
327+
f"; Start time: {start_time}",
328+
"; Generated by python-can TRCWriter",
329+
";-------------------------------------------------------------------------------",
330+
"; Bus Name Connection Protocol",
331+
"; N/A N/A N/A N/A",
332+
";-------------------------------------------------------------------------------",
333+
"; Message Number",
334+
"; | Time Offset (ms)",
335+
"; | | Type",
336+
"; | | | ID (hex)",
337+
"; | | | | Data Length",
338+
"; | | | | | Data Bytes (hex) ...",
339+
"; | | | | | |",
340+
";---+-- ----+---- --+-- ----+--- + -+ -- -- -- -- -- -- --" ,
341+
]
342+
self.file.writelines(line + "\n" for line in lines)
343+
344+
315345
def _write_header_V2_1(self, start_time: datetime) -> None:
316346
header_time = start_time - datetime(year=1899, month=12, day=30)
317347
lines = [
@@ -362,6 +392,9 @@ def _format_message_init(self, msg, channel):
362392
elif self.file_version == TRCFileVersion.V2_1:
363393
self._format_message = self._format_message_by_format
364394
self._msg_fmt_string = self.FORMAT_MESSAGE
395+
elif self.file_version == TRCFileVersion.V1_1 :
396+
self._format_message = self._format_message_by_format
397+
self._msg_fmt_string = self.FORMAT_MESSAGE_V1_1
365398
else:
366399
raise NotImplementedError("File format is not supported")
367400

@@ -375,6 +408,8 @@ def write_header(self, timestamp: float) -> None:
375408
self._write_header_V1_0(start_time)
376409
elif self.file_version == TRCFileVersion.V2_1:
377410
self._write_header_V2_1(start_time)
411+
elif self.file_version == TRCFileVersion.V1_1 :
412+
self._write_header_V1_1(start_time)
378413
else:
379414
raise NotImplementedError("File format is not supported")
380415
self.header_written = True

0 commit comments

Comments
 (0)