
    h                     F   d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z% dd	l&m'Z' dd
l(m)Z)m*Z* 	 e!j+        d         d         r	 n'# e,$ r  e#j-        d           ddie!j+        d<   Y nw xY wde!_.         G d de'          Z/ G d de          Z0 ee/e0d            G d de          Z1 ee/e1d            G d de          Z2 ee/e2d            G d de          Z3 ee/e3d            G d de          Z4 ee/e4d             G d! d"e          Z5 ee/e5d#            G d$ d%e          Z6 ee/e6d&            G d' d(e          Z7 ee/e7d)            G d* d+e          Z8 ee/e8d,            G d- d.e          Z9 ee/e9d/            G d0 d1e          Z: ee/e:d2            G d3 d4e          Z; ee/e;d5            G d6 d7e          Z< ee/e<d8            G d9 d:e          Z= ee/e=d;            G d< d=e          Z> ee/e>d>            G d? d@e          Z? ee/e?dA            G dB dCe          Z@ ee/e@dD            G dE dFe          ZA ee/eAdG            G dH dIe          ZB ee/eBdJ            G dK dLe          ZC ee/eCdM            G dN dOe          ZD ee/eDdP            G dQ dRe          ZE ee/eEdS            G dT dUe          ZF ee/eFdV            G dW dXe          ZG ee/eGdY            G dZ d[e          ZH ee/eHd\            G d] d^e          ZI ee/eId_            G d` dae          ZJ ee/eJdb            G dc dde          ZK ee/eKde            G df dge          ZL ee/eLdh            G di dje          ZM ee/eMdk            G dl dme          ZN ee/eNdn            G do dpe          ZO ee/eOdq            G dr dse          ZP ee/ePdt            G du dve          ZQ ee/eQdw            G dx dye          ZR ee/eRdz            G d{ d|e          ZS ee/eSd}            G d~ de          ZT G d de          ZU ee/eUd            G d de          ZV ee/eVd            G d de          ZW ee/eWd            G d de          ZX G d de          ZY G d de          ZZ G d de          Z[ G d de          Z\ G d de          Z] ee/e]d            G d de          Z^ ee/e^d            G d de          Z_ ee/e_d            G d de          Z` ee/e`d            G d de          Za ee/ead            G d de          Zb ee/ebd            G d de          Zc ee/ecd            G d de          Zd ee/edd            G d de          Ze ee/eed            G d de          Zf ee/efd            G d de          Zg ee/egd            G d de          Zh ee/ehd            G d de          Zi ee/eid            G d de          Zj ee/ejd            G d de          Zk ee/ekd            G d de          Zl ee/eld¬            G dÄ de%          ZmdS )z
UDS
    N)defaultdict)ByteEnumFieldStrFieldConditionalFieldBitEnumFieldBitField
XByteFieldFieldListFieldXShortFieldX3BytesField	XIntField	ByteField
ShortFieldObservableDictXShortEnumFieldXByteEnumFieldStrLenFieldFieldLenFieldXStrFixedLenFieldXStrLenField
FlagsFieldPacketListFieldPacketField)Packetbind_layers	NoPayloadRaw)conf)log_loading)PeriodicSenderThread)ISOTP)DictUnionUDS treat-response-pending-as-answerzSpecify "conf.contribs['UDS'] = {'treat-response-pending-as-answer': True}" to treat a negative response 'requestCorrectlyReceived-ResponsePending' as answer of a request. 
The default value is False.FTc                      e Zd Z ei ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdk          Zd Z edldme          gZdn Zdo Z	dpS )qr$      DiagnosticSessionControl   ECUReset   ClearDiagnosticInformation   ReadDTCInformation"   ReadDataByIdentifier#   ReadMemoryByAddress$   ReadScalingDataByIdentifier'   SecurityAccess(   CommunicationControl)   Authentication*   ReadDataPeriodicIdentifier,   DynamicallyDefineDataIdentifier.   WriteDataByIdentifier/   InputOutputControlByIdentifier1   RoutineControl4   RequestDownload5   RequestUpload6   TransferData7   RequestTransferExit8   RequestFileTransfer=   WriteMemoryByAddress>   TesterPresentP   (DiagnosticSessionControlPositiveResponseQ   ECUResetPositiveResponseT   *ClearDiagnosticInformationPositiveResponseY   "ReadDTCInformationPositiveResponseb   $ReadDataByIdentifierPositiveResponsec   #ReadMemoryByAddressPositiveResponsed   +ReadScalingDataByIdentifierPositiveResponseg   SecurityAccessPositiveResponseh   $CommunicationControlPositiveResponsei   AuthenticationPositiveResponsej   *ReadDataPeriodicIdentifierPositiveResponsel   /DynamicallyDefineDataIdentifierPositiveResponsen   %WriteDataByIdentifierPositiveResponseo   .InputOutputControlByIdentifierPositiveResponseq   RoutineControlPositiveResponset   RequestDownloadPositiveResponseu   RequestUploadPositiveResponsev   TransferDataPositiveResponsew   #RequestTransferExitPositiveResponsex   #RequestFileTransferPositiveResponse}   $WriteMemoryByAddressPositiveResponse~   TesterPresentPositiveResponse   AccessTimingParameter   SecuredDataTransmission   ControlDTCSetting   ResponseOnEvent   LinkControl   %AccessTimingParameterPositiveResponse   'SecuredDataTransmissionPositiveResponse!ControlDTCSettingPositiveResponseResponseOnEventPositiveResponseLinkControlPositiveResponseNegativeResponse)            servicer   c                    |j         | j         k    rdS | j        dk    r| j                            |          S | j        |j        dz   k    rst	          | j        t
                    st	          |j        t
                    r t          |           t          |          k    S | j                            |j                  S dS )NFr   @   )	__class__r   payloadanswers
isinstancer   lenselfothers     `/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/automotive/uds.pyr   zUDS.answerso   s    ?dn,,5<4<''...<EMD011$,	22 ;u}i88;4yyCJJ..|++EM:::u    c                     | j         dk    r>t          |           dk    r+t          j        dt	          |           d         dz            S t          j        d| j         dz            S )Nr      B   i)r   r   structpackbytes)r   s    r   hashretzUDS.hashret}   sW    <4CIINN;sE$KKNU$:;;;{3u 4555r   N)
__name__
__module____qualname__r   servicesnamer   fields_descr   r    r   r   r$   r$   1   sL       ~6	#) 6	#	z6	#	+6	# 
#6	# 
%	6	#
 
$6	# 
,6	# 
6	# 
%6	# 
6	# 
+6	# 
06	# 
&6	# 
/6	# 
6	# 
 6	#  
!6	# 6	#" 
~#6	#$ 
$%6	#& 
$'6	#( 
%)6	#* 
+6	#, 
9-6	#. 
)/6	#0 
;16	#2 
336	#4 
556	#6 
476	#8 
<96	#: 
/;6	#< 
5=6	#> 
/?6	#@ 
;A6	#B 
@C6	# 6	# 6	#D 
6E6	#F 
?G6	#H 
/I6	#J 
0K6	#L 
.M6	#N 
-O6	#P 
4Q6	#R 
4S6	#T 
5U6	#V 
.W6	#X 
&Y6	#Z 
([6	#\ 
"]6	#^ 
 _6	#` 
}a6	#b 
6c6	#d 
8e6	# 6	#f 30,!m6	# 6	# 6	#7$ 7$Hp Dy!X..K  6 6 6 6 6r   c            	       R    e Zd Z eddddddd          ZdZ edd	e          gZd
S )UDS_DSCISOSAEReserveddefaultSessionprogrammingSessionextendedDiagnosticSessionsafetySystemDiagnosticSession)r   r      r      r   r(   diagnosticSessionTyper   N)r   r   r   r   diagnosticSessionTypesr   r   r   r   r   r   r   r      s]        +^")--  -  ! ! &D-q2HIIKKKr   r   r'   )r   c                   T    e Zd ZdZ eddej                   edd          gZd Z	dS )	UDS_DSCPRrT   r   r   sessionParameterRecordr   c                 L    t          |t                    o|j        | j        k    S N)r   r   r   r   s     r   r   zUDS_DSCPR.answers   s)    %)) F'4+EE	Fr   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s^        5D-q4	6 	6)3//KF F F F Fr   r   rS   c            	       D    e Zd ZdddddddddZd	Z ed
de          gZdS )UDS_ERr   	hardResetkeyOffOnReset	softResetenableRapidPowerShutDowndisableRapidPowerShutDown	powerDown)r   r   r   r   r      A   r   r*   	resetTyper   N)r   r   r   
resetTypesr   r   r   r   r   r   r   r      sQ        ()   J Dk1j11KKKr   r   r)   c                   j    e Zd ZdZ eddej                   e edd          d           gZ	d Z
dS )UDS_ERPRrV   r   r   powerDownTimec                     | j         dk    S Nr   )r   pkts    r   <lambda>zUDS_ERPR.<lambda>   s    S]d%: r   c                 L    t          |t                    o|j        | j        k    S r   )r   r   r   r   s     r   r   zUDS_ERPR.answers   s     %((NU_-NNr   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sl        %Dk1f&788?A66::	< 	<KO O O O Or   r   rU   c                       e Zd ZdZ edd           e edd          d            e edd          d           gZd	S )
UDS_SAr6   securityAccessTyper   securityAccessDataRecordr   c                     | j         dz  dk    S Nr   r   r   r   s    r   r   zUDS_SA.<lambda>       S%;a%?1%D r   securityKeyc                     | j         dz  dk    S )Nr   r   r   r   s    r   r   zUDS_SA.<lambda>   r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      sw        D	&**"<cBBDD	F 	F-55DD	F 	F	KKKr   r   r5   c                   ^    e Zd ZdZ edd           e edd          d           gZd ZdS )	UDS_SAPRrb   r   r   securitySeedr   c                     | j         dz  dk    S r   r   r   s    r   r   zUDS_SAPR.<lambda>   r   r   c                 L    t          |t                    o|j        | j        k    S r   )r   r   r   r   s     r   r   zUDS_SAPR.answers   s)    %(( D(D,CC	Dr   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      sj        +D	&**.#66DD	F 	FKD D D D Dr   r   ra   c                       e Zd ZdddddZdZ edde           ed	dd
ddddd           eddd
           edddi ddddd
dddddddddddddddddddddddddd d!          gZd"S )#UDS_CCenableRxAndTxenableRxAndDisableTxdisableRxAndEnableTxdisableRxAndTxr   r   r   r   r8   controlTyper   communicationType0r   r   normalCommunicationMessages%networkManagmentCommunicationMessageszEnetworkManagmentCommunicationMessages and normalCommunicationMessagescommunicationType1communicationType2r   z+Disable/Enable specified communication Typer   zDisable/Enable specific subnetr   r            	   
                  zDisable/Enable networkN)	r   r   r   controlTypesr   r   r   r   r   r   r   r   r   r      sk       $$	 L "DmQ55)1a)6@78 8	9 	9 	%q!,,)1a4aF 49494 94 9	4
 94 94 94 94 94 :4 :4 :4 :4 :4 24	5 	5KKKr   r   r7   c                   >    e Zd ZdZ eddej                  gZd ZdS )UDS_CCPRrd   r   r   c                 L    t          |t                    o|j        | j        k    S r   )r   r   r   r   s     r   r   zUDS_CCPR.answers  s'    %(( 6!T%55	6r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     sC        1DmQ(;<<K6 6 6 6 6r   r   rc   c                   (   e Zd Zddddddddd	d
d
ZdZ edde           e edd          d            e edd          d            e e	ddd          d            e e
dddd          d            e eddd           d             e e
d!ddd"          d#            e ed"dd$           d%            e e
d&ddd'          d(            e ed'dd)           d*            e e
d+ddd,          d-            e ed,dd.           d/            e e
d0ddd1          d2            e ed1dd3           d4            e e
d5ddd6          d7            e ed6dd8           d9           gZdS ):UDS_AUTHdeAuthenticateverifyCertificateUnidirectionalverifyCertificateBidirectionalproofOfOwnershiptransmitCertificate!requestChallengeForAuthentication$verifyProofOfOwnershipUnidirectional#verifyProofOfOwnershipBidirectionalauthenticationConfigurationr   )
r   r   r   r   r   r   r   r   r   r   r:   subFunctionr   communicationConfigurationc                     | j         dv S N)r   r   r   r  r   s    r   r   zUDS_AUTH.<lambda>1  s    S_8I%I r   certificateEvaluationIdc                     | j         dk    S r   r  r   s    r   r   zUDS_AUTH.<lambda>3      S_%< r   algorithmIndicatorr'   lengthc                     | j         dv S N)r   r   r   r  r   s    r   r   zUDS_AUTH.<lambda>5      S_8J%J r   lengthOfCertificateClientNHcertificateClientfmt	length_ofc                     | j         dv S N)r   r   r  r   s    r   r   zUDS_AUTH.<lambda>8      S_%D r   r   c                     | j         S r   )r  ps    r   r   zUDS_AUTH.<lambda>:      &'&A r   length_fromc                     | j         dv S r   r  r   s    r   r   zUDS_AUTH.<lambda><  r!  r   lengthOfProofOfOwnershipClientproofOfOwnershipClientc                     | j         dv S N)r   r   r   r  r   s    r   r   zUDS_AUTH.<lambda>@  r  r   c                     | j         S r   )r)  r#  s    r   r   zUDS_AUTH.<lambda>B      &'&F r   c                     | j         dv S r,  r  r   s    r   r   zUDS_AUTH.<lambda>D  r  r   lengthOfChallengeClientchallengeClientc                     | j         dv S N)r   r   r   r   r  r   s    r   r   zUDS_AUTH.<lambda>G      S_ 9? &? r   c                     | j         S r   )r0  r#  s    r   r   zUDS_AUTH.<lambda>J      &'&? r   c                     | j         dv S r3  r  r   s    r   r   zUDS_AUTH.<lambda>L  r4  r    lengthOfEphemeralPublicKeyClientephemeralPublicKeyClientc                     | j         dk    S Nr   r  r   s    r   r   zUDS_AUTH.<lambda>Q  r  r   c                     | j         S r   )r8  r#  s    r   r   zUDS_AUTH.<lambda>S      &'&H r   c                     | j         dk    S r;  r  r   s    r   r   zUDS_AUTH.<lambda>U  r  r   lengthOfCertificateDatacertificateDatac                     | j         dk    S r   r  r   s    r   r   zUDS_AUTH.<lambda>X  r  r   c                     | j         S r   )r?  r#  s    r   r   zUDS_AUTH.<lambda>Z  r6  r   c                     | j         dk    S r   r  r   s    r   r   zUDS_AUTH.<lambda>\  r  r   lengthOfAdditionalParameteradditionalParameterc                     | j         dv S N)r   r   r  r   s    r   r   zUDS_AUTH.<lambda>`  r!  r   c                     | j         S r   )rD  r#  s    r   r   zUDS_AUTH.<lambda>b  s    &'&C r   c                     | j         dv S rG  r  r   s    r   r   zUDS_AUTH.<lambda>d  r!  r   )r   r   r   subFunctionsr   r   r   r	   r   r   r   r   r   r   r   r   r  r     s       /. #143+ L DmQ55$@!DDII	K 	K%>BB<<	> 	>**+?2NNNJJ	L 	L'BD+.:MO O ODD	F 	F 	&933B 3BC C C ED	F 	F 	'G+.1IK K K KJ	L 	L 	&>3G 3GH H H KJ	L 	L 	'@$+.:KM M M? ?	@ 	@ 	&73@ 3@A A A? ?	@ 	@
 	'I'+1KM M M =<	> 	> 	&@#3I 3IJ J J =<	> 	> 	'@$+.:KM M M<<	> 	> 	&73@ 3@A A A =<	> 	> 	'Dd+.1FH H H ED	F 	F 	&;S3D 3DE E E ED	F 	Fg7KKKr   r  r9   c                       e Zd Zdddddddddd	d
ddddZdZ eddej                   edde           e e	ddd          d            e e
dddd          d            e eddd           d            e e
dddd          d             e eddd!           d"            e e
d#ddd$          d%            e ed$dd&           d'            e e
d(ddd)          d*            e ed)dd+           d,            e e
d-ddd.          d/            e ed.dd0           d1            e e
d2ddd3          d4            e ed3dd5           d6           gZd7 ZdS )8
UDS_AUTHPRrequestAcceptedgeneralRejectauthenticationConfigurationAPCE8authenticationConfigurationACRWithAsymmetricCryptography7authenticationConfigurationACRWithSymmetricCryptographyr   deAuthenticationSuccessful1certificateVerifiedOwnershipVerificationNecessary'ownershipVerifiedAuthenticationCompletecertificateVerified)r   r   r   r   r   r   r   r'   r)         r+         rf   r  r   returnValuer  r'   r  c                     | j         dv S r  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   lengthOfChallengeServerNr  challengeServerr  c                     | j         dv S r  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   r   c                     | j         S r   )r\  r#  s    r   r   zUDS_AUTHPR.<lambda>  r6  r   r&  c                     | j         dv S r  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   lengthOfCertificateServercertificateServerc                     | j         dk    S Nr   r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   c                     | j         S r   )ra  r#  s    r   r   zUDS_AUTHPR.<lambda>  r%  r   c                     | j         dk    S rd  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   lengthOfProofOfOwnershipServerproofOfOwnershipServerc                     | j         dv S N)r   r   r  r   s    r   r   zUDS_AUTHPR.<lambda>  r!  r   c                     | j         S r   )rg  r#  s    r   r   zUDS_AUTHPR.<lambda>  r.  r   c                     | j         dv S rj  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r!  r   lengthOfSessionKeyInfosessionKeyInfoc                     | j         dv S r,  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   c                     | j         S r   )rm  r#  s    r   r   zUDS_AUTHPR.<lambda>  s    &'&> r   c                     | j         dv S r,  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r    lengthOfEphemeralPublicKeyServerephemeralPublicKeyServerc                     | j         dv S r   r  r   s    r   r   zUDS_AUTHPR.<lambda>  r!  r   c                     | j         S r   )rr  r#  s    r   r   zUDS_AUTHPR.<lambda>  r=  r   c                     | j         dv S r   r  r   s    r   r   zUDS_AUTHPR.<lambda>  s    S_%C r   !lengthOfNeededAdditionalParameterneededAdditionalParameterc                     | j         dk    S Nr   r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   c                     | j         S r   )rw  r#  s    r   r   zUDS_AUTHPR.<lambda>  s    &'&I r   c                     | j         dk    S rz  r  r   s    r   r   zUDS_AUTHPR.<lambda>  r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_AUTHPR.answers  '    %** 6!T%55	6r   )r   r   r   "authenticationReturnParameterTypesr   r   r  rJ  r   r   r   r   r   r   r   r   r   rL  rL  k  s       /HG*A7#!* *&$ ,DmQ(=>>mQ(JKK**+?2NNNJJ	L 	L'@$+.:KM M MJJ	L 	L 	&73@ 3@A A A KJ	L 	L 	'BD+.:MO O O<<	> 	> 	&933B 3BC C C =<	> 	> 	'G+.1IK K K ED	F 	F 	&>3G 3GH H H ED	F 	F 	'?31AC C CJJ	L 	L 	&63? 3?@ @ @ KJ	L 	L 	'I'+1KM M M ED	F 	F 	&@#3I 3IJ J J DC	E 	E 	'J'+1LN N N =<	> 	> 	&A33J 3JK K K =<	> 	>]2Kh6 6 6 6 6r   rL  re   c                   ,    e Zd ZdZ edd          gZdS )UDS_TPrR   r  r   Nr   r   r   r   r   r   r   r   r   r  r    s)        D	-##KKKr   r  rQ   c                   2    e Zd ZdZ edd          gZd ZdS )UDS_TPPRr~   zeroSubFunctionr   c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_TPPR.answers      %(((r   N)r   r   r   r   r   r   r   r   r   r   r  r    s?        *D	#Q''K) ) ) ) )r   r  r}   c                   j    e Zd ZddddddZdZ edd	e           e ed
d          d           gZdS )UDS_ATPr   readExtendedTimingParameterSet"setTimingParametersToDefaultValues#readCurrentlyActiveTimingParameters setTimingParametersToGivenValuesr   r   r   r   r   r   timingParameterAccessTyper   timingParameterRequestRecordr   c                     | j         dk    S r   r  r   s    r   r   zUDS_ATP.<lambda>      S%Bc%I r   N)	r   r   r   timingParameterAccessTypesr   r   r   r   r   r   r   r   r  r    sv        +/0-" " #D110	2 	2"@#FFII	K 	KKKKr   r  r   c                   j    e Zd ZdZ eddej                   e edd          d           gZ	d Z
dS )		UDS_ATPPRr   r  r   timingParameterResponseRecordr   c                     | j         dk    S r;  r  r   s    r   r   zUDS_ATPPR.<lambda>  r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_ATPPR.answers  s*    %)) +/*+	+r   N)r   r   r   r   r   r  r  r   r   r   r   r   r   r   r  r    sp        2D118	: 	:"A3GGII	K 	KK+ + + + +r   r  r   c                   0   e Zd ZdZ eddd           eddd           eddd           eddd           ed	dd           ed
dd           eddd           edd           edd           edd           edd           eddd          gZdS )UDS_SDTr   requestMessager   r   $ISOSAEReservedBackwardsCompatibilityr   preEstablishedKeyUsedencryptedMessagesignedMessagesignedResponseRequestedr   r   signatureEncryptionCalculationsignatureLengthantiReplayCounterinternalMessageServiceRequestId
dataRecordr   r   r  N)	r   r   r   r   r   r   r   r   r   r   r   r   r  r    s        $D!1a((7A>>(!Q//#Q**!Q''*Aq11!1a((	2A66%q))'++	3Q77s,,,KKKr   r  r   c                   6   e Zd ZdZ eddd           eddd           eddd           eddd           ed	dd           ed
dd           eddd           edd           edd           edd           edd           eddd          gZd Z	dS )	UDS_SDTPRr   r  r   r   r  r   r  r  r  r  r   r   r  r  r   internalMessageServiceResponseIdr  r   r   r  c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_SDTPR.answers#      %)))r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    s        4D!1a((7A>>(!Q//#Q**!Q''*Aq11!1a((	2A66%q))'++	4a88s,,,K* * * * *r   r  r   c                   P    e Zd ZddddZdZ edde           edd	          gZd
S )	UDS_CDTCSr   onoff)r   r   r   r   DTCSettingTyper   DTCSettingControlOptionRecordr   N)r   r   r   DTCSettingTypesr   r   r   r   r   r   r   r  r  +  sS         O
 D&?;;0#66KKKr   r  r   c                   >    e Zd ZdZ eddej                  gZd ZdS )UDS_CDTCSPRr   r  r   c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_CDTCSPR.answersA      %+++r   N)	r   r   r   r   r   r  r  r   r   r   r   r   r  r  ;  sD        .D&9+DEEK, , , , ,r   r  r   c                   d    e Zd ZdddZdZ edde           edd           edd	          gZd
S )UDS_ROEdoNotStoreEvent
storeEvent)r   r   r   	eventTyper   eventWindowTimeeventTypeRecordr   N)	r   r   r   
eventTypesr   r   r   r   r   r   r   r   r  r  J  s_         J Dk1j11	#Q''"C((KKKr   r  r   c                       e Zd ZdZ eddej                   edd           edd           edd          gZ	d Z
d	S )
	UDS_ROEPRr   r  r   numberOfIdentifiedEventsr  r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_ROEPR.answersc  s%    %)) 24>1	2r   N)r   r   r   r   r   r  r  r   r   r   r   r   r   r   r  r  Z  ss        ,Dk1g&899	,a00	#Q''"C((	K2 2 2 2 2r   r  r   c            
           e Zd ZdddddZdZ edde           e ed	d          d
            e edd          d            e edd          d            e edd          d           gZdS )UDS_LCr   )verifyBaudrateTransitionWithFixedBaudrate,verifyBaudrateTransitionWithSpecificBaudratetransitionBaudrater   r   linkControlTyper   baudrateIdentifierc                     | j         dk    S Nr   r  r   s    r   r   zUDS_LC.<lambda>w      S%8C%? r   baudrateHighBytec                     | j         dk    S rd  r  r   s    r   r   zUDS_LC.<lambda>y  r  r   baudrateMiddleBytec                     | j         dk    S rd  r  r   s    r   r   zUDS_LC.<lambda>{  r  r   baudrateLowBytec                     | j         dk    S rd  r  r   s    r   r   zUDS_LC.<lambda>}  r  r   N)	r   r   r   linkControlTypesr   r   r   r   r   r   r   r   r  r  l  s        69	  D',<==#7;;??	A 	A#5q99??	A 	A#7;;??	A 	A#4a88??	A 	A
KKKr   r  r   c                   >    e Zd ZdZ eddej                  gZd ZdS )UDS_LCPRr   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_LCPR.answers  s'    %(( >%)==	>r   N)	r   r   r   r   r   r  r  r   r   r   r   r   r  r    sD        (D'F,CDDK> > > > >r   r  r   c            	       X    e Zd Z e            ZdZ edd edde                    gZdS )UDS_RDBIr0   identifiersNdataIdentifierr   )	r   r   r   r   dataIdentifiersr   r
   r   r   r   r   r   r  r    sQ        $n&&O!D}d&'7'68 8	9 	9KKKr   r  r/   c                   >    e Zd ZdZ eddej                  gZd ZdS )
UDS_RDBIPRr\   r  r   c                 H    t          |t                    o| j        |j        v S r   )r   r  r  r  r   s     r   r   zUDS_RDBIPR.answers  s'    %** 9#u'88	9r   N	r   r   r   r   r   r  r  r   r   r   r   r   r  r    sI        1D(! 0	2 	2K
9 9 9 9 9r   r  r[   c                      e Zd ZdZ eddd           eddd           e edd          d            e edd          d	            e ed
d          d            e e	dd          d            e edd          d            e edd          d            e edd          d            e e	dd          d           g
Z
dS )UDS_RMBAr2   memorySizeLenr   r   memoryAddressLenmemoryAddress1c                     | j         dk    S r  r  r   s    r   r   zUDS_RMBA.<lambda>      S%9Q%> r   memoryAddress2c                     | j         dk    S rd  r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   memoryAddress3c                     | j         dk    S r;  r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   memoryAddress4c                     | j         dk    S r   r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   memorySize1c                     | j         dk    S r  r  r   s    r   r   zUDS_RMBA.<lambda>      S%6!%; r   memorySize2c                     | j         dk    S rd  r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   memorySize3c                     | j         dk    S r;  r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   memorySize4c                     | j         dk    S r   r  r   s    r   r   zUDS_RMBA.<lambda>  r  r   N)r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r  r    si        D!Q''#Q**$4a88>>	@ 	@%5q99>>	@ 	@&6::>>	@ 	@#3Q77>>	@ 	@M155;;	= 	=]A66;;	= 	=mQ77;;	= 	==!44;;	= 	=#KKKr   r  r1   c                   6    e Zd ZdZ eddd          gZd ZdS )
UDS_RMBAPRr^   r  r   r   r  c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_RMBAPR.answers  s    %***r   Nr   r   r   r   r   r   r   r   r   r   r  r    sC        0Ds,,,K+ + + + +r   r  r]   c                   B    e Zd ZdZ e            Z edde          gZdS )	UDS_RSDBIr4   r  r   N)r   r   r   r   r   r  r   r   r   r   r   r  r    s9        (D$n&&O(!_==KKKr   r  r3   c                   n    e Zd ZdZ eddej                   edd           eddd          gZ	d	 Z
d
S )UDS_RSDBIPRr`   r  r   scalingByter  r   r   r  c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_RSDBIPR.answers  '    %++ <$(;;	<r   N)r   r   r   r   r   r  r  r   r   r   r   r   r   r   r  r    sg        8D(!Y-FGG	-##s,,,K< < < < <r   r  r_   c                       e Zd Z e            ZddddddZdZ edd	e           ed
d	e           eddd          gZ	dS )	UDS_RDBPIr   sendAtSlowRatesendAtMediumRatesendAtFastRatestopSendingr  ReadDataByPeriodicIdentifiertransmissionModer   periodicDataIdentifierfurtherPeriodicDataIdentifierr   r   r  N)
r   r   r   r   periodicDataIdentifierstransmissionModesr   r   r   r   r   r   r   r  r    s        ,n..  *D(!->??.3JKK0#3???KKKr   r  r;   c                   L    e Zd ZdZ edd           eddd          gZd Zd	S )
UDS_RDBPIPR,ReadDataByPeriodicIdentifierPositiveResponser  r   r  r   r   r  c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_RDBPIPR.answers  s)    %++ L,0KK	Lr   Nr   r   r   r   r   r   r   r   r   r   r   r  r    sX        9D	*A..s,,,K
L L L L Lr   r  rg   c                   T    e Zd ZdZddddZ edde           edd	d
          gZdS )UDS_DDDIr>   defineByIdentifierdefineByMemoryAddress%clearDynamicallyDefinedDataIdentifierr   r   r   r  r   r  r   r   r  N)r   r   r   r   rJ  r   r   r   r   r   r   r  r    sX        ,D-0@B BL 	mQ55s,,,KKKr   r  r=   c                   T    e Zd ZdZ eddej                   edd          gZd Z	dS )
UDS_DDDIPRrj   r  r    dynamicallyDefinedDataIdentifierc                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_DDDIPR.answers2  r~  r   N)
r   r   r   r   r   r  rJ  r   r   r   r   r   r   r  r  +  sS        <DmQ(=>>6::K
6 6 6 6 6r   r  ri   c                   8    e Zd ZdZ eddej                  gZdS )UDS_WDBIr@   r  r   Nr   r   r   r   r   r  r  r   r   r   r   r!  r!  ;  s4        "D(! 0	2 	2KKKr   r!  r?   c                   >    e Zd ZdZ eddej                  gZd ZdS )
UDS_WDBIPRrl   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r!  r  r   s     r   r   zUDS_WDBIPR.answersM  s'    %** <$(;;	<r   Nr  r   r   r   r$  r$  F  sI        2D(! 0	2 	2K
< < < < <r   r$  rk   c                      e Zd ZdZ eddd           eddd           e edd          d            e edd          d	            e ed
d          d            e e	dd          d            e edd          d            e edd          d            e edd          d            e e	dd          d            e
ddd          gZdS )UDS_WMBArP   r  r   r   r  r  c                     | j         dk    S r  r  r   s    r   r   zUDS_WMBA.<lambda>\  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_WMBA.<lambda>^  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_WMBA.<lambda>`  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_WMBA.<lambda>b  r  r   r  c                     | j         dk    S r  r  r   s    r   r   zUDS_WMBA.<lambda>d  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_WMBA.<lambda>f  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_WMBA.<lambda>h  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_WMBA.<lambda>j  r  r   r  r   r   r  N)r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r'  r'  V  s}       !D!Q''#Q**$4a88>>	@ 	@%5q99>>	@ 	@&6::>>	@ 	@#3Q77>>	@ 	@M155;;	= 	=]A66;;	= 	=mQ77;;	= 	==!44;;	= 	=s,,,'KKKr   r'  rO   c                      e Zd ZdZ eddd           eddd           e edd          d            e edd          d	            e ed
d          d            e e	dd          d            e edd          d            e edd          d            e edd          d            e e	dd          d           g
Z
d ZdS )
UDS_WMBAPRr|   r  r   r   r  r  c                     | j         dk    S r  r  r   s    r   r   zUDS_WMBAPR.<lambda>y  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_WMBAPR.<lambda>{  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_WMBAPR.<lambda>}  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_WMBAPR.<lambda>  r  r   r  c                     | j         dk    S r  r  r   s    r   r   zUDS_WMBAPR.<lambda>  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_WMBAPR.<lambda>  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_WMBAPR.<lambda>  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_WMBAPR.<lambda>  r  r   c                 l    t          |t                    o|j        | j        k    o|j        | j        k    S r   )r   r'  r  r  r   s     r   r   zUDS_WMBAPR.answers  s=    %** @#t'99@&$*??	@r   N)r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r1  r1  s  s       1D!Q''#Q**$4a88>>	@ 	@%5q99>>	@ 	@&6::>>	@ 	@#3Q77>>	@ 	@M155;;	= 	=]A66;;	= 	=mQ77;;	= 	==!44;;	= 	=#K*@ @ @ @ @r   r1  r{   c                       e Zd ZdZi Z edddddddd	           ed
ddddddd	           eddd           edd          gZd Z	dS )DTCzDiagnostic Trouble Codesystemr   r   
PowertrainChassisBodyNetworkr   typeGenericManufacturerSpecificnumeric_value_coder   additional_information_codec                 
    d|fS N r   r   ss     r   extract_paddingzDTC.extract_padding      1ur   N)
r   r   r   r   dtc_descriptionsr   r   r   r   rL  r   r   r   r<  r<    s        $D 	Xq!	& & 	 	
 	VQ%	$ $ 	 	
 	%q"--	/33K    r   r<  c                   X    e Zd ZdZ edd           edd           edd          gZdS )	UDS_CDTCIr,   groupOfDTCHighByter   groupOfDTCMiddleBytegroupOfDTCLowByteNr  r   r   r   rP  rP    sJ        'D	&**	(!,,	%q))KKKr   rP  r+   c                       e Zd ZdZd ZdS )UDS_CDTCIPRrX   c                 ,    t          |t                    S r   )r   rP  r   s     r   r   zUDS_CDTCIPR.answers  r  r   N)r   r   r   r   r   r   r   r   rU  rU    s(        7D, , , , ,r   rU  rW   c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(Zd)d*d+d,d-d.d/d0d1Zd2d3d4d5d6Zd7d8d9d:d;d<d=d>d1Zd?Z ed@de           e	 e
dAdde          dB            e	 e
dCdde          dD            e	 edEdFeG          dH            e	 edId          dJ            e	 edKd          dL           gZdFS )M	UDS_RDTCIr   r   r   reportNumberOfDTCByStatusMaskr   reportDTCByStatusMaskr   reportDTCSnapshotIdentificationr   "reportDTCSnapshotRecordByDTCNumberr   %reportDTCSnapshotRecordByRecordNumberr   &reportDTCExtendedDataRecordByDTCNumberr   %reportNumberOfDTCBySeverityMaskRecordr   reportDTCBySeverityMaskRecordr   reportSeverityInformationOfDTCr   reportSupportedDTCr   reportFirstTestFailedDTCr   reportFirstConfirmedDTCr   reportMostRecentTestFailedDTCr   reportMostRecentConfirmedDTCr   !reportMirrorMemoryDTCByStatusMaskr'   2reportMirrorMemoryDTCExtendedDataRecordByDTCNumber)reportNumberOfMirrorMemoryDTCByStatusMask0reportNumberOfEmissionsRelatedOBDDTCByStatusMask(reportEmissionsRelatedOBDDTCByStatusMaskreportDTCFaultDetectionCounterreportDTCWithPermanentStatus)r)   rV  rW  r+      
TestFailedTestFailedThisOperationCycle
PendingDTCConfirmedDTCTestNotCompletedSinceLastClearTestFailedSinceLastClear"TestNotCompletedThisOperationCycleWarningIndicatorRequested)r   r   r   r   r'       r      
ActiveDTCsPendingDTCsConfirmedOrStoredDTCsAllRecordDTCs)r   r   r   rY  NoClassInformationzWWH-OBDClassAzWWH-OBDClassB1zWWH-OBDClassB2zWWH-OBDClassCMaintenanceRequiredCheckAtNextHaltCheckImmediatelyr.   
reportTypeDTCSeverityMaskc                     | j         dv S )N)r   r   r  r   s    r   r   zUDS_RDTCI.<lambda>  s    S^|%C r   DTCStatusMaskc                     | j         dv S )N)r   r   r   r   r   r)   rV  rW  r  r   s    r   r   zUDS_RDTCI.<lambda>  s    S^ 8M &M r   dtcNpkt_clsc                     | j         dv S )N)r   r   r   r'   r   r  r   s    r   r   zUDS_RDTCI.<lambda>       S^ 8D &D r   DTCSnapshotRecordNumberc                     | j         dv S )N)r   r   r   r  r   s    r   r   zUDS_RDTCI.<lambda>  s    S^%F r   DTCExtendedDataRecordNumberc                     | j         dv S )N)r   r'   r  r   s    r   r   zUDS_RDTCI.<lambda>  s    S^{%B r   )r   r   r   reportTypes	dtcStatusdtcStatusMaskdtcSeverityMaskr   r   r   r   r   r<  r   r   r   r   r   rX  rX    sq       		* 	
" 	
,	
 	
/ 	
2 	
3 	
2 	
* 	
+ 	  	& 	% 	+ 	*  	/!" 	@#$ 8>6,*-  K2 ),&0(	 	I "	 M  !
 
O  DlA{33$5q!_MMCC	E 	EOQ=IIM M	N 	N 	UD#>>>D D	E 	E 	#<a@@FF	H 	H#@!DDBB	D 	DKKKr   rX  r-   c                   Z    e Zd ZdZ edde           edddej                  gZ	d Z
dS )	DTCAndStatusRecordzDTC and status recordr  Nr  statusr   r   c                 
    d|fS rH  r   rJ  s     r   rL  z"DTCAndStatusRecord.extract_padding  rM  r   )r   r   r   r   r   r<  r   rX  r  r   rL  r   r   r   r  r    sY        "DE4---
8Q9#677K
    r   r  c                   ^    e Zd ZdZ e            Z edde           edd          gZd Z	dS )DTCExtendedDataz%Diagnostic Trouble Code Extended Data	data_typer   recordc                 
    d|fS rH  r   rJ  s     r   rL  zDTCExtendedData.extract_padding  rM  r   N)
r   r   r   r   r   	dataTypesr   r	   r   rL  r   r   r   r  r    s\        2D  Ik1i00
8QK
    r   r  c                   F    e Zd Z edde           edde          gZdS )DTCExtendedDataRecorddtcAndStatusNr  extendedData)r   r   r   r   r  r   r  r   r   r   r   r  r  #  s>        ND2DEEEoFFFKKKr   r  c                       e Zd Z ee          Zed             Z edd           edd           e	ddd           gZ
d	 ZdS )
DTCSnapshotc                     t           S r   )r   r   lstcurremains       r   next_identifier_cbzDTCSnapshot.next_identifier_cb-  s    
r   record_numberr   record_number_of_identifierssnapshotDataNc                 <    t                               | |||          S r   )r  r  r  s       r   r   zDTCSnapshot.<lambda>6  s    k6T6TS#v7' 7' r   )next_cls_cbc                 
    d|fS rH  r   rJ  s     r   rL  zDTCSnapshot.extract_padding:  rM  r   )r   r   r   r   listr  staticmethodr  r   r   r   rL  r   r   r   r  r  *  s        +d##K  \ 		/1%%	0!44D' '	( 	( 	(K    r   r  c                   F    e Zd Z edde           edde          gZdS )DTCSnapshotRecordr  Nr  	snapshots)r   r   r   r   r  r   r  r   r   r   r   r  r  >  s>        ND2DEEET;???KKKr   r  c                      e Zd ZdZ eddej                   e edddej	                  d            e edddd	d
dd          d            e e
dd          d            e edde          d            e edd          d            e edde          d            e edde          d           gZd ZdS )UDS_RDTCIPRrZ   r  r   DTCStatusAvailabilityMaskr   c                     | j         dv S )N)r   r   r)   rV  r   r   r   r   r   r   r   rW  rn  r  r   s    r   r   zUDS_RDTCIPR.<lambda>K  s     +1 1 r   DTCFormatIdentifierzISO15031-6DTCFormatzUDS-1DTCFormatzSAEJ1939-73DTCFormatzISO11992-4DTCFormatr   c                     | j         dv S N)r   r   r)   rV  r  r   s    r   r   zUDS_RDTCIPR.<lambda>S  r  r   DTCCountc                     | j         dv S r  r  r   s    r   r   zUDS_RDTCIPR.<lambda>V  r  r   r  Nr  c                     | j         dv S )N)	r   r   r   r   r   r   r   rW  rn  r  r   s    r   r   zUDS_RDTCIPR.<lambda>Z  s    S^ 8J &J r   r  r   c                     | j         dv S )N)r   r   r   r'   r+   r  r   s    r   r   zUDS_RDTCIPR.<lambda>^  r  r   snapshotRecordc                     | j         dv S )N)r   r  r   s    r   r   zUDS_RDTCIPR.<lambda>b      S^v%= r   extendedDataRecordc                     | j         dv S )N)r   r  r   s    r   r   zUDS_RDTCIPR.<lambda>e  r  r   c                     t          |t                    sdS |j        | j        k    sdS | j        dk    r|j        | j        j        j        k    S | j        dk    r|j        | j        j        j        k    S dS )NFr   r   T)r   rX  r  r  r  r  r  r   s     r   r   zUDS_RDTCIPR.answersh  sy    %++ 	54?225?d""9 7 D HHH?d""9 3 @ DDDtr   )r   r   r   r   r   rX  r  r   r   r  r   r   r  r   r   r  r  r   r   r   r   r   r  r  E  s       /DlAy'<==J2Aq):MNN1 1	2 	2
 	'<a+@+;+A+@(B (BC C
D D	E 	E 	J22D D	E 	E 	)=t1CE E EJ J	K 	K
 	,44D D	E 	E 	%5t->@ @ @==	? 	? 	%94-BD D D==	? 	?9KB	 	 	 	 	r   r  rY   c                   h    e Zd ZdddddZ e            ZdZ edde           ed	de          gZ	d
S )UDS_RCr   startRoutinestopRoutinerequestRoutineResultsr   rD   routineControlTyper   routineIdentifierN)
r   r   r   routineControlTypesr   routineControlIdentifiersr   r   r   r   r   r   r   r  r  x  si        "	  !/ 0 0D*A/BCC+Q0IJJKKKr   r  rC   c                   `    e Zd ZdZ eddej                   eddej                  gZ	d Z
dS )UDS_RCPRrp   r  r   r  c                 l    t          |t                    o|j        | j        k    o|j        | j        k    S r   )r   r  r  r  r   s     r   r   zUDS_RCPR.answers  s=    %(( B(D,CCB'4+AA	Br   N)r   r   r   r   r   r  r  r   r  r   r   r   r   r   r  r    sc        +D*Av/IJJ+Q8	: 	:KB B B B Br   r  ro   c                      e Zd Z eddi          ZdZ edde           eddd           eddd           e e	dd          d	            e e
d
d          d            e edd          d            e edd          d            e e	dd          d            e e
dd          d            e edd          d            e edd          d           gZdS )UDS_RDr   noCompressionNoEncryptionrF   dataFormatIdentifierr  r   r  r  c                     | j         dk    S r  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S r  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_RD.<lambda>  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_RD.<lambda>  r  r   N)r   r   r   r   dataFormatIdentifiersr   r   r   r   r	   r   r   r   r   r   r   r   r  r    s       *N	&,   D,a1FGG!Q''#Q**$4a88>>	@ 	@%5q99>>	@ 	@&6::>>	@ 	@#3Q77>>	@ 	@M155;;	= 	=]A66;;	= 	=mQ77;;	= 	==!44;;	= 	=%KKKr   r  rE   c                   f    e Zd ZdZ eddd           eddd           eddd	          gZd
 ZdS )UDS_RDPRrr   r  r   r   reservedmaxNumberOfBlockLengthr   r   r  c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_RDPR.answers  r  r   Nr   r   r   r   r   r   r   r   r   r   r   r  r    sf        ,D!Q''Q"")3C888K) ) ) ) )r   r  rq   c                      e Zd ZdZ eddej                   eddd           eddd           e e	dd          d            e e
d	d          d
            e edd          d            e edd          d            e e	dd          d            e e
dd          d            e edd          d            e edd          d           gZdS )UDS_RUrH   r  r   r  r   r  r  c                     | j         dk    S r  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S r  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S rd  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S r;  r  r   s    r   r   zUDS_RU.<lambda>  r  r   r  c                     | j         dk    S r   r  r   s    r   r   zUDS_RU.<lambda>  r  r   N)r   r   r   r   r   r  r  r   r   r	   r   r   r   r   r   r   r   r  r    s       D,a2	4 	4!Q''#Q**$4a88>>	@ 	@%5q99>>	@ 	@&6::>>	@ 	@#3Q77>>	@ 	@M155;;	= 	=]A66;;	= 	=mQ77;;	= 	==!44;;	= 	='KKKr   r  rG   c                   f    e Zd ZdZ eddd           eddd           eddd	          gZd
 ZdS )UDS_RUPRrt   r  r   r   r  r  r   r   r  c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_RUPR.answers  r  r   Nr  r   r   r   r  r    sf        *D!Q''Q"")3C888K) ) ) ) )r   r  rs   c                   F    e Zd ZdZ edd           eddd          gZdS )	UDS_TDrJ   blockSequenceCounterr   transferRequestParameterRecordr   r   r  N)r   r   r   r   r   r   r   r   r   r   r  r    s?        D	(!,,13C@@@KKKr   r  rI   c                   L    e Zd ZdZ edd           eddd          gZd Zd	S )
UDS_TDPRrv   r  r   transferResponseParameterRecordr   r   r  c                 L    t          |t                    o|j        | j        k    S r   )r   r  r  r   s     r   r   zUDS_TDPR.answers
  s)    %(( H*d.GG	Hr   Nr  r   r   r   r  r    sY        )D	(!,,2CSAAAK
H H H H Hr   r  ru   c                   0    e Zd ZdZ eddd          gZdS )UDS_RTErL   r  r   r   r  N)r   r   r   r   r   r   r   r   r   r  r    s/         D13C@@@KKKr   r  rK   c                   6    e Zd ZdZ eddd          gZd ZdS )	UDS_RTEPRrx   r  r   r   r  c                 ,    t          |t                    S r   )r   r  r   s     r   r   zUDS_RTEPR.answers#  r  r   Nr  r   r   r   r  r    sD        0D2CSAAAK* * * * *r   r  rw   c                      e Zd ZdZdddddddZed	             Z ed
de           edddd           e	ddd            e
 eddd          d            e
 eddd          d            e
 edddd          d            e
 e	ddd           d            e
 e	d dd!           d"           gZdS )#UDS_RFTrN   zISO/SAE ReservedzAdd FilezDelete FilezReplace Filez	Read FilezRead Directory)r   r   r   r   r   r   c                     | j         dvS )N)r   r   r   modeOfOperationpackets    r   _contains_file_sizezUDS_RFT._contains_file_size7  s    %Y66r   r  r   filePathAndNameLengthNfilePathAndNamer  r  r  r   c                     | j         S r   )r  r#  s    r   r   zUDS_RFT.<lambda>@  s	    !*A r   r&  compressionMethodr   c                     | j         dvS N)r   r   r  r#  s    r   r   zUDS_RFT.<lambda>B      1#4F#B r   encryptingMethodc                     | j         dvS r  r  r#  s    r   r   zUDS_RFT.<lambda>D  r  r   fileSizeParameterLengthr   fileSizeUnCompressedr  c                 6    t                               |           S r   r   r  r#  s    r   r   zUDS_RFT.<lambda>H      7#>#>q#A#A r   c                     | j         S r   r  r#  s    r   r   zUDS_RFT.<lambda>J      %&%> r   c                 6    t                               |           S r   r  r#  s    r   r   zUDS_RFT.<lambda>L  r  r   fileSizeCompressedc                     | j         S r   r  r#  s    r   r   zUDS_RFT.<lambda>N  r  r   c                 6    t                               |           S r   r  r#  s    r   r   zUDS_RFT.<lambda>P  r  r   )r   r   r   r   modeOfOperationsr  r  r   r   r   r   r   r   r   r   r   r   r   +  s        D !  7 7 \7 	(!-=>>-t 1s	< 	< 	<%s A A	C 	C 	C"5q!<<BB	D 	D"4a;;BB	D 	D'@$+.1GI I I BA	C 	C 	%;S2? 2?@ @ @ BA	C 	C 	%932? 2?@ @ @ BA	C 	C%KKKr   r   rM   c                      e Zd ZdZed             Z eddej                   e	 e
dddd	          d
            e	 eddd           d            e	 eddd          d            e	 eddd          d            e	 e
ddd          d            e	 eddd           d            e	 eddd           d           gZd ZdS )	UDS_RFTPRrz   c                     | j         dk    S rd  r  r  s    r    _contains_data_format_identifierz*UDS_RFTPR._contains_data_format_identifierZ  s    %--r   r  r   lengthFormatIdentifierNr  r   r	  c                     | j         dk    S rd  r  r#  s    r   r   zUDS_RFTPR.<lambda>c      1#4#9 r   r   c                     | j         S r   )r"  r#  s    r   r   zUDS_RFTPR.<lambda>e  s	    1;S r   r&  c                     | j         dk    S rd  r  r#  s    r   r   zUDS_RFTPR.<lambda>f  r$  r   r  r   c                     | j         dk    S rd  r  r#  s    r   r   zUDS_RFTPR.<lambda>h      1#4#< r   r  c                     | j         dk    S rd  r  r#  s    r   r   zUDS_RFTPR.<lambda>j  r(  r    fileSizeOrDirInfoParameterLength#fileSizeUncompressedOrDirInfoLength)r  c                     | j         dvS Nr  r  r#  s    r   r   zUDS_RFTPR.<lambda>n      1#4I#E r   c                     | j         S r   r*  r#  s    r   r   zUDS_RFTPR.<lambda>q      %&%G r   c                     | j         dvS r-  r  r#  s    r   r   zUDS_RFTPR.<lambda>s  r.  r   r  c                     | j         S r   r0  r#  s    r   r   zUDS_RFTPR.<lambda>u  r1  r   c                     | j         dvS )N)r   r   r   r   r  r#  s    r   r   zUDS_RFTPR.<lambda>w  s    1#4L#H r   c                 ,    t          |t                    S r   )r   r   r   s     r   r   zUDS_RFTPR.answersz  r  r   )r   r   r   r   r  r!  r   r   r  r   r   r   r   r   r   r   r   r   r  r  W  s       0D. . \. 	(!W-EFF'?1I+.0 0 0 :9	; 	; 	%=s1S1SU U U99	; 	; 	"5q!<<<<	> 	>"4a;;<<	> 	>'I'+1VX X X FE	G 	G 	%J%(2H 2HI I I FE		G 	G
 	%932H 2HI I I IH	J 	J-K8* * * * *r   r  ry   c                   8    e Zd ZdZ eddej                  gZdS )	UDS_IOCBIrB   r  r   Nr"  r   r   r   r7  r7    s/        +D(!X-EFFKKKr   r7  rA   c                   >    e Zd ZdZ eddej                  gZd ZdS )UDS_IOCBIPRrn   r  r   c                 L    t          |t                    o|j        | j        k    S r   )r   r7  r  r   s     r   r   zUDS_IOCBIPR.answers  r  r   Nr  r   r   r   r9  r9    sD        ;D(!X-EFFK< < < < <r   r9  rm   c                      e Zd Zi ddddddddd	d
ddddddddddddddddddddddd d!i d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCi dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRddSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhddidjdkdldmdn
ZdoZ edpdej                   edqde          gZ	dr Z
dsS )tUDS_NRr   positiveResponser'   rN  r)   serviceNotSupportedrV  subFunctionNotSupportedrW  %incorrectMessageLengthOrInvalidFormatr+   responseTooLongrw  r   !   busyRepeatRequestr/   conditionsNotCorrectr1   r3   requestSequenceError%   noResponseFromSubnetComponent&   )failurePreventsExecutionOfRequestedActionrC   requestOutOfRange3   securityAccessDeniedrE   authenticationRequiredrG   
invalidKeyrI   exceedNumberOfAttemptsrK   requiredTimeDelayNotExpired:   secureDataVerificationFailedrS   .certificateVerificationFailedInvalidTimePeriodrU   -certificateVerificationFailedInvalidSignatureR   0certificateVerificationFailedInvalidChainOfTrustS   (certificateVerificationFailedInvalidTyperW   *certificateVerificationFailedInvalidFormatU   +certificateVerificationFailedInvalidContentV   )certificateVerificationFailedInvalidScopeW   6certificateVerificationFailedInvalidCertificateRevokedX   ownershipVerificationFailedrY   challengeCalculationFailedZ   settingAccessRightsFailed[   $sessionKeyCreationOrDerivationFailed\   configurationDataUsageFailed]   deAuthenticationFailedp   uploadDownloadNotAcceptedro   transferDataSuspendedr   generalProgrammingFailures   wrongBlockSequenceCounterry   z(requestCorrectlyReceived-ResponsePendingr}   &subFunctionNotSupportedInActiveSessionr   "serviceNotSupportedInActiveSessionrx     
rpmTooHigh   	rpmTooLowr   engineIsRunningr   engineIsNotRunningr   engineRunTimeTooLowr   temperatureTooHighr   temperatureTooLow   vehicleSpeedTooHigh   vehicleSpeedTooLowzthrottle/PedalTooHighzthrottle/PedalTooLowtransmissionRangeNotInNeutraltransmissionRangeNotInGearzbrakeSwitch(es)NotClosedshifterLeverNotInParktorqueConverterClutchLockedvoltageTooHighvoltageTooLow)
                              r   requestServiceIdnegativeResponseCodec                 h    | j         |j        k    o"| j        dk    pt          j        d         d         S )Nry   r$   r%   )r  r   r  r   contribsr   s     r   r   zUDS_NR.answers  s<    $5 G&$. F]5!"DE	Gr   N)r   r   r   negativeResponseCodesr   r   r$   r   r   r   r   r   r   r   r<  r<    sb       > >o> 	#> 	'	>
 	5> 	> 	> 	!> 	$> 	> 	$> 	-> 	9> 	!> 	$>  	&!>" 	l#> >$ 	&%>& 	+'>( 	,)>* 	>+>, 	=->. 	@/>0 	81>2 	:3>4 	;5>6 	97>8 	F9>: 	+;>< 	*=>> 	)?>@ 	4A>B 	,C>D 	&E> > >F 	)G>H 	%I>J 	)K>L 	)M>N 	8O>P 	6Q>R 	2S>T 	U>V 	lW>X 	kY>Z 	[>\ 	"]>^ 	#_>` 	"a>b 	!c>d 	#e>f 	"g> >h &$-*(%+{> > >~ D)1cl;;,a1FGGK
G G G G Gr   r<  r   c                   D    e Zd Z e             ed          z  dfdZdS )UDS_TesterPresentSenderrx  r  r   c                 4    t          j        | |||           dS )z Thread to send TesterPresent messages packets periodically

        Args:
            sock: socket where packet is sent periodically
            pkt: packet to send
            interval: interval between two packets
        N)r    __init__)r   sockr   intervals       r   r  z UDS_TesterPresentSender.__init__  s!     	%dD#x@@@@@r   N)r   r   r   r$   r  r  r   r   r   r  r    sK        !$D)A)A)A!AA A A A A A Ar   r  )n__doc__r   collectionsr   scapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.packetr   r   r   r   scapy.configr   scapy.errorr   scapy.utilsr    scapy.contrib.isotpr!   typingr"   r#   r  KeyErrorinfodebug_dissectorr$   r   r   r   r   r   r   r   r   r  rL  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r1  r<  rP  rU  rX  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r7  r9  r<  r  r   r   r   <module>r     sj     # # # # # #                                                = < < < < < < < < < < <       # # # # # # , , , , , , % % % % % %       
	G}U>?  G G GK 3 4 4 4
 ?FDM%G  P6 P6 P6 P6 P6% P6 P6 P6h    f    C$ ' ' ' '
F 
F 
F 
F 
F 
F 
F 
F CD ) ) ) )    V     C & & & &	O 	O 	O 	O 	Ov 	O 	O 	O C4 ( ( ( (    V    C & & & &
D 
D 
D 
D 
Dv 
D 
D 
D C4 ( ( ( (" " " " "V " " "J C & & & &6 6 6 6 6v 6 6 6 C4 ( ( ( (E E E E Ev E E EP C4 ( ( ( (J6 J6 J6 J6 J6 J6 J6 J6Z CT * * * *    V    C & & & &) ) ) ) )v ) ) ) C4 ( ( ( (    f   " C$ ' ' ' '+ + + + + + + + CD ) ) ) )    f   $ C$ ' ' ' '* * * * * * * ** CD ) ) ) )
 
 
 
 
 
 
 
 CD ) ) ) ), , , , ,& , , , Cd + + + +

 
 
 
 
f 
 
 
 C$ ' ' ' '2 2 2 2 2 2 2 2 CD ) ) ) )    V   * C & & & &> > > > >v > > > C4 ( ( ( (    v    C4 ( ( ( (	9 	9 	9 	9 	9 	9 	9 	9 CT * * * *    v   0 C4 ( ( ( (+ + + + + + + + CT * * * *        CD ) ) ) )
< 
< 
< 
< 
<& 
< 
< 
< Cd + + + +       " CD ) ) ) )	L 	L 	L 	L 	L& 	L 	L 	L Cd + + + +    v    C4 ( ( ( (	6 	6 	6 	6 	6 	6 	6 	6 CT * * * *    v    C4 ( ( ( (	< 	< 	< 	< 	< 	< 	< 	< CT * * * *    v   4 C4 ( ( ( (@ @ @ @ @ @ @ @: CT * * * *    &   0        CD ) ) ) ), , , , ,& , , , Cd + + + +C C C C C C C CL CD ) ) ) )       	 	 	 	 	f 	 	 	    F       &   (       , , , , ,& , , ,^ Cd + + + +    V    C & & & &B B B B Bv B B B C4 ( ( ( (    V   8 C & & & &	) 	) 	) 	) 	)v 	) 	) 	) C4 ( ( ( (    V   4 C & & & &	) 	) 	) 	) 	)v 	) 	) 	) C4 ( ( ( (    V    C & & & &	H 	H 	H 	H 	Hv 	H 	H 	H C4 ( ( ( (    f    C$ ' ' ' '* * * * * * * * CD ) ) ) )& & & & &f & & &R C$ ' ' ' '$* $* $* $* $* $* $* $*N CD ) ) ) )        CD ) ) ) )< < < < <& < < < Cd + + + +IG IG IG IG IGV IG IG IGX C & & & &	A 	A 	A 	A 	A2 	A 	A 	A 	A 	As   *A? ?!B#"B#