1616 BitEnumField , BitField , XByteField , FieldListField , \
1717 XShortField , X3BytesField , XIntField , ByteField , \
1818 ShortField , ObservableDict , XShortEnumField , XByteEnumField , StrLenField , \
19- FieldLenField , XStrFixedLenField , XStrLenField , FlagsField , PacketListField
19+ FieldLenField , XStrFixedLenField , XStrLenField
2020from scapy .packet import Packet , bind_layers , NoPayload
2121from scapy .config import conf
2222from scapy .error import log_loading
@@ -491,7 +491,8 @@ class UDS_ATPPR(Packet):
491491
492492 def answers (self , other ):
493493 return isinstance (other , UDS_ATP ) \
494- and other .timingParameterAccessType == self .timingParameterAccessType
494+ and other .timingParameterAccessType == \
495+ self .timingParameterAccessType
495496
496497
497498bind_layers (UDS , UDS_ATPPR , service = 0xC3 )
@@ -955,39 +956,12 @@ class UDS_RDTCI(Packet):
955956 20 : 'reportDTCFaultDetectionCounter' ,
956957 21 : 'reportDTCWithPermanentStatus'
957958 }
958- dtcStatus = {
959- 1 : 'TestFailed' ,
960- 2 : 'TestFailedThisOperationCycle' ,
961- 4 : 'PendingDTC' ,
962- 8 : 'ConfirmedDTC' ,
963- 16 : 'TestNotCompletedSinceLastClear' ,
964- 32 : 'TestFailedSinceLastClear' ,
965- 64 : 'TestNotCompletedThisOperationCycle' ,
966- 128 : 'WarningIndicatorRequested'
967- }
968- dtcStatusMask = {
969- 1 : 'ActiveDTCs' ,
970- 4 : 'PendingDTCs' ,
971- 8 : 'ConfirmedOrStoredDTCs' ,
972- 255 : 'AllRecordDTCs'
973- }
974- dtcSeverityMask = {
975- # 0: 'NoSeverityInformation',
976- 1 : 'NoClassInformation' ,
977- 2 : 'WWH-OBDClassA' ,
978- 4 : 'WWH-OBDClassB1' ,
979- 8 : 'WWH-OBDClassB2' ,
980- 16 : 'WWH-OBDClassC' ,
981- 32 : 'MaintenanceRequired' ,
982- 64 : 'CheckAtNextHalt' ,
983- 128 : 'CheckImmediately'
984- }
985959 name = 'ReadDTCInformation'
986960 fields_desc = [
987961 ByteEnumField ('reportType' , 0 , reportTypes ),
988- ConditionalField (FlagsField ('DTCSeverityMask' , 0 , 8 , dtcSeverityMask ),
962+ ConditionalField (ByteField ('DTCSeverityMask' , 0 ),
989963 lambda pkt : pkt .reportType in [0x07 , 0x08 ]),
990- ConditionalField (FlagsField ('DTCStatusMask' , 0 , 8 , dtcStatusMask ),
964+ ConditionalField (XByteField ('DTCStatusMask' , 0 ),
991965 lambda pkt : pkt .reportType in [
992966 0x01 , 0x02 , 0x07 , 0x08 , 0x0f , 0x11 , 0x12 , 0x13 ]),
993967 ConditionalField (ByteField ('DTCHighByte' , 0 ),
@@ -1009,28 +983,11 @@ class UDS_RDTCI(Packet):
1009983bind_layers (UDS , UDS_RDTCI , service = 0x19 )
1010984
1011985
1012- class DTC (Packet ):
1013- name = 'DTC and status record'
1014- fields_desc = [
1015- BitEnumField ("system" , 0 , 2 , {
1016- 0 : "Powertrain" , 1 : "Chassis" , 2 : "Body" , 3 : "Network" }),
1017- BitEnumField ("type" , 0 , 2 , {
1018- 0 : "Generic" , 1 : "ManufacturerSpecific" , 2 : "Generic" , 3 : "Generic" }),
1019- BitField ("numeric_value_code" , 0 , 12 ),
1020- ByteField ("additional_information_code" , 0 ),
1021- FlagsField ("status" , 0 , 8 , UDS_RDTCI .dtcStatus )
1022- ]
1023-
1024- def extract_padding (self , s ):
1025- return '' , s
1026-
1027-
1028986class UDS_RDTCIPR (Packet ):
1029987 name = 'ReadDTCInformationPositiveResponse'
1030988 fields_desc = [
1031989 ByteEnumField ('reportType' , 0 , UDS_RDTCI .reportTypes ),
1032- ConditionalField (FlagsField ('DTCStatusAvailabilityMask' , 0 , 8 ,
1033- UDS_RDTCI .dtcStatus ),
990+ ConditionalField (XByteField ('DTCStatusAvailabilityMask' , 0 ),
1034991 lambda pkt : pkt .reportType in [0x01 , 0x07 , 0x11 ,
1035992 0x12 , 0x02 , 0x0A ,
1036993 0x0B , 0x0C , 0x0D ,
@@ -1046,7 +1003,7 @@ class UDS_RDTCIPR(Packet):
10461003 ConditionalField (ShortField ('DTCCount' , 0 ),
10471004 lambda pkt : pkt .reportType in [0x01 , 0x07 ,
10481005 0x11 , 0x12 ]),
1049- ConditionalField (PacketListField ('DTCAndStatusRecord' , None , pkt_cls = DTC ),
1006+ ConditionalField (StrField ('DTCAndStatusRecord' , b"" ),
10501007 lambda pkt : pkt .reportType in [0x02 , 0x0A , 0x0B ,
10511008 0x0C , 0x0D , 0x0E ,
10521009 0x0F , 0x13 , 0x15 ]),
@@ -1302,24 +1259,24 @@ def _contains_data_format_identifier(packet):
13021259 fmt = 'B' ),
13031260 lambda p : p .modeOfOperation != 2 ),
13041261 ConditionalField (StrLenField ('maxNumberOfBlockLength' , b"" ,
1305- length_from = lambda p : p .lengthFormatIdentifier ),
1262+ length_from = lambda p : p .lengthFormatIdentifier ),
13061263 lambda p : p .modeOfOperation != 2 ),
13071264 ConditionalField (BitField ('compressionMethod' , 0 , 4 ),
13081265 lambda p : p .modeOfOperation != 0x02 ),
13091266 ConditionalField (BitField ('encryptingMethod' , 0 , 4 ),
13101267 lambda p : p .modeOfOperation != 0x02 ),
13111268 ConditionalField (FieldLenField ('fileSizeOrDirInfoParameterLength' ,
1312- None ,
1313- length_of = 'fileSizeUncompressedOrDirInfoLength' ),
1269+ None ,
1270+ length_of = 'fileSizeUncompressedOrDirInfoLength' ),
13141271 lambda p : p .modeOfOperation not in [1 , 2 , 3 ]),
13151272 ConditionalField (StrLenField ('fileSizeUncompressedOrDirInfoLength' ,
13161273 b"" ,
13171274 length_from = lambda p :
13181275 p .fileSizeOrDirInfoParameterLength ),
13191276 lambda p : p .modeOfOperation not in [1 , 2 , 3 ]),
13201277 ConditionalField (StrLenField ('fileSizeCompressed' , b"" ,
1321- length_from = lambda p :
1322- p .fileSizeOrDirInfoParameterLength ),
1278+ length_from = lambda p :
1279+ p .fileSizeOrDirInfoParameterLength ),
13231280 lambda p : p .modeOfOperation not in [1 , 2 , 3 , 5 ]),
13241281 ]
13251282
0 commit comments