a
    kÄ#d�I  ã                   @   sJ  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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` d dlambZbmcZcmdZdmeZe d dlfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZp d dlqmrZr d dlsmtZtmuZu d d	lvmwZwmxZxmyZymzZz ej{ |d
i ¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd¡ ej{d
  |dd ¡ G dd„ derƒZ}G dd„ detƒZ~G dd„ deuƒZG dd„ dewƒZ€G dd „ d ewƒZ�exe�ed!d"� exe�ed#d"� exe�ed$d"� exe�ed%d"� exe�ed&d"� exe�e	d'd"� exe�e
d(d"� exe�ed)d"� exe�ed*d"� exe�ed+d"� exe�ed,d"� exe�ed-d"� exe�ed.d"� exe�ed/d"� exe�ed/d!d0� exe�ed/d#d0� exe�ed/d$d0� exe�ed1d"� exe�ed2d"� exe�ed3d"� exe�ed4d"� exe�ed5d"� exe�ed6d"� exe�ed7d"� exe�ed8d"� exe�ed9d"� exe�ed:d"� exe�ed;d"� exe�e d<d"� exe�e!d=d"� exe�e"d>d"� exe�e#d?d"� exe�e$d@d"� exe�e%dAd"� exe�e&dBd"� exe�e'dCd"� exe�e(dDd"� exe�e)dEd"� exe�e*dFd"� exe�e+dGd"� exe�e,dHd"� exe�e-dId"� exe�e.dJd"� exe�e/dKd"� exe�e0dLd"� exe�e1dMd"� exe�e2dNd"� exe�e3dOd"� exe�e4dPd"� exe�e5dQd"� exe�e6dRd"� exe�e7dSd"� exe�e8dTd"� exe�e9dUd"� exe�e:dVd"� exe�e;dWd"� exe�e<dXd"� exe�e=dYd"� exe�e>dZd"� G d[d\„ d\ewƒZ‚eƒd d]ƒD ]Z„exe�e‚e„d"� �qjG d^d_„ d_ewƒZ…eƒd d%ƒD ]Z„exe…e‚e„d"� �qšeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe[e\e]e^e_e`gZ†e†D ]Z‡eze…e‡d!d`� �qèexe…eAd#d`� exe…eBd$d`� exe…eCd%d`� eye}e…ƒ eye~e…ƒ eyee…ƒ dS )aé    N)Úconf);ÚConnectÚ
DisconnectÚ	GetStatusÚSynchÚGetCommModeInfoÚGetIdÚ
SetRequestÚGetSeedÚUnlockÚSetMtaÚUploadÚShortUploadÚBuildChecksumÚTransportLayerCmdÚTransportLayerCmdGetSlaveIdÚTransportLayerCmdGetDAQIdÚTransportLayerCmdSetDAQIdÚUserCmdÚDownloadÚDownloadNextÚDownloadMaxÚShortDownloadÚ
ModifyBitsÚ
SetCalPageÚ
GetCalPageÚGetPagProcessorInfoÚGetSegmentInfoÚGetPageInfoÚSetSegmentModeÚGetSegmentModeÚCopyCalPageÚ	SetDaqPtrÚWriteDaqÚSetDaqListModeÚGetDaqListModeÚStartStopDaqListÚStartStopSynchÚReadDaqÚGetDaqClockÚGetDaqProcessorInfoÚGetDaqResolutionInfoÚGetDaqListInfoÚGetDaqEventInfoÚClearDaqListÚFreeDaqÚAllocDaqÚAllocOdtÚAllocOdtEntryÚProgramStartÚProgramClearÚProgramÚProgramResetÚGetPgmProcessorInfoÚGetSectorInfoÚProgramPrepareÚProgramFormatÚProgramNextÚ
ProgramMaxÚProgramVerify)!ÚGenericResponseÚNegativeResponseÚEvPacketÚ
ServPacketÚ#TransportLayerCmdGetSlaveIdResponseÚ!TransportLayerCmdGetDAQIdResponseÚ SegmentInfoMode0PositiveResponseÚ SegmentInfoMode1PositiveResponseÚ SegmentInfoMode2PositiveResponseÚConnectPositiveResponseÚStatusPositiveResponseÚCommonModeInfoPositiveResponseÚIdPositiveResponseÚSeedPositiveResponseÚUnlockPositiveResponseÚUploadPositiveResponseÚShortUploadPositiveResponseÚChecksumPositiveResponseÚCalPagePositiveResponseÚ PagProcessorInfoPositiveResponseÚPageInfoPositiveResponseÚSegmentModePositiveResponseÚDAQListModePositiveResponseÚ StartStopDAQListPositiveResponseÚDAQClockListPositiveResponseÚReadDAQPositiveResponseÚ DAQProcessorInfoPositiveResponseÚ!DAQResolutionInfoPositiveResponseÚDAQListInfoPositiveResponseÚDAQEventInfoPositiveResponseÚProgramStartPositiveResponseÚPgmProcessorPositiveResponseÚSectorInfoPositiveResponse)Úget_timestamp_lengthÚ$identification_field_needs_alignmentÚget_daq_lengthÚget_daq_data_field_length)
ÚByteEnumFieldÚ
ShortFieldÚ	XBitFieldÚ
FlagsFieldÚ	ByteFieldÚThreeBytesFieldÚStrFieldÚConditionalFieldÚ
XByteFieldÚStrLenField)ÚCAN)ÚUDPÚTCP)ÚPacketÚbind_layersÚbind_bottom_upÚbind_top_downÚXCPZ
byte_orderé   Zallow_byte_order_changeTZAddress_Granularity_ByteZallow_ag_changeZMAX_CTOZMAX_DTOZallow_cto_and_dto_changeÚadd_padding_for_canFZtimestamp_sizec                       sV   e Zd ZdZedddg d¢ƒedddƒedd	ƒed
dƒgZ‡ fdd„Z	dd„ Z
‡  ZS )ÚXCPOnCANz5Universal calibration and measurement protocol on CANÚflagsr   é   )ÚerrorZremote_transmission_requestÚextendedÚ
identifieré   ÚlengthNÚreservedc                    sˆ   | j d u s$t|ƒdk rvtjd d rvtjd d r6dnt|ƒ}|d d… t d|¡ |dd …  }|d|t|ƒ  7 }tt| ƒ ||¡S )Né   rt   rv   é   ÚBé   ó   Ì)	r~   Úlenr   ÚcontribsÚstructÚpackÚsuperrw   Ú
post_build©ÚselfÚpktÚpayÚtmp_len©Ú	__class__© úW/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/xcp/xcp.pyrŠ   Y   s    

ÿÿÿ$zXCPOnCAN.post_buildc                 C   s   |d | j … d fS ©N)r~   )rŒ   Úpr’   r’   r“   Úextract_paddingb   s    zXCPOnCAN.extract_padding)Ú__name__Ú
__module__Ú__qualname__Únamerf   re   rg   rh   Úfields_descrŠ   r–   Ú__classcell__r’   r’   r�   r“   rw   N   s   
ú		rw   c                       s:   e Zd ZdZejeddƒeddƒg Z‡ fdd„Z‡  ZS )ÚXCPOnUDPú:Universal calibration and measurement protocol on Ethernetr~   NÚctrr   c                    sH   | j d u r6t|ƒ}|d d… t d|¡ |dd …  }tt| ƒ ||¡S )Nr€   ú!Hé
   )r~   r…   r‡   rˆ   r‰   r�   rŠ   r‹   r�   r’   r“   rŠ   m   s    
$zXCPOnUDP.post_build)	r—   r˜   r™   rš   rn   r›   rd   rŠ   rœ   r’   r’   r�   r“   r�   f   s   þr�   c                       sB   e Zd ZdZejeddƒeddƒg Zdd„ Z‡ fdd	„Z‡  Z	S )
ÚXCPOnTCPrž   r~   NrŸ   r   c                 C   s8   t |tƒsdS t |jtƒr4t | jtƒr4| j |j¡S d S ©Nr   )Ú
isinstancer¢   ÚpayloadÚ
CTORequestÚCTOResponseÚanswers)rŒ   Úotherr’   r’   r“   r¨   |   s    
ÿzXCPOnTCP.answersc                    s^   | j d u rLdt| jƒ }t|ƒ}t d|¡}|d |… | ||d d …  }tt| ƒ ||¡S )Né   r    é   )r~   r…   Úoptionsr‡   rˆ   r‰   r¢   rŠ   )rŒ   r�   rŽ   Z
len_offsetr�   r�   r’   r“   rŠ   ƒ   s    
 zXCPOnTCP.post_build)
r—   r˜   r™   rš   ro   r›   rd   r¨   rŠ   rœ   r’   r’   r�   r“   r¢   t   s   þr¢   c                   @   s   e Zd ZdZeddƒgZdS )ÚXCPOnCANTailzXCP Tail on CANZcontrol_fieldÚ N)r—   r˜   r™   rš   ri   r›   r’   r’   r’   r“   r­   Œ   s   ÿr­   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/d0d1d2d3d4d5d6d7d8d9d:œ9Zed;d<ƒD ]Zd=ee< qŠd>Zed?d@eƒgZdAS )Br¦   ZCONNECTZ
DISCONNECTZ
GET_STATUSZSYNCHZGET_COMM_MODE_INFOZGET_IDZSET_REQUESTZGET_SEEDZUNLOCKZSET_MTAZUPLOADZSHORT_UPLOADZBUILD_CHECKSUMZTRANSPORT_LAYER_CMDZUSER_CMDÚDOWNLOADZDOWNLOAD_NEXTZDOWNLOAD_MAXZSHORT_DOWNLOADZMODIFY_BITSZSET_CAL_PAGEZGET_CAL_PAGEZGET_PAG_PROCESSOR_INFOZGET_SEGMENT_INFOZGET_PAGE_INFOZSET_SEGMENT_MODEZGET_SEGMENT_MODEZCOPY_CAL_PAGEZSET_DAQ_PTRZ	WRITE_DAQZSET_DAQ_LIST_MODEZGET_DAQ_LIST_MODEZSTART_STOP_DAQ_LISTZSTART_STOP_SYNCHZWRITE_DAQ_MULTIPLEZREAD_DAQZGET_DAQ_CLOCKZGET_DAQ_PROCESSOR_INFOZGET_DAQ_RESOLUTION_INFOZGET_DAQ_LIST_INFOZGET_DAQ_EVENT_INFOZCLEAR_DAQ_LISTZFREE_DAQZ	ALLOC_DAQZ	ALLOC_ODTZALLOC_ODT_ENTRYZPROGRAM_STARTZPROGRAM_CLEARZPROGRAMZPROGRAM_RESETZGET_PGM_PROCESSOR_INFOZGET_SECTOR_INFOZPROGRAM_PREPAREZPROGRAM_FORMATZPROGRAM_NEXTZPROGRAM_MAXZPROGRAM_VERIFY)9éÿ   éþ   éý   éü   éû   éú   éù   éø   é÷   éö   éõ   éô   éó   éò   éñ   éð   éï   éî   éí   éì   éë   éê   éé   éè   éç   éæ   éå   éä   éâ   éá   éà   éß   éÞ   éÝ   éÇ   éÛ   éÜ   éÚ   éÙ   éØ   é×   éã   éÖ   éÕ   éÔ   éÓ   éÒ   éÑ   éÐ   éÏ   éÎ   éÍ   éÌ   éË   éÊ   éÉ   éÈ   r   éÀ   ZSTIMzCommand Transfer Object RequestÚpidr°   N)	r—   r˜   r™   ZpidsÚrangerê   rš   rc   r›   r’   r’   r’   r“   r¦   ”   s~   ÀC

ÿr¦   r°   )rê   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   )rê   Úsub_command_coder¾   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Ø   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   rä   rå   ræ   rç   rè   c                	   @   st   e Zd ZdZee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 )ÚDTOzData transfer objectÚfillr   c                 C   s   t ƒ S r”   )r`   ©Ú_r’   r’   r“   Ú<lambda>7  ó    zDTO.<lambda>Zdaqrò   c                 C   s   t ƒ S r”   ©ra   rï   r’   r’   r“   rñ   9  rò   )Zlength_fromc                 C   s
   t ƒ dkS r£   ró   rï   r’   r’   r“   rñ   :  rò   Ú	timestampc                 C   s   t ƒ S r”   ©r_   rï   r’   r’   r“   rñ   =  rò   c                 C   s
   t ƒ dkS r£   rõ   rï   r’   r’   r“   rñ   >  rò   Údatac                 C   s   t ƒ S r”   ©rb   rï   r’   r’   r“   rñ   A  rò   c                 C   s
   t ƒ dkS r£   r÷   rï   r’   r’   r“   rñ   B  rò   N)r—   r˜   r™   rš   rj   rk   rl   r›   r’   r’   r’   r“   rí   3  s*   
ÿþÿýÿýörí   ré   c                   @   s@   e Zd ZdddddœZdZeddeƒgZed	d
„ ƒZdd„ Z	dS )r§   ZRESZERRZEVZSERV)r°   r±   r²   r³   z Command Transfer Object ResponseÚpacket_coder°   c                 C   sš   | j }|dkr*| jdkrtS | jdkr*tS |dkr\| jdkr@tS | jdkrNtS | jdkr\tS tt	t
tttttttttttttttttttttdœ  |t!¡S )	Nr½   r°   r±   rÇ   Zget_basic_address_infoZget_standard_infoZget_address_mapping_info)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ê   rì   rB   rC   ÚmoderD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   Úgetr>   )ÚrequestZrequest_pidr’   r’   r“   Úget_positive_response_clsW  sP    




éèz%CTOResponse.get_positive_response_clsc                 C   s”   t |tƒsdS | jdv rdS | jdkr*dS |  |¡}t|ƒ ƒ}t| jƒ}||k rTdS z$t| jƒ}|  ¡  |  ||ƒ¡ W n t	j
yŽ   Y dS 0 dS )zßIn XCP, the payload of a response packet is dependent on the pid
        field of the corresponding request.
        This method changes the class of the payload to the class
        which is expected for the given request.F)r±   r²   r³   Tr°   )r¤   r¦   rø   rü   r…   r¥   ÚbytesZremove_payloadZadd_payloadr‡   rz   )rŒ   rû   Zpayload_clsZminimum_expected_byte_countZgiven_byte_countrö   r’   r’   r“   r¨   „  s$    







zCTOResponse.answersN)
r—   r˜   r™   Zpacket_codesrš   rc   r›   Ústaticmethodrü   r¨   r’   r’   r’   r“   r§   J  s   ü
ÿ
,r§   )rø   )ˆr‡   Zscapy.configr   Z0scapy.contrib.automotive.xcp.cto_commands_masterr   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   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Z/scapy.contrib.automotive.xcp.cto_commands_slaver>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   Z"scapy.contrib.automotive.xcp.utilsr_   r`   ra   rb   Zscapy.fieldsrc   rd   re   rf   rg   rh   ri   rj   rk   rl   Zscapy.layers.canrm   Zscapy.layers.inetrn   ro   Zscapy.packetrp   rq   rr   rs   r†   Ú
setdefaultrw   r�   r¢   r­   r¦   rí   rë   rê   r§   Zpositive_response_classesÚclsr’   r’   r’   r“   Ú<module>	   sþ   ôŒ0Pÿÿÿeé

