@@ -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
@@ -373,6 +406,8 @@ def write_header(self, timestamp: float) -> None:
373406
374407 if self .file_version == TRCFileVersion .V1_0 :
375408 self ._write_header_v1_0 (start_time )
409+ elif self .file_version == TRCFileVersion .V1_1 :
410+ self ._write_header_v1_1 (start_time )
376411 elif self .file_version == TRCFileVersion .V2_1 :
377412 self ._write_header_v2_1 (start_time )
378413 else :
0 commit comments