44from datetime import datetime
55import time
66CAN_MSG_EXT = 0x80000000
7-
7+ CAN_ID_MASK = 0x1FFFFFFF
88
99class ASCReader (object ):
1010 """
1111 Iterator of CAN messages from a ASC Logging File.
12-
13- Only CAN messages are supported (no Errorframes).
1412 """
1513
1614 def __init__ (self , filename ):
@@ -19,41 +17,42 @@ def __init__(self, filename):
1917 def __iter__ (self ):
2018 for line in self .fp :
2119 temp = line .strip ()
22- if len (temp ) > 0 :
23- if temp [0 ].isdigit ():
24- lineArray = temp .split ()
25- if lineArray [2 ] == "ErrorFrame" :
26- time = float (lineArray [0 ])
27- msg = Message (timestamp = time , is_error_frame = True )
28- yield msg
29- continue
30- if lineArray [1 ].isdigit () and lineArray [2 ] != "Statistic:" :
31- time = float (lineArray [0 ])
32- channel = lineArray [1 ]
33- if lineArray [2 ].endswith ("x" ) or lineArray [2 ].endswith ("X" ):
34- isExtended = True
35- can_id = int (lineArray [2 ][0 :- 1 ], 16 )
36- else :
37- isExtended = False
38- can_id = int (lineArray [2 ],16 )
39- frameType = lineArray [4 ]
40- if frameType == 'r' or frameType == 'R' :
41- msg = Message (timestamp = time ,
42- arbitration_id = can_id & 0x1FFFFFFF ,
43- extended_id = isExtended ,
44- is_remote_frame = True )
45- else :
46- dlc = int (lineArray [5 ])
47- frame = bytearray ()
48- for byte in lineArray [6 :6 + dlc ]:
49- frame .append (int (byte ,16 ))
50- msg = Message (timestamp = time ,
51- arbitration_id = can_id & 0x1FFFFFFF ,
52- extended_id = isExtended ,
53- is_remote_frame = False ,
54- dlc = dlc ,
55- data = frame )
56- yield msg
20+ if len (temp ) == 0 or not temp [0 ].isdigit ():
21+ continue
22+ lineArray = temp .split ()
23+ if lineArray [2 ] == "ErrorFrame" :
24+ time = float (lineArray [0 ])
25+ msg = Message (timestamp = time , is_error_frame = True )
26+ yield msg
27+ continue
28+ if not lineArray [1 ].isdigit () or lineArray [2 ] == "Statistic:" :
29+ continue
30+ time = float (lineArray [0 ])
31+ channel = lineArray [1 ]
32+ if lineArray [2 ].endswith ("x" ) or lineArray [2 ].endswith ("X" ):
33+ isExtended = True
34+ can_id = int (lineArray [2 ][0 :- 1 ], 16 )
35+ else :
36+ isExtended = False
37+ can_id = int (lineArray [2 ],16 )
38+ frameType = lineArray [4 ]
39+ if frameType == 'r' or frameType == 'R' :
40+ msg = Message (timestamp = time ,
41+ arbitration_id = can_id & CAN_ID_MASK ,
42+ extended_id = isExtended ,
43+ is_remote_frame = True )
44+ else :
45+ dlc = int (lineArray [5 ])
46+ frame = bytearray ()
47+ for byte in lineArray [6 :6 + dlc ]:
48+ frame .append (int (byte ,16 ))
49+ msg = Message (timestamp = time ,
50+ arbitration_id = can_id & CAN_ID_MASK ,
51+ extended_id = isExtended ,
52+ is_remote_frame = False ,
53+ dlc = dlc ,
54+ data = frame )
55+ yield msg
5756
5857
5958class ASCWriter (Listener ):
0 commit comments