a
    kÄ#dÌÌ  ã                   @   sž  d dl 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 d dlmZmZmZ d dlmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$ d d	l%m&Z&m'Z' zej(d
 d rØW n, e)�y   e *d¡ ddiej(d
< Y n0 G dd
„ d
e$ƒZ+G dd„ deƒZ,ee+e,dd� G dd„ deƒZ-ee+e-dd� G dd„ deƒZ.ee+e.dd� G dd„ deƒZ/ee+e/dd� G dd„ deƒZ0ee+e0dd� G dd „ d eƒZ1ee+e1d!d� G d"d#„ d#eƒZ2ee+e2d$d� G d%d&„ d&eƒZ3ee+e3d'd� G d(d)„ d)eƒZ4ee+e4d*d� G d+d,„ d,eƒZ5ee+e5d-d� G d.d/„ d/eƒZ6ee+e6d0d� G d1d2„ d2eƒZ7ee+e7d3d� G d4d5„ d5eƒZ8ee+e8d6d� G d7d8„ d8eƒZ9ee+e9d9d� G d:d;„ d;eƒZ:ee+e:d<d� G d=d>„ d>eƒZ;ee+e;d?d� G d@dA„ dAeƒZ<ee+e<dBd� G dCdD„ dDeƒZ=ee+e=dEd� G dFdG„ dGeƒZ>ee+e>dHd� G dIdJ„ dJeƒZ?ee+e?dKd� G dLdM„ dMeƒZ@ee+e@dNd� G dOdP„ dPeƒZAee+eAdQd� G dRdS„ dSeƒZBee+eBdTd� G dUdV„ dVeƒZCee+eCdWd� G dXdY„ dYeƒZDee+eDdZd� G d[d\„ d\eƒZEee+eEd]d� G d^d_„ d_eƒZFee+eFd`d� G dadb„ dbeƒZGee+eGdcd� G ddde„ deeƒZHee+eHdfd� G dgdh„ dheƒZIee+eIdid� G djdk„ dkeƒZJee+eJdld� G dmdn„ dneƒZKee+eKdod� G dpdq„ dqeƒZLee+eLdrd� G dsdt„ dteƒZMee+eMdud� G dvdw„ dweƒZNee+eNdxd� G dydz„ dzeƒZOee+eOd{d� G d|d}„ d}eƒZPee+ePd~d� G dd€„ d€eƒZQee+eQd�d� G d‚dƒ„ dƒeƒZRee+eRd„d� G d…d†„ d†eƒZSee+eSd‡d� G dˆd‰„ d‰eƒZTee+eTdŠd� G d‹dŒ„ dŒeƒZUee+eUd�d� G dŽd�„ d�eƒZVee+eVd�d� G d‘d’„ d’eƒZWee+eWd“d� G d”d•„ d•eƒZXee+eXd–d� G d—d˜„ d˜eƒZYee+eYd™d� G dšd›„ d›eƒZZee+eZdœd� G d�dž„ džeƒZ[ee+e[dŸd� G d d¡„ d¡eƒZ\ee+e\d¢d� G d£d¤„ d¤eƒZ]ee+e]d¥d� G d¦d§„ d§eƒZ^ee+e^d¨d� G d©dª„ dªeƒZ_ee+e_d«d� G d¬d­„ d­eƒZ`ee+e`d®d� G d¯d°„ d°eƒZaee+ead±d� G d²d³„ d³eƒZbee+ebd´d� G dµd¶„ d¶e"ƒZcdS )·é    N)Úlog_automotive)ÚByteEnumFieldÚStrFieldÚConditionalFieldÚBitEnumFieldÚBitFieldÚ
XByteFieldÚFieldListFieldÚXShortFieldÚX3BytesFieldÚ	XIntFieldÚ	ByteFieldÚ
ShortFieldÚObservableDictÚXShortEnumFieldÚXByteEnumFieldÚStrLenFieldÚFieldLenFieldÚXStrFixedLenFieldÚXStrLenField)ÚPacketÚbind_layersÚ	NoPayload)Úconf)Úlog_loadingÚScapy_Exception)ÚPeriodicSenderThread)ÚISOTP)ÚDictÚUnionÚUDSú treat-response-pending-as-answerzÈSpecify "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.Fc                9   @   s¦   e Zd Ze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(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8œ7ƒZd Zed9d:eƒgZd;d<„ Zd=d>„ Z	d?S )@r    ÚDiagnosticSessionControlÚECUResetÚClearDiagnosticInformationÚReadDTCInformationÚReadDataByIdentifierÚReadMemoryByAddressÚReadScalingDataByIdentifierÚSecurityAccessÚCommunicationControlÚAuthenticationZReadDataPeriodicIdentifierÚDynamicallyDefineDataIdentifierÚWriteDataByIdentifierÚInputOutputControlByIdentifierÚRoutineControlÚRequestDownloadÚRequestUploadÚTransferDataÚRequestTransferExitÚRequestFileTransferÚWriteMemoryByAddressÚTesterPresentÚ(DiagnosticSessionControlPositiveResponseÚECUResetPositiveResponseÚ*ClearDiagnosticInformationPositiveResponseÚ"ReadDTCInformationPositiveResponseÚ$ReadDataByIdentifierPositiveResponseÚ#ReadMemoryByAddressPositiveResponseÚ+ReadScalingDataByIdentifierPositiveResponseÚSecurityAccessPositiveResponseÚ$CommunicationControlPositiveResponseÚAuthenticationPositiveResponseZ*ReadDataPeriodicIdentifierPositiveResponseÚ/DynamicallyDefineDataIdentifierPositiveResponseÚ%WriteDataByIdentifierPositiveResponseÚ.InputOutputControlByIdentifierPositiveResponseÚRoutineControlPositiveResponseÚRequestDownloadPositiveResponseÚRequestUploadPositiveResponseÚTransferDataPositiveResponseÚ#RequestTransferExitPositiveResponseÚ#RequestFileTransferPositiveResponseÚ$WriteMemoryByAddressPositiveResponseÚTesterPresentPositiveResponseÚAccessTimingParameterÚSecuredDataTransmissionÚControlDTCSettingÚResponseOnEventÚLinkControlÚ%AccessTimingParameterPositiveResponseÚ'SecuredDataTransmissionPositiveResponseÚ!ControlDTCSettingPositiveResponseÚResponseOnEventPositiveResponseÚLinkControlPositiveResponseÚNegativeResponse)7é   é   é   é   é"   é#   é$   é'   é(   é)   é*   é,   é.   é/   é1   é4   é5   é6   é7   é8   é=   é>   éP   éQ   éT   éY   éb   éc   éd   ég   éh   éi   éj   él   én   éo   éq   ét   éu   év   éw   éx   é}   é~   éƒ   é„   é…   é†   é‡   éÃ   éÄ   éÅ   éÆ   éÇ   é   Úservicer   c                 C   sp   |j | j krdS | jdkr&| j |¡S | j|jd krlt| jtƒsNt|jtƒr^t| ƒt|ƒkS | j |j¡S dS )NFr�   é@   )Ú	__class__rŽ   ÚpayloadÚanswersÚ
isinstancer   Úlen©ÚselfÚother© r˜   úS/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/uds.pyr’   g   s    

ÿzUDS.answersc                 C   s*   | j dkrt d| j¡S t d| j d@ ¡S )Nr�   ÚBi¿ÿÿÿ)rŽ   ÚstructÚpackÚrequestServiceId)r–   r˜   r˜   r™   Úhashretu   s    
zUDS.hashretN)
Ú__name__Ú
__module__Ú__qualname__r   ÚservicesÚnamer   Úfields_descr’   rž   r˜   r˜   r˜   r™   r    )   s~   Êÿ8
ÿc                   @   s4   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ÚISOSAEReservedZdefaultSessionZprogrammingSessionZextendedDiagnosticSessionZsafetySystemDiagnosticSession)r   é   é   é   é   r�   r"   ÚdiagnosticSessionTyper   N)rŸ   r    r¡   r   ÚdiagnosticSessionTypesr£   r   r¤   r˜   r˜   r˜   r™   r¥   }   s   ú
ÿr¥   rW   )rŽ   c                   @   s0   e Zd ZdZeddejƒeddƒgZdd„ Z	dS )	Ú	UDS_DSCPRr7   r«   r   ZsessionParameterRecordó    c                 C   s   t |tƒo|j| jkS ©N)r“   r¥   r«   r•   r˜   r˜   r™   r’   –   s    

ÿzUDS_DSCPR.answersN)
rŸ   r    r¡   r£   r   r¥   r¬   r   r¤   r’   r˜   r˜   r˜   r™   r­   Ž   s   ÿýr­   rm   c                	   @   s4   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¦   Z	hardResetZkeyOffOnResetZ	softResetZenableRapidPowerShutDownZdisableRapidPowerShutDownZ	powerDown)r   r§   r¨   r©   rª   é   éA   r�   r#   Ú	resetTyper   N)rŸ   r    r¡   Ú
resetTypesr£   r   r¤   r˜   r˜   r˜   r™   r°   Ÿ   s   ø	
ÿr°   rX   c                   @   s:   e Zd ZdZeddejƒeeddƒdd„ ƒgZ	dd„ Z
d	S )
ÚUDS_ERPRr8   r³   r   ZpowerDownTimec                 C   s
   | j dkS ©Nrª   )r³   ©Úpktr˜   r˜   r™   Ú<lambda>·   r®   zUDS_ERPR.<lambda>c                 C   s   t |tƒo|j| jkS r¯   )r“   r°   r³   r•   r˜   r˜   r™   r’   º   s    zUDS_ERPR.answersN)rŸ   r    r¡   r£   r   r°   r´   r   r   r¤   r’   r˜   r˜   r˜   r™   rµ   ²   s   
ÿþrµ   rn   c                   @   s@   e Zd ZdZeddƒeeddƒdd„ ƒeeddƒd	d„ ƒgZd
S )ÚUDS_SAr)   ÚsecurityAccessTyper   ZsecurityAccessDataRecordr®   c                 C   s   | j d dkS ©Nr¨   r§   ©r»   r·   r˜   r˜   r™   r¹   Ç   r®   zUDS_SA.<lambda>ZsecurityKeyc                 C   s   | j d dkS )Nr¨   r   r½   r·   r˜   r˜   r™   r¹   É   r®   N)rŸ   r    r¡   r£   r   r   r   r¤   r˜   r˜   r˜   r™   rº   Â   s   
ÿ
ÿürº   r^   c                   @   s6   e Zd ZdZeddƒeeddƒdd„ ƒgZdd	„ Zd
S )ÚUDS_SAPRr>   r»   r   ZsecuritySeedr®   c                 C   s   | j d dkS r¼   r½   r·   r˜   r˜   r™   r¹   Õ   r®   zUDS_SAPR.<lambda>c                 C   s   t |tƒo|j| jkS r¯   )r“   rº   r»   r•   r˜   r˜   r™   r’   Ø   s    

ÿzUDS_SAPR.answersN)	rŸ   r    r¡   r£   r   r   r   r¤   r’   r˜   r˜   r˜   r™   r¾   Ð   s   
ÿþr¾   rt   c                   @   sz   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dddddddddddddddddœƒgZdS )ÚUDS_CCZenableRxAndTxZenableRxAndDisableTxZdisableRxAndEnableTxZdisableRxAndTx©r   r§   r¨   r©   r*   ÚcontrolTyper   ZcommunicationType0r¨   r¦   ZnormalCommunicationMessagesZ%networkManagmentCommunicationMessageszEnetworkManagmentCommunicationMessages and normalCommunicationMessagesZcommunicationType1ZcommunicationType2rª   z+Disable/Enable specified communication TypezDisable/Enable specific subnetzDisable/Enable network)r   r§   r¨   r©   rª   r±   é   é   é   é	   é
   é   é   é   é   é   N)	rŸ   r    r¡   ÚcontrolTypesr£   r   r   r   r¤   r˜   r˜   r˜   r™   r¿   á   sF   ü
ýÿ
ñÿ÷r¿   r_   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚUDS_CCPRr?   rÁ   r   c                 C   s   t |tƒo|j| jkS r¯   )r“   r¿   rÁ   r•   r˜   r˜   r™   r’     s    

ÿzUDS_CCPR.answersN)	rŸ   r    r¡   r£   r   r¿   rÌ   r¤   r’   r˜   r˜   r˜   r™   rÍ   	  s   ÿrÍ   ru   c                   @   sž  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d„ ƒeeddƒdd„ ƒee	dddd�dd„ ƒee
ddddd�dd„ ƒeedddd„ d �d!d„ ƒee
d"ddd#d�d$d„ ƒeed#dd%d„ d �d&d„ ƒee
d'ddd(d�d)d„ ƒeed(dd*d„ d �d+d„ ƒee
d,ddd-d�d.d„ ƒeed-dd/d„ d �d0d„ ƒee
d1ddd2d�d3d„ ƒeed2dd4d„ d �d5d„ ƒee
d6ddd7d�d8d„ ƒeed7dd9d„ d �d:d„ ƒgZdS );ÚUDS_AUTHZdeAuthenticateZverifyCertificateUnidirectionalZverifyCertificateBidirectionalZproofOfOwnershipZtransmitCertificateZ!requestChallengeForAuthenticationZ$verifyProofOfOwnershipUnidirectionalZ#verifyProofOfOwnershipBidirectionalZauthenticationConfigurationr¦   )
r   r§   r¨   r©   rª   r±   rÂ   rÃ   rÄ   r�   r+   ÚsubFunctionr   ZcommunicationConfigurationc                 C   s
   | j dv S ©N)r§   r¨   r±   ©rÏ   r·   r˜   r˜   r™   r¹   )  r®   zUDS_AUTH.<lambda>ZcertificateEvaluationIdc                 C   s
   | j dkS r¶   rÑ   r·   r˜   r˜   r™   r¹   +  r®   ÚalgorithmIndicatorrW   ©Úlengthc                 C   s
   | j dv S ©N)r±   rÂ   rÃ   rÑ   r·   r˜   r˜   r™   r¹   -  r®   ÚlengthOfCertificateClientNÚHZcertificateClient©ÚfmtÚ	length_ofc                 C   s
   | j dv S ©N)r§   r¨   rÑ   r·   r˜   r˜   r™   r¹   0  r®   r®   c                 C   s   | j S r¯   )rÖ   ©Úpr˜   r˜   r™   r¹   2  s    ©Zlength_fromc                 C   s
   | j dv S rÛ   rÑ   r·   r˜   r˜   r™   r¹   4  r®   ÚlengthOfProofOfOwnershipClientZproofOfOwnershipClientc                 C   s
   | j dv S ©N)r©   rÂ   rÃ   rÑ   r·   r˜   r˜   r™   r¹   8  r®   c                 C   s   | j S r¯   )rß   rÜ   r˜   r˜   r™   r¹   :  s    c                 C   s
   | j dv S rà   rÑ   r·   r˜   r˜   r™   r¹   <  r®   ÚlengthOfChallengeClientZchallengeClientc                 C   s
   | j dv S ©N)r§   r¨   rÂ   rÃ   rÑ   r·   r˜   r˜   r™   r¹   ?  r®   c                 C   s   | j S r¯   )rá   rÜ   r˜   r˜   r™   r¹   B  s    c                 C   s
   | j dv S râ   rÑ   r·   r˜   r˜   r™   r¹   D  r®   Ú lengthOfEphemeralPublicKeyClientZephemeralPublicKeyClientc                 C   s
   | j dkS ©Nr©   rÑ   r·   r˜   r˜   r™   r¹   I  r®   c                 C   s   | j S r¯   )rã   rÜ   r˜   r˜   r™   r¹   K  s    c                 C   s
   | j dkS rä   rÑ   r·   r˜   r˜   r™   r¹   M  r®   ÚlengthOfCertificateDataZcertificateDatac                 C   s
   | j dkS r¶   rÑ   r·   r˜   r˜   r™   r¹   P  r®   c                 C   s   | j S r¯   )rå   rÜ   r˜   r˜   r™   r¹   R  s    c                 C   s
   | j dkS r¶   rÑ   r·   r˜   r˜   r™   r¹   T  r®   ÚlengthOfAdditionalParameterZadditionalParameterc                 C   s
   | j dv S ©N)rÂ   rÃ   rÑ   r·   r˜   r˜   r™   r¹   X  r®   c                 C   s   | j S r¯   )ræ   rÜ   r˜   r˜   r™   r¹   Z  s    c                 C   s
   | j dv S rç   rÑ   r·   r˜   r˜   r™   r¹   \  r®   )rŸ   r    r¡   ÚsubFunctionsr£   r   r   r   r
   r   r   r   r¤   r˜   r˜   r˜   r™   rÎ     s¬   ö

ÿ
ÿÿÿþÿýþýÿýÿþÿýþýÿýÿþÿýþýÿýÍrÎ   r`   c                   @   s–  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�dd„ ƒee
ddddd�dd„ ƒeedddd„ d�dd„ ƒee
dddd d�d!d„ ƒeed dd"d„ d�d#d„ ƒee
d$ddd%d�d&d„ ƒeed%dd'd„ d�d(d„ ƒee
d)ddd*d�d+d„ ƒeed*dd,d„ d�d-d„ ƒee
d.ddd/d�d0d„ ƒeed/dd1d„ d�d2d„ ƒee
d3ddd4d�d5d„ ƒeed4dd6d„ d�d7d„ ƒgZd8d9„ ZdS ):Ú
UDS_AUTHPRZrequestAcceptedÚgeneralRejectZauthenticationConfigurationAPCEZ8authenticationConfigurationACRWithAsymmetricCryptographyZ7authenticationConfigurationACRWithSymmetricCryptographyr¦   ZdeAuthenticationSuccessfulZ1certificateVerifiedOwnershipVerificationNecessaryZ'ownershipVerifiedAuthenticationCompleteZcertificateVerified)r   r§   r¨   r©   rª   r±   rË   rW   rX   é   é   rY   éŸ   éÿ   r@   rÏ   r   ZreturnValuerÒ   rW   rÓ   c                 C   s
   | j dv S rÕ   rÑ   r·   r˜   r˜   r™   r¹   {  r®   zUDS_AUTHPR.<lambda>ÚlengthOfChallengeServerNr×   ZchallengeServerrØ   c                 C   s
   | j dv S rÐ   rÑ   r·   r˜   r˜   r™   r¹   ~  r®   r®   c                 C   s   | j S r¯   )rï   rÜ   r˜   r˜   r™   r¹   €  s    rÞ   c                 C   s
   | j dv S rÐ   rÑ   r·   r˜   r˜   r™   r¹   ‚  r®   ÚlengthOfCertificateServerZcertificateServerc                 C   s
   | j dkS ©Nr¨   rÑ   r·   r˜   r˜   r™   r¹   …  r®   c                 C   s   | j S r¯   )rð   rÜ   r˜   r˜   r™   r¹   ‡  s    c                 C   s
   | j dkS rñ   rÑ   r·   r˜   r˜   r™   r¹   ‰  r®   ÚlengthOfProofOfOwnershipServerZproofOfOwnershipServerc                 C   s
   | j dv S ©N)r¨   rÃ   rÑ   r·   r˜   r˜   r™   r¹   �  r®   c                 C   s   | j S r¯   )rò   rÜ   r˜   r˜   r™   r¹   �  s    c                 C   s
   | j dv S ró   rÑ   r·   r˜   r˜   r™   r¹   ‘  r®   ÚlengthOfSessionKeyInfoZsessionKeyInfoc                 C   s
   | j dv S rà   rÑ   r·   r˜   r˜   r™   r¹   ”  r®   c                 C   s   | j S r¯   )rô   rÜ   r˜   r˜   r™   r¹   –  s    c                 C   s
   | j dv S rà   rÑ   r·   r˜   r˜   r™   r¹   ˜  r®   Ú lengthOfEphemeralPublicKeyServerZephemeralPublicKeyServerc                 C   s
   | j dv S rÛ   rÑ   r·   r˜   r˜   r™   r¹   œ  r®   c                 C   s   | j S r¯   )rõ   rÜ   r˜   r˜   r™   r¹   ž  s    c                 C   s
   | j dv S rÛ   rÑ   r·   r˜   r˜   r™   r¹      r®   Ú!lengthOfNeededAdditionalParameterZneededAdditionalParameterc                 C   s
   | j dkS ©Nr±   rÑ   r·   r˜   r˜   r™   r¹   ¤  r®   c                 C   s   | j S r¯   )rö   rÜ   r˜   r˜   r™   r¹   ¦  s    c                 C   s
   | j dkS r÷   rÑ   r·   r˜   r˜   r™   r¹   ¨  r®   c                 C   s   t |tƒo|j| jkS r¯   )r“   rÎ   rÏ   r•   r˜   r˜   r™   r’   «  s    

ÿzUDS_AUTHPR.answers)rŸ   r    r¡   Z"authenticationReturnParameterTypesr£   r   rÎ   rè   r   r   r   r   r¤   r’   r˜   r˜   r˜   r™   ré   c  s¬   ð
ÿÿþÿýÿþÿýþýÿý
ÿþÿýþýÿýþýÿýÒ4ré   rv   c                   @   s   e Zd ZdZeddƒgZdS )ÚUDS_TPr6   rÏ   r   N©rŸ   r    r¡   r£   r   r¤   r˜   r˜   r˜   r™   rø   ´  s   ÿrø   rl   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )ÚUDS_TPPRrK   ZzeroSubFunctionr   c                 C   s
   t |tƒS r¯   )r“   rø   r•   r˜   r˜   r™   r’   Ä  s    zUDS_TPPR.answersN)rŸ   r    r¡   r£   r   r¤   r’   r˜   r˜   r˜   r™   rú   ¾  s   ÿrú   r‚   c                   @   s@   e Zd ZddddddœZdZedd	eƒeed
dƒdd„ ƒgZdS )ÚUDS_ATPr¦   ZreadExtendedTimingParameterSetZ"setTimingParametersToDefaultValuesZ#readCurrentlyActiveTimingParametersZ setTimingParametersToGivenValues©r   r§   r¨   r©   rª   rL   ÚtimingParameterAccessTyper   ZtimingParameterRequestRecordr®   c                 C   s
   | j dkS r¶   ©rý   r·   r˜   r˜   r™   r¹   Ù  r®   zUDS_ATP.<lambda>N)	rŸ   r    r¡   ÚtimingParameterAccessTypesr£   r   r   r   r¤   r˜   r˜   r˜   r™   rû   Ì  s   ûÿ
ÿýrû   rƒ   c                   @   s:   e Zd ZdZeddejƒeeddƒdd„ ƒgZ	dd	„ Z
d
S )Ú	UDS_ATPPRrQ   rý   r   ZtimingParameterResponseRecordr®   c                 C   s
   | j dkS rä   rþ   r·   r˜   r˜   r™   r¹   æ  r®   zUDS_ATPPR.<lambda>c                 C   s   t |tƒo|j| jkS r¯   )r“   rû   rý   r•   r˜   r˜   r™   r’   é  s
    
ÿÿzUDS_ATPPR.answersN)rŸ   r    r¡   r£   r   rû   rÿ   r   r   r¤   r’   r˜   r˜   r˜   r™   r   à  s   ÿ
ÿýr   rˆ   c                   @   s†   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d�gZdS )ÚUDS_SDTrM   ÚrequestMessager   r§   Ú$ISOSAEReservedBackwardsCompatibilityr¨   ÚpreEstablishedKeyUsedÚencryptedMessageÚsignedMessageÚsignedResponseRequestedr¦   rÅ   ÚsignatureEncryptionCalculationÚsignatureLengthÚantiReplayCounterZinternalMessageServiceRequestIdÚ
dataRecordr®   rš   ©rÙ   N)	rŸ   r    r¡   r£   r   r   r
   r   r¤   r˜   r˜   r˜   r™   r  õ  s   






ôr  r„   c                   @   sŽ   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d�gZdd„ Z	dS )Ú	UDS_SDTPRrR   r  r   r§   r  r¨   r  r  r  r  r¦   rÅ   r  r	  r
  Z internalMessageServiceResponseIdr  r®   rš   r  c                 C   s
   t |tƒS r¯   )r“   r  r•   r˜   r˜   r™   r’     s    zUDS_SDTPR.answersN)
rŸ   r    r¡   r£   r   r   r
   r   r¤   r’   r˜   r˜   r˜   r™   r  
  s   






ôr  r‰   c                   @   s2   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¨   rN   ÚDTCSettingTyper   ZDTCSettingControlOptionRecordr®   N)rŸ   r    r¡   ÚDTCSettingTypesr£   r   r   r¤   r˜   r˜   r˜   r™   r  #  s   ý
þr  r…   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚUDS_CDTCSPRrS   r  r   c                 C   s
   t |tƒS r¯   )r“   r  r•   r˜   r˜   r™   r’   9  s    zUDS_CDTCSPR.answersN)	rŸ   r    r¡   r£   r   r  r  r¤   r’   r˜   r˜   r˜   r™   r  3  s   ÿr  rŠ   c                   @   s8   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_ROEZdoNotStoreEventZ
storeEvent)r   r§   rO   Ú	eventTyper   ÚeventWindowTimeÚeventTypeRecordr®   N)	rŸ   r    r¡   Ú
eventTypesr£   r   r   r   r¤   r˜   r˜   r˜   r™   r  B  s   þ
ýr  r†   c                   @   s@   e Zd ZdZeddejƒeddƒeddƒeddƒgZ	dd	„ Z
d
S )Ú	UDS_ROEPRrT   r  r   ZnumberOfIdentifiedEventsr  r  r®   c                 C   s   t |tƒo|j| jkS r¯   )r“   r  r  r•   r˜   r˜   r™   r’   [  s    

ÿzUDS_ROEPR.answersN)rŸ   r    r¡   r£   r   r  r  r   r   r¤   r’   r˜   r˜   r˜   r™   r  R  s   ür  r‹   c                   @   st   e Zd ZdddddœZdZeddeƒ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S )ÚUDS_LCr¦   Z)verifyBaudrateTransitionWithFixedBaudrateZ,verifyBaudrateTransitionWithSpecificBaudrateZtransitionBaudraterÀ   rP   ÚlinkControlTyper   ZbaudrateIdentifierc                 C   s
   | j dkS ©Nr§   ©r  r·   r˜   r˜   r™   r¹   o  r®   zUDS_LC.<lambda>ZbaudrateHighBytec                 C   s
   | j dkS rñ   r  r·   r˜   r˜   r™   r¹   q  r®   ZbaudrateMiddleBytec                 C   s
   | j dkS rñ   r  r·   r˜   r˜   r™   r¹   s  r®   ZbaudrateLowBytec                 C   s
   | j dkS rñ   r  r·   r˜   r˜   r™   r¹   u  r®   N)	rŸ   r    r¡   ÚlinkControlTypesr£   r   r   r   r¤   r˜   r˜   r˜   r™   r  d  s(   ü

ÿ
ÿ
ÿ
ÿør  r‡   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚUDS_LCPRrU   r  r   c                 C   s   t |tƒo|j| jkS r¯   )r“   r  r  r•   r˜   r˜   r™   r’   ‚  s    

ÿzUDS_LCPR.answersN)	rŸ   r    r¡   r£   r   r  r  r¤   r’   r˜   r˜   r˜   r™   r  |  s   ÿr  rŒ   c                   @   s,   e Zd Zeƒ ZdZeddeddeƒƒgZdS )ÚUDS_RDBIr&   ÚidentifiersNÚdataIdentifierr   )	rŸ   r    r¡   r   ÚdataIdentifiersr£   r	   r   r¤   r˜   r˜   r˜   r™   r   ‹  s   ÿÿÿr   r[   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú
UDS_RDBIPRr;   r"  r   c                 C   s   t |tƒo| j|jv S r¯   )r“   r   r"  r!  r•   r˜   r˜   r™   r’   Ÿ  s    

ÿzUDS_RDBIPR.answersN©	rŸ   r    r¡   r£   r   r   r#  r¤   r’   r˜   r˜   r˜   r™   r$  ˜  s   ÿÿr$  rq   c                   @   s¸   e Zd ZdZe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„ ƒ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S )ÚUDS_RMBAr'   ÚmemorySizeLenr   rª   ÚmemoryAddressLenÚmemoryAddress1c                 C   s
   | j dkS r  ©r(  r·   r˜   r˜   r™   r¹   ®  r®   zUDS_RMBA.<lambda>ÚmemoryAddress2c                 C   s
   | j dkS rñ   r*  r·   r˜   r˜   r™   r¹   °  r®   ÚmemoryAddress3c                 C   s
   | j dkS rä   r*  r·   r˜   r˜   r™   r¹   ²  r®   ÚmemoryAddress4c                 C   s
   | j dkS r¶   r*  r·   r˜   r˜   r™   r¹   ´  r®   ÚmemorySize1c                 C   s
   | j dkS r  ©r'  r·   r˜   r˜   r™   r¹   ¶  r®   ÚmemorySize2c                 C   s
   | j dkS rñ   r/  r·   r˜   r˜   r™   r¹   ¸  r®   ÚmemorySize3c                 C   s
   | j dkS rä   r/  r·   r˜   r˜   r™   r¹   º  r®   ÚmemorySize4c                 C   s
   | j dkS r¶   r/  r·   r˜   r˜   r™   r¹   ¼  r®   N)rŸ   r    r¡   r£   r   r   r   r
   r   r   r¤   r˜   r˜   r˜   r™   r&  ¨  s8   


ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿïr&  r\   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	Ú
UDS_RMBAPRr<   r  r®   rš   r  c                 C   s
   t |tƒS r¯   )r“   r&  r•   r˜   r˜   r™   r’   É  s    zUDS_RMBAPR.answersN©rŸ   r    r¡   r£   r   r¤   r’   r˜   r˜   r˜   r™   r3  Ã  s   ÿr3  rr   c                   @   s$   e Zd ZdZeƒ ZeddeƒgZdS )Ú	UDS_RSDBIr(   r"  r   N)rŸ   r    r¡   r£   r   r#  r   r¤   r˜   r˜   r˜   r™   r5  Ñ  s   
ÿr5  r]   c                   @   s<   e Zd ZdZeddejƒeddƒedddd�gZ	d	d
„ Z
dS )ÚUDS_RSDBIPRr=   r"  r   ZscalingByter  r®   rš   r  c                 C   s   t |tƒo|j| jkS r¯   )r“   r5  r"  r•   r˜   r˜   r™   r’   å  s    

ÿzUDS_RSDBIPR.answersN)rŸ   r    r¡   r£   r   r5  r#  r   r   r¤   r’   r˜   r˜   r˜   r™   r6  Ý  s   ýr6  rs   c                   @   sJ   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d�gZ	dS )Ú	UDS_RDBPIr¦   ZsendAtSlowRateZsendAtMediumRateZsendAtFastRateZstopSendingrü   ZReadDataByPeriodicIdentifierZtransmissionModer   ÚperiodicDataIdentifierZfurtherPeriodicDataIdentifierr®   rš   r  N)
rŸ   r    r¡   r   ZperiodicDataIdentifiersZtransmissionModesr£   r   r   r¤   r˜   r˜   r˜   r™   r7  î  s   û

ýr7  ra   c                   @   s0   e Zd ZdZeddƒedddd�gZdd	„ Zd
S )ÚUDS_RDBPIPRZ,ReadDataByPeriodicIdentifierPositiveResponser8  r   r  r®   rš   r  c                 C   s   t |tƒo|j| jkS r¯   )r“   r7  r8  r•   r˜   r˜   r™   r’   
  s    

ÿzUDS_RDBPIPR.answersN©rŸ   r    r¡   r£   r   r   r¤   r’   r˜   r˜   r˜   r™   r9    s
   þr9  rw   c                   @   s6   e Zd ZdZddddœZeddeƒedd	d
d�gZdS )ÚUDS_DDDIr,   ZdefineByIdentifierZdefineByMemoryAddressZ%clearDynamicallyDefinedDataIdentifier©r§   r¨   r©   rÏ   r   r  r®   rš   r  N)rŸ   r    r¡   r£   rè   r   r   r¤   r˜   r˜   r˜   r™   r;    s   þ
þr;  rb   c                   @   s0   e Zd ZdZeddejƒeddƒgZdd„ Z	dS )Ú
UDS_DDDIPRrA   rÏ   r   Z dynamicallyDefinedDataIdentifierc                 C   s   t |tƒo|j| jkS r¯   )r“   r;  rÏ   r•   r˜   r˜   r™   r’   *  s    

ÿzUDS_DDDIPR.answersN)
rŸ   r    r¡   r£   r   r;  rè   r
   r¤   r’   r˜   r˜   r˜   r™   r=  #  s
   þr=  rx   c                   @   s    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>  3  s
   ÿÿr>  rc   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú
UDS_WDBIPRrB   r"  r   c                 C   s   t |tƒo|j| jkS r¯   )r“   r>  r"  r•   r˜   r˜   r™   r’   E  s    

ÿzUDS_WDBIPR.answersNr%  r˜   r˜   r˜   r™   r?  >  s   ÿÿr?  ry   c                   @   sÄ   e Zd ZdZe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„ ƒ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
dddd�gZdS )ÚUDS_WMBAr5   r'  r   rª   r(  r)  c                 C   s
   | j dkS r  r*  r·   r˜   r˜   r™   r¹   T  r®   zUDS_WMBA.<lambda>r+  c                 C   s
   | j dkS rñ   r*  r·   r˜   r˜   r™   r¹   V  r®   r,  c                 C   s
   | j dkS rä   r*  r·   r˜   r˜   r™   r¹   X  r®   r-  c                 C   s
   | j dkS r¶   r*  r·   r˜   r˜   r™   r¹   Z  r®   r.  c                 C   s
   | j dkS r  r/  r·   r˜   r˜   r™   r¹   \  r®   r0  c                 C   s
   | j dkS rñ   r/  r·   r˜   r˜   r™   r¹   ^  r®   r1  c                 C   s
   | j dkS rä   r/  r·   r˜   r˜   r™   r¹   `  r®   r2  c                 C   s
   | j dkS r¶   r/  r·   r˜   r˜   r™   r¹   b  r®   r  r®   rš   r  N)rŸ   r    r¡   r£   r   r   r   r
   r   r   r   r¤   r˜   r˜   r˜   r™   r@  N  s:   


ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿír@  rk   c                   @   sÀ   e Zd ZdZe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„ ƒ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d„ ZdS )Ú
UDS_WMBAPRrJ   r'  r   rª   r(  r)  c                 C   s
   | j dkS r  r*  r·   r˜   r˜   r™   r¹   q  r®   zUDS_WMBAPR.<lambda>r+  c                 C   s
   | j dkS rñ   r*  r·   r˜   r˜   r™   r¹   s  r®   r,  c                 C   s
   | j dkS rä   r*  r·   r˜   r˜   r™   r¹   u  r®   r-  c                 C   s
   | j dkS r¶   r*  r·   r˜   r˜   r™   r¹   w  r®   r.  c                 C   s
   | j dkS r  r/  r·   r˜   r˜   r™   r¹   y  r®   r0  c                 C   s
   | j dkS rñ   r/  r·   r˜   r˜   r™   r¹   {  r®   r1  c                 C   s
   | j dkS rä   r/  r·   r˜   r˜   r™   r¹   }  r®   r2  c                 C   s
   | j dkS r¶   r/  r·   r˜   r˜   r™   r¹     r®   c                 C   s"   t |tƒo |j| jko |j| jkS r¯   )r“   r@  r'  r(  r•   r˜   r˜   r™   r’   ‚  s
    

ÿ
þzUDS_WMBAPR.answersN)rŸ   r    r¡   r£   r   r   r   r
   r   r   r¤   r’   r˜   r˜   r˜   r™   rA  k  s:   


ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿïrA  r�   c                   @   s,   e Zd ZdZeddƒeddƒeddƒgZdS )Ú	UDS_CDTCIr$   ZgroupOfDTCHighByter   ZgroupOfDTCMiddleByteZgroupOfDTCLowByteNrù   r˜   r˜   r˜   r™   rB  Œ  s
   ýrB  rY   c                   @   s   e Zd ZdZdd„ ZdS )ÚUDS_CDTCIPRr9   c                 C   s
   t |tƒS r¯   )r“   rB  r•   r˜   r˜   r™   r’   ›  s    zUDS_CDTCIPR.answersN)rŸ   r    r¡   r£   r’   r˜   r˜   r˜   r™   rC  ˜  s   rC  ro   c                   @   sÎ   e Zd Z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Zeddeƒ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„ ƒeed(dƒd)d„ ƒgZ	d*S )+Ú	UDS_RDTCIr¦   ZreportNumberOfDTCByStatusMaskZreportDTCByStatusMaskZreportDTCSnapshotIdentificationZ"reportDTCSnapshotRecordByDTCNumberZ%reportDTCSnapshotRecordByRecordNumberZ&reportDTCExtendedDataRecordByDTCNumberZ%reportNumberOfDTCBySeverityMaskRecordZreportDTCBySeverityMaskRecordZreportSeverityInformationOfDTCZreportSupportedDTCZreportFirstTestFailedDTCZreportFirstConfirmedDTCZreportMostRecentTestFailedDTCZreportMostRecentConfirmedDTCZ!reportMirrorMemoryDTCByStatusMaskZ2reportMirrorMemoryDTCExtendedDataRecordByDTCNumberZ)reportNumberOfMirrorMemoryDTCByStatusMaskZ0reportNumberOfEmissionsRelatedOBDDTCByStatusMaskZ(reportEmissionsRelatedOBDDTCByStatusMaskZreportDTCFaultDetectionCounterZreportDTCWithPermanentStatus)r   r§   r¨   r©   rª   r±   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rW   rX   rë   rì   rY   é   r%   Ú
reportTyper   ZDTCSeverityMaskc                 C   s
   | j dv S )N)rÃ   rÄ   ©rF  r·   r˜   r˜   r™   r¹   À  r®   zUDS_RDTCI.<lambda>ZDTCStatusMaskc                 C   s
   | j dv S )N)r§   r¨   rÃ   rÄ   rË   rX   rë   rì   rG  r·   r˜   r˜   r™   r¹   Â  r®   ZDTCHighBytec                 C   s
   | j dv S ©N)r©   rª   rÂ   rW   rÅ   rG  r·   r˜   r˜   r™   r¹   Å  r®   ZDTCMiddleBytec                 C   s
   | j dv S rH  rG  r·   r˜   r˜   r™   r¹   È  r®   Z
DTCLowBytec                 C   s
   | j dv S rH  rG  r·   r˜   r˜   r™   r¹   Ë  r®   ZDTCSnapshotRecordNumberc                 C   s
   | j dv S )N)r©   rª   r±   rG  r·   r˜   r˜   r™   r¹   Î  r®   ZDTCExtendedDataRecordNumberc                 C   s
   | j dv S )N)rÂ   rW   rG  r·   r˜   r˜   r™   r¹   Ð  r®   N)
rŸ   r    r¡   ÚreportTypesr£   r   r   r   r   r¤   r˜   r˜   r˜   r™   rD  £  s^   ê

ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿîrD  rZ   c                   @   sŽ   e Zd ZdZeddejƒeeddƒdd„ ƒeedddd	d
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d„ ZdS )ÚUDS_RDTCIPRr:   rF  r   ZDTCStatusAvailabilityMaskc                 C   s
   | j dv S )N)r§   rÃ   rX   rë   r¨   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rì   rE  rG  r·   r˜   r˜   r™   r¹   Ü  r®   zUDS_RDTCIPR.<lambda>ZDTCFormatIdentifierzISO15031-6DTCFormatzUDS-1DTCFormatzSAEJ1939-73DTCFormatzISO11992-4DTCFormatrÀ   c                 C   s
   | j dv S ©N)r§   rÃ   rX   rë   rG  r·   r˜   r˜   r™   r¹   æ  r®   ZDTCCountc                 C   s
   | j dv S rK  rG  r·   r˜   r˜   r™   r¹   é  r®   ZDTCAndStatusRecordr®   c                 C   s
   | j dv S )N)	r¨   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rì   rE  rG  r·   r˜   r˜   r™   r¹   ì  r®   r  c                 C   s
   | j dv S )N)r©   rª   r±   rÂ   rÄ   rÅ   rW   rY   rG  r·   r˜   r˜   r™   r¹   ð  r®   c                 C   s   t |tƒo|j| jkS r¯   )r“   rD  rF  r•   r˜   r˜   r™   r’   õ  s    

ÿzUDS_RDTCIPR.answersN)rŸ   r    r¡   r£   r   rD  rI  r   r   r   r   r¤   r’   r˜   r˜   r˜   r™   rJ  ×  s2   
ÿýÿû
ÿ
ÿ
ÿêrJ  rp   c                   @   s<   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¦   ZstartRoutineZstopRoutineZrequestRoutineResultsrÀ   r/   ÚroutineControlTyper   ÚroutineIdentifierN)
rŸ   r    r¡   ÚroutineControlTypesr   ÚroutineControlIdentifiersr£   r   r   r¤   r˜   r˜   r˜   r™   rL  þ  s   ü

þrL  re   c                   @   s4   e Zd ZdZeddejƒeddejƒgZ	dd„ Z
dS )ÚUDS_RCPRrD   rM  r   rN  c                 C   s"   t |tƒo |j| jko |j| jkS r¯   )r“   rL  rM  rN  r•   r˜   r˜   r™   r’     s
    

ÿ
þzUDS_RCPR.answersN)rŸ   r    r¡   r£   r   rL  rO  r   rP  r¤   r’   r˜   r˜   r˜   r™   rQ    s   ÿþrQ  r{   c                   @   sÎ   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	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
„ ƒeeddƒdd
„ ƒgZdS )ÚUDS_RDr   ZnoCompressionNoEncryptionr0   ÚdataFormatIdentifierr'  rª   r(  r)  c                 C   s
   | j dkS r  r*  r·   r˜   r˜   r™   r¹   ,  r®   zUDS_RD.<lambda>r+  c                 C   s
   | j dkS rñ   r*  r·   r˜   r˜   r™   r¹   .  r®   r,  c                 C   s
   | j dkS rä   r*  r·   r˜   r˜   r™   r¹   0  r®   r-  c                 C   s
   | j dkS r¶   r*  r·   r˜   r˜   r™   r¹   2  r®   r.  c                 C   s
   | j dkS r  r/  r·   r˜   r˜   r™   r¹   4  r®   r0  c                 C   s
   | j dkS rñ   r/  r·   r˜   r˜   r™   r¹   6  r®   r1  c                 C   s
   | j dkS rä   r/  r·   r˜   r˜   r™   r¹   8  r®   r2  c                 C   s
   | j dkS r¶   r/  r·   r˜   r˜   r™   r¹   :  r®   N)rŸ   r    r¡   r   ÚdataFormatIdentifiersr£   r   r   r   r   r
   r   r   r¤   r˜   r˜   r˜   r™   rR  "  s@   ÿ



ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿîrR  rf   c                   @   s<   e Zd ZdZedddƒedddƒedddd	�gZd
d„ ZdS )ÚUDS_RDPRrE   r'  r   rª   ÚreservedÚmaxNumberOfBlockLengthr®   rš   r  c                 C   s
   t |tƒS r¯   )r“   rR  r•   r˜   r˜   r™   r’   I  s    zUDS_RDPR.answersN©rŸ   r    r¡   r£   r   r   r¤   r’   r˜   r˜   r˜   r™   rU  A  s   

ýrU  r|   c                   @   sÄ   e Zd ZdZeddejƒe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	„ ƒ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S )ÚUDS_RUr1   rS  r   r'  rª   r(  r)  c                 C   s
   | j dkS r  r*  r·   r˜   r˜   r™   r¹   Y  r®   zUDS_RU.<lambda>r+  c                 C   s
   | j dkS rñ   r*  r·   r˜   r˜   r™   r¹   [  r®   r,  c                 C   s
   | j dkS rä   r*  r·   r˜   r˜   r™   r¹   ]  r®   r-  c                 C   s
   | j dkS r¶   r*  r·   r˜   r˜   r™   r¹   _  r®   r.  c                 C   s
   | j dkS r  r/  r·   r˜   r˜   r™   r¹   a  r®   r0  c                 C   s
   | j dkS rñ   r/  r·   r˜   r˜   r™   r¹   c  r®   r1  c                 C   s
   | j dkS rä   r/  r·   r˜   r˜   r™   r¹   e  r®   r2  c                 C   s
   | j dkS r¶   r/  r·   r˜   r˜   r™   r¹   g  r®   N)rŸ   r    r¡   r£   r   rR  rT  r   r   r   r
   r   r   r¤   r˜   r˜   r˜   r™   rY  Q  s>   ÿ


ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿírY  rg   c                   @   s<   e Zd ZdZedddƒedddƒedddd	�gZd
d„ ZdS )ÚUDS_RUPRrF   r'  r   rª   rV  rW  r®   rš   r  c                 C   s
   t |tƒS r¯   )r“   rY  r•   r˜   r˜   r™   r’   v  s    zUDS_RUPR.answersNrX  r˜   r˜   r˜   r™   rZ  n  s   

ýrZ  r}   c                   @   s(   e Zd ZdZeddƒedddd�gZdS )	ÚUDS_TDr2   ÚblockSequenceCounterr   ÚtransferRequestParameterRecordr®   rš   r  N)rŸ   r    r¡   r£   r   r   r¤   r˜   r˜   r˜   r™   r[  ~  s   þr[  rh   c                   @   s0   e Zd ZdZeddƒedddd�gZdd	„ Zd
S )ÚUDS_TDPRrG   r\  r   ÚtransferResponseParameterRecordr®   rš   r  c                 C   s   t |tƒo|j| jkS r¯   )r“   r[  r\  r•   r˜   r˜   r™   r’   �  s    

ÿzUDS_TDPR.answersNr:  r˜   r˜   r˜   r™   r^  ‰  s
   þr^  r~   c                   @   s    e Zd ZdZedddd�gZdS )ÚUDS_RTEr3   r]  r®   rš   r  N)rŸ   r    r¡   r£   r   r¤   r˜   r˜   r˜   r™   r`  ™  s   ÿr`  ri   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	Ú	UDS_RTEPRrH   r_  r®   rš   r  c                 C   s
   t |tƒS r¯   )r“   r`  r•   r˜   r˜   r™   r’   ©  s    zUDS_RTEPR.answersNr4  r˜   r˜   r˜   r™   ra  £  s   ÿra  r   c                   @   sÎ   e Zd ZdZdddddddœZed	d
„ ƒZeddeƒeddddd�e	dddd„ d�e
edddƒdd„ ƒe
edddƒdd„ ƒe
eddddd�dd„ ƒe
e	ddd d„ d�d!d„ ƒe
e	d"dd#d„ d�d$d„ ƒgZdS )%ÚUDS_RFTr4   zISO/SAE ReservedzAdd FilezDelete FilezReplace Filez	Read FilezRead Directory)r   r§   r¨   r©   rª   r±   c                 C   s
   | j dvS )N)r¨   rª   r±   ©ÚmodeOfOperation©Úpacketr˜   r˜   r™   Ú_contains_file_size½  s    zUDS_RFT._contains_file_sizerd  r   ÚfilePathAndNameLengthNZfilePathAndNamer×   ©rÚ   rÙ   r®   c                 C   s   | j S r¯   )rh  rÜ   r˜   r˜   r™   r¹   Æ  r®   zUDS_RFT.<lambda>rÞ   ÚcompressionMethodrª   c                 C   s
   | j dvS ©N)r¨   r±   rc  rÜ   r˜   r˜   r™   r¹   È  r®   ÚencryptingMethodc                 C   s
   | j dvS rk  rc  rÜ   r˜   r˜   r™   r¹   Ê  r®   ÚfileSizeParameterLengthrš   ZfileSizeUnCompressedrØ   c                 C   s
   t  | ¡S r¯   ©rb  rg  rÜ   r˜   r˜   r™   r¹   Î  r®   c                 C   s   | j S r¯   ©rm  rÜ   r˜   r˜   r™   r¹   Ð  s    c                 C   s
   t  | ¡S r¯   rn  rÜ   r˜   r˜   r™   r¹   Ò  r®   ÚfileSizeCompressedc                 C   s   | j S r¯   ro  rÜ   r˜   r˜   r™   r¹   Ô  s    c                 C   s
   t  | ¡S r¯   rn  rÜ   r˜   r˜   r™   r¹   Ö  r®   )rŸ   r    r¡   r£   ÚmodeOfOperationsÚstaticmethodrg  r   r   r   r   r   r¤   r˜   r˜   r˜   r™   rb  ±  sP   ú	

ÿÿÿÿþýÿýÿýîrb  rj   c                   @   sØ   e Zd ZdZedd„ ƒZeddejƒe	e
dddd	d
�dd„ ƒe	edddd„ d�dd„ ƒe	edddƒdd„ ƒe	edddƒdd„ ƒe	e
dddd�dd„ ƒe	edddd„ d�dd„ ƒe	edddd„ d�dd„ ƒgZdd „ ZdS )!Ú	UDS_RFTPRrI   c                 C   s
   | j dkS rñ   rc  re  r˜   r˜   r™   Ú _contains_data_format_identifierà  s    z*UDS_RFTPR._contains_data_format_identifierrd  r   ÚlengthFormatIdentifierNrW  rš   ri  c                 C   s
   | j dkS rñ   rc  rÜ   r˜   r˜   r™   r¹   é  r®   zUDS_RFTPR.<lambda>r®   c                 C   s   | j S r¯   )ru  rÜ   r˜   r˜   r™   r¹   ë  r®   rÞ   c                 C   s
   | j dkS rñ   rc  rÜ   r˜   r˜   r™   r¹   ì  r®   rj  rª   c                 C   s
   | j dkS rñ   rc  rÜ   r˜   r˜   r™   r¹   î  r®   rl  c                 C   s
   | j dkS rñ   rc  rÜ   r˜   r˜   r™   r¹   ð  r®   Ú fileSizeOrDirInfoParameterLengthZ#fileSizeUncompressedOrDirInfoLength)rÚ   c                 C   s
   | j dvS ©Nr<  rc  rÜ   r˜   r˜   r™   r¹   ô  r®   c                 C   s   | j S r¯   ©rv  rÜ   r˜   r˜   r™   r¹   ÷  s    c                 C   s
   | j dvS rw  rc  rÜ   r˜   r˜   r™   r¹   ù  r®   rp  c                 C   s   | j S r¯   rx  rÜ   r˜   r˜   r™   r¹   û  s    c                 C   s
   | j dvS )N)r§   r¨   r©   r±   rc  rÜ   r˜   r˜   r™   r¹   ý  r®   c                 C   s
   t |tƒS r¯   )r“   rb  r•   r˜   r˜   r™   r’      s    zUDS_RFTPR.answers)rŸ   r    r¡   r£   rr  rt  r   rb  rq  r   r   r   r   r¤   r’   r˜   r˜   r˜   r™   rs  Ý  sP   
þýÿþÿÿþýþüÿýêrs  r€   c                   @   s8   e Zd ZdZeƒ Zeddeƒeddƒedddd�gZ	d	S )
Ú	UDS_IOCBIr.   r"  r   ZcontrolOptionRecordZcontrolEnableMaskRecordr®   rš   r  N)
rŸ   r    r¡   r£   r   r#  r   r   r   r¤   r˜   r˜   r˜   r™   ry    s   
ýry  rd   c                   @   s0   e Zd ZdZeddƒedddd�gZdd	„ Zd
S )ÚUDS_IOCBIPRrC   r"  r   ZcontrolStatusRecordr®   rš   r  c                 C   s   t |tƒo|j| jkS r¯   )r“   ry  r"  r•   r˜   r˜   r™   r’     s    

ÿzUDS_IOCBIPR.answersN)rŸ   r    r¡   r£   r
   r   r¤   r’   r˜   r˜   r˜   r™   rz    s
   þrz  rz   c                /   @   s”   e Zd Z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&dd'd(d)d*d+d,œ.Zd-Zed.d/ejƒed0d/eƒgZ	d1d2„ Z
d3S )4ÚUDS_NRZpositiveResponserê   ZserviceNotSupportedZsubFunctionNotSupportedZ%incorrectMessageLengthOrInvalidFormatZresponseTooLongr¦   ZbusyRepeatRequestZconditionsNotCorrectZrequestSequenceErrorZnoResponseFromSubnetComponentZ)failurePreventsExecutionOfRequestedActionZrequestOutOfRangeZsecurityAccessDeniedZ
invalidKeyZexceedNumberOfAttemptsZrequiredTimeDelayNotExpiredZsecureDataVerificationFailedZuploadDownloadNotAcceptedZtransferDataSuspendedZgeneralProgrammingFailureZwrongBlockSequenceCounterz(requestCorrectlyReceived-ResponsePendingZ&subFunctionNotSupportedInActiveSessionZ"serviceNotSupportedInActiveSessionZ
rpmTooHighZ	rpmTooLowZengineIsRunningZengineIsNotRunningZengineRunTimeTooLowZtemperatureTooHighZtemperatureTooLowZvehicleSpeedTooHighZvehicleSpeedTooLowzthrottle/PedalTooHighzthrottle/PedalTooLowZtransmissionRangeNotInNeutralZtransmissionRangeNotInGearzbrakeSwitch(es)NotClosedZshifterLeverNotInParkZtorqueConverterClutchLockedZvoltageTooHighZvoltageTooLow).r   rW   rX   rë   rì   rY   é    é!   r[   r\   r]   é%   é&   re   é3   rg   rh   ri   é:   ép   r{   ér   és   r€   r‚   r�   é€   é�   é‚   rƒ   r„   r…   r†   r‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   é�   é�   é‘   é’   é“   rV   r�   r   ÚnegativeResponseCodec                 C   s$   | j |jko"| jdkp"tjd d S )Nr€   r    r!   )r�   rŽ   r”  r   Úcontribsr•   r˜   r˜   r™   r’   \  s    
þzUDS_NR.answersN)rŸ   r    r¡   ZnegativeResponseCodesr£   r   r    r¢   r   r¤   r’   r˜   r˜   r˜   r™   r{  %  sh   Ò0
þr{  r�   c                   @   s*   e Zd Zeƒ eƒ  dfdd„Zdd„ ZdS )ÚUDS_TesterPresentSenderr¨   c                 C   s   t  | |||¡ 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¸   Úintervalr˜   r˜   r™   r—  k  s    z UDS_TesterPresentSender.__init__c                 C   s¢   | j  ¡ sž| jjsž| jD ]‚}z| jj|ddd� W nD tttfyv } z&t	 
d|¡ W Y d }~ q W Y d }~n
d }~0 0 t | j¡ | j  ¡ s–| jjr q qq d S )Ng333333Ó?F)ÚtimeoutÚverbosez$Exception in TesterPresentSender: %s)Z_stoppedÚis_setÚ_socketÚclosedZ_pktsZsr1ÚOSErrorÚ
ValueErrorr   r   Ú	exceptionÚtimeÚsleepZ	_interval)r–   rÝ   Úer˜   r˜   r™   Úrunu  s    
ÿ$zUDS_TesterPresentSender.runN)rŸ   r    r¡   r    rø   r—  r¥  r˜   r˜   r˜   r™   r–  j  s   
r–  )dr›   r¢  Zscapy.contrib.automotiver   Zscapy.fieldsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zscapy.packetr   r   r   Zscapy.configr   Zscapy.errorr   r   Zscapy.utilsr   Zscapy.contrib.isotpr   Zscapy.compatr   r   r•  ÚKeyErrorÚinfor    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&  r3  r5  r6  r7  r9  r;  r=  r>  r?  r@  rA  rB  rC  rD  rJ  rL  rQ  rR  rU  rY  rZ  r[  r^  r`  ra  rb  rs  ry  rz  r{  r–  r˜   r˜   r˜   r™   Ú<module>	   sþ   T
T%HM



	1#
)'
=