a
    kÄ#d·?  ã                   @   sŒ  d dl mZ d dlmZ d dlmZmZmZ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 d dlmZ G dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G d d!„ d!eƒZ&G d"d#„ d#eƒZ'G d$d%„ d%eƒZ(G d&d'„ d'eƒZ)G d(d)„ d)eƒZ*G d*d+„ d+eƒZ+G d,d-„ d-eƒZ,G d.d/„ d/eƒZ-G d0d1„ d1eƒZ.G d2d3„ d3eƒZ/G d4d5„ d5eƒZ0G d6d7„ d7eƒZ1G d8d9„ d9eƒZ2G d:d;„ d;eƒZ3G d<d=„ d=eƒZ4G d>d?„ d?eƒZ5G d@dA„ dAeƒZ6G dBdC„ dCeƒZ7G dDdE„ dEeƒZ8G dFdG„ dGeƒZ9dHS )Ié    )Úconf)Úlog_automotive)Úget_max_ctoÚget_agÚXCPEndiannessFieldÚStrVarLenField)ÚByteEnumFieldÚ	ByteFieldÚ
ShortFieldÚStrLenFieldÚ
FlagsFieldÚIntFieldÚThreeBytesFieldÚConditionalFieldÚ
XByteFieldÚStrFieldÚLEShortFieldÚ	XIntFieldÚFieldLenField)ÚPacketc                   @   sP   e Zd ZdZdddddddd	d
ddddddddddœZeddeƒeddƒgZdS )ÚNegativeResponsezError PacketZERR_CMD_SYNCHZERR_CMD_BUSYZERR_DAQ_ACTIVEZERR_PGM_ACTIVEZERR_CMD_UNKNOWNZERR_CMD_SYNTAXZERR_OUT_OF_RANGEZERR_WRITE_PROTECTEDZERR_ACCESS_DENIEDZERR_ACCESS_LOCKEDZERR_PAGE_NOT_VALIDZERR_MODE_NOT_VALIDZERR_SEGMENT_NOT_VALIDZERR_SEQUENCEZERR_DAQ_CONFIGZERR_MEMORY_OVERFLOWZERR_GENERICZ
ERR_VERIFY)r   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é0   é1   é2   Z
error_coder   Ú
error_infoÚ N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zerror_code_enumr   r   Úfields_desc© r/   r/   úf/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/xcp/cto_commands_slave.pyr      s.   î
þr   c                   @   s   e Zd ZdZeddƒgZdS )ÚGenericResponsezCommand Response packet Úcommand_response_datar)   N)r*   r+   r,   r-   r   r.   r/   r/   r/   r0   r1   2   s   ÿr1   c                	   @   s|   e Zd Zedddg d¢ƒedddg d¢ƒeddƒeeddƒd	d
„ ƒeeddƒdd
„ ƒeddƒeddƒgZdd„ Z	dd„ Z
dS )ÚConnectPositiveResponseÚresourcer   é   ©Zcal_pagÚx1ÚdaqÚstimZpgmÚx5Úx6Úx7Úcomm_mode_basic)Ú
byte_orderÚaddress_granularity_0Úaddress_granularity_1Úx3Úx4r:   Úslave_block_modeÚoptionalÚmax_ctoÚmax_dtoc                 C   s   | j jS ©N©r=   r>   ©Úpr/   r/   r0   Ú<lambda>C   ó    z ConnectPositiveResponse.<lambda>Ú
max_dto_lec                 C   s
   | j j S rG   rH   rI   r/   r/   r0   rK   E   rL   Z%xcp_protocol_layer_version_number_msbé   Z&xcp_transport_layer_version_number_msbc                 C   s®   t jd d rVt| jjƒ}|t jd d krV|t jd d< |rBdnd}t d |¡¡ t jd d rv|  ¡ t jd d< t jd d	 rª| j	t jd d
< | j
pž| jt jd d< d S )NÚXCPZallow_byte_order_changer>   z
Big EndianzLittle EndianzEByte order changed to {0} because of received positive connect packetZallow_ag_changeZAddress_Granularity_ByteZallow_cto_and_dto_changeZMAX_CTOZMAX_DTO)r   ÚcontribsÚintr=   r>   r   ÚwarningÚformatÚget_address_granularityrE   rF   rM   )ÚselfÚpktÚ	new_valueÚdescr/   r/   r0   Úpost_dissectionJ   s     ÿÿÿz'ConnectPositiveResponse.post_dissectionc                 C   sD   | j }|js|jsdS |jr&|js&dS |js6|jr6dS t d¡ d S )NrN   é   é   z?Getting address granularity from packet failed:both flags are 1)r=   r?   r@   r   rR   )rU   r=   r/   r/   r0   rT   \   s     ÿÿÿÿz/ConnectPositiveResponse.get_address_granularityN)r*   r+   r,   r   r	   r   r
   r   r.   rY   rT   r/   r/   r/   r0   r3   9   s$   ÿÿ
ÿ
ÿór3   c                   @   sD   e Zd Zedddg d¢ƒedddg d¢ƒeddƒeeddƒƒgZd	S )
ÚStatusPositiveResponseZcurrent_session_statusr   r5   )Zstore_cal_reqr7   Zstore_daq_reqZclear_daq_requestrB   r:   Zdaq_runningÚresumeÚ"current_resource_protection_statusr6   ÚreservedZsession_configuration_idN©r*   r+   r,   r   r	   r   r
   r.   r/   r/   r/   r0   r\   m   s   ÿÿùr\   c                	   @   sP   e Zd Zeddƒedddg d¢ƒeddƒeddƒeddƒed	dƒed
dƒgZdS )ÚCommonModeInfoPositiveResponseZ	reserved1r   Zcomm_mode_optionalr5   )Úmaster_block_modeÚinterleaved_modeÚx2rA   rB   r:   r;   r<   Z	reserved2Zmax_bsZmin_stZ
queue_sizeZxcp_driver_version_numberN©r*   r+   r,   r	   r   r.   r/   r/   r/   r0   ra   y   s   ÿ÷ra   c                	   @   sL   e Zd Zeddƒeeddƒƒeeddddd�ƒedd	d
d„ dd„ d�gZdS )ÚIdPositiveResponseÚmoder   r_   ÚlengthNÚelementÚI©Z	length_ofÚfmtrL   c                 C   s   | j S rG   )rh   rI   r/   r/   r0   rK   �   rL   zIdPositiveResponse.<lambda>c                 C   s   t ƒ S rG   ©r   ©rV   r/   r/   r0   rK   Ž   rL   ©Úlength_fromÚ
max_length)	r*   r+   r,   r	   r   r
   r   r   r.   r/   r/   r/   r0   rf   ‡   s   
ÿÿûrf   c                   @   s4   e Zd Zeddddd�edddd„ d	d„ d
�gZdS )ÚSeedPositiveResponseÚseed_lengthNÚseedÚBrk   rL   c                 C   s   | j S rG   )rs   rI   r/   r/   r0   rK   •   rL   zSeedPositiveResponse.<lambda>c                   C   s
   t ƒ d S ©NrZ   ©r   r/   r/   r/   r0   rK   –   rL   ro   )r*   r+   r,   r   r   r.   r/   r/   r/   r0   rr   ’   s
   ÿþrr   c                   @   s    e Zd Zedddg d¢ƒgZdS )ÚUnlockPositiveResponser^   r   r5   r6   N)r*   r+   r,   r   r.   r/   r/   r/   r0   rx   š   s   ÿÿrx   c                   @   s:   e Zd Zeedddd„ d�dd„ ƒedddd„ d�gZd	S )
ÚUploadPositiveResponseÚ	alignmentrL   c                 C   s
   t ƒ d S ©NrN   rm   rn   r/   r/   r0   rK   ¥   rL   zUploadPositiveResponse.<lambda>©rp   c                 C   s
   t ƒ dkS r{   rm   ©Ú_r/   r/   r0   rK   ¦   rL   ri   c                 C   s   t ƒ tƒ  S rG   ©r   r   rn   r/   r/   r0   rK   ¨   rL   N©r*   r+   r,   r   r   r.   r/   r/   r/   r0   ry   ¡   s   ÿýÿûry   c                   @   s:   e Zd Zeedddd„ d�dd„ ƒedddd„ d�gZd	S )
ÚShortUploadPositiveResponserz   rL   c                 C   s
   t ƒ d S r{   rm   rn   r/   r/   r0   rK   °   rL   z$ShortUploadPositiveResponse.<lambda>r|   c                 C   s
   t ƒ dkS r{   rm   r}   r/   r/   r0   rK   ±   rL   ri   c                 C   s   t ƒ tƒ  S rG   r   rn   r/   r/   r0   rK   ³   rL   Nr€   r/   r/   r/   r0   r�   ¬   s   ÿýÿûr�   c                   @   sL   e Zd Zddddddddd	d
dœ
ZeddeƒeeddƒƒeeddƒƒgZdS )ÚChecksumPositiveResponseZ
XCP_ADD_11Z
XCP_ADD_12Z
XCP_ADD_14Z
XCP_ADD_22Z
XCP_ADD_24Z
XCP_ADD_44Z
XCP_CRC_16ZXCP_CRC_16_CITTZ
XCP_CRC_32ZXCP_USER_DEFINED)
rN   rZ   é   r[   é   é   é   r5   é	   éÿ   Zchecksum_typer   r_   ZchecksumN)	r*   r+   r,   Zchecksum_type_dictr   r   r
   r   r.   r/   r/   r/   r0   r‚   ·   s   ö
ør‚   c                   @   s4   e Zd ZeddƒeddƒeddƒeeddƒƒgZd	S )
Ú#TransportLayerCmdGetSlaveIdResponseZ
position_1éX   Z
position_2éC   Z
position_3éP   Úcan_identifierr   N)r*   r+   r,   r   r   r   r.   r/   r/   r/   r0   r‰   Ð   s
   ür‰   c                   @   s<   e Zd ZdddœZeddeƒeeddƒƒeeddƒƒgZd	S )
Ú!TransportLayerCmdGetDAQIdResponseZconfigurableÚfixed©r   rN   Zcan_id_fixedéþ   r_   r   r�   N)	r*   r+   r,   Zcan_id_fixed_enumr   r   r
   r   r.   r/   r/   r/   r0   rŽ   Ù   s   þ
ýrŽ   c                   @   s(   e Zd ZeddƒeddƒeddƒgZdS )ÚCalPagePositiveResponseZ
reserved_1r   Z
reserved_2Zlogical_data_page_numberN©r*   r+   r,   r	   r.   r/   r/   r/   r0   r’   å   s   ýr’   c                   @   s(   e Zd Zeddƒedddg d¢ƒgZdS )Ú PagProcessorInfoPositiveResponseZmax_segmentr   Zpag_propertiesr5   )Zfreeze_supportedr7   rd   rA   rB   r:   r;   r<   Nre   r/   r/   r/   r0   r”   í   s
   ÿþr”   c                   @   s(   e Zd ZeeddƒƒeeddƒƒgZdS )Ú SegmentInfoMode0PositiveResponser_   r   Z
basic_infoN©r*   r+   r,   r   r   r   r.   r/   r/   r/   r0   r•   ö   s   ür•   c                   @   s8   e Zd ZeddƒeddƒeddƒeddƒeddƒgZdS )Ú SegmentInfoMode1PositiveResponseZ	max_pagesr   Zaddress_extensionZmax_extensionZcompression_methodZencryption_methodNr“   r/   r/   r/   r0   r—   ÿ   s   ûr—   c                   @   s(   e Zd ZeeddƒƒeeddƒƒgZdS )Ú SegmentInfoMode2PositiveResponser_   r   Zmapping_infoNr–   r/   r/   r/   r0   r˜   	  s   ür˜   c                   @   s(   e Zd Zedddg d¢ƒeddƒgZdS )ÚPageInfoPositiveResponseZpage_propertiesr   r5   )Zecu_access_without_xcpZecu_access_with_xcpZxcp_read_access_without_ecuZxcp_read_access_with_ecuZxcp_write_access_without_ecuZxcp_write_access_with_ecur;   r<   Zinit_segmentN©r*   r+   r,   r   r	   r.   r/   r/   r/   r0   r™     s
   ÿúr™   c                   @   s(   e Zd Zeddƒedddg d¢ƒgZdS )ÚSegmentModePositiveResponser_   r   rg   r5   )Úfreezer7   rd   rA   rB   r:   r;   r<   Nre   r/   r/   r/   r0   r›     s
   ÿþr›   c                   @   sH   e Zd Zedddg d¢ƒeeddƒƒeeddƒƒeddƒeddƒgZd	S )
ÚDAQListModePositiveResponseZcurrent_moder   r5   )ÚselectedÚ	directionrd   rA   Ú	timestampZpid_offÚrunningr]   r_   Zcurrent_event_channel_numberZcurrent_prescalerZcurrent_daq_list_priorityN)r*   r+   r,   r   r   r
   r	   r.   r/   r/   r/   r0   r�   %  s   ÿùr�   c                   @   s   e Zd ZeddƒgZdS )Ú StartStopDAQListPositiveResponseZ	first_pidr   Nr“   r/   r/   r/   r0   r¢   1  s   ÿr¢   c                   @   s(   e Zd ZeeddƒƒeeddƒƒgZdS )ÚDAQClockListPositiveResponser_   r   Zreceive_timestampNr–   r/   r/   r/   r0   r£   7  s   ür£   c                   @   s4   e Zd ZeddƒeddƒeddƒeeddƒƒgZdS )ÚReadDAQPositiveResponseZ
bit_offsetr   Zsize_daq_elementZaddress_extension_daq_elementZdaq_element_addressN©r*   r+   r,   r	   r   r   r.   r/   r/   r/   r0   r¤   @  s
   ür¤   c                
   @   s`   e Zd Zedddg d¢ƒeeddƒƒeeddƒƒeddƒedddg d	¢ƒgZd
d„ Zdd„ Z	dS )Ú DAQProcessorInfoPositiveResponseZdaq_propertiesr   r5   )Zdaq_config_typeZprescaler_supportedZresume_supportedZbit_stim_supportedZtimestamp_supportedZpid_off_supportedZoverload_msbZoverload_eventZmax_daqZmax_event_channelZmin_daqÚdaq_key_byte)Zoptimisation_type_0Zoptimisation_type_1Zoptimisation_type_2Zoptimisation_type_3Zaddress_extension_odtZaddress_extension_daqÚidentification_field_type_0Úidentification_field_type_1c                 C   s0   t | jjƒtjd d< t | jjƒtjd d< d S )NrO   r¨   r©   )Úboolr§   r¨   r   rP   r©   ©rU   r/   r/   r0   Ú)write_identification_field_type_to_config[  s    ÿÿÿÿÿÿzJDAQProcessorInfoPositiveResponse.write_identification_field_type_to_configc                 C   s   |   ¡  d S rG   )r¬   ©rU   rV   r/   r/   r0   rY   c  s    z0DAQProcessorInfoPositiveResponse.post_dissectionN)
r*   r+   r,   r   r   r
   r	   r.   r¬   rY   r/   r/   r/   r0   r¦   I  s   ÿÿ÷r¦   c                
   @   sd   e Zd Zeddƒeddƒeddƒeddƒedddg d¢ƒeed	dƒƒgZd
d„ Zdd„ Z	dd„ Z
dS )Ú!DAQResolutionInfoPositiveResponseZgranularity_odt_entry_size_daqr   Zmax_odt_entry_size_daqZgranularity_odt_entry_size_stimZmax_odt_entry_size_stimÚtimestamp_moder5   )Úsize_0Úsize_1Úsize_2Ztimestamp_fixedZunit_0Zunit_1Zunit_2Zunit_3Ztimestamp_ticksc                 C   s\   t | jjƒ}t | jjƒ}t | jjƒ}|s8|dks8|r8dS |sH|rH|sHdS |rX|sX|sXdS dS )Nr   rN   rZ   r[   )rª   r¯   r°   r±   r²   )rU   r°   r±   r²   r/   r/   r0   Úget_timestamp_sizes  s    z4DAQResolutionInfoPositiveResponse.get_timestamp_sizec                 C   s   |   ¡ tjd d< d S )NrO   Ztimestamp_size)r³   r   rP   r«   r/   r/   r0   Úwrite_timestamp_size_to_config€  s    z@DAQResolutionInfoPositiveResponse.write_timestamp_size_to_configc                 C   s   |   ¡  d S rG   )r´   r­   r/   r/   r0   rY   ƒ  s    z1DAQResolutionInfoPositiveResponse.post_dissectionN)r*   r+   r,   r	   r   r   r
   r.   r³   r´   rY   r/   r/   r/   r0   r®   g  s   ÿør®   c                   @   s<   e Zd Zedddg d¢ƒeddƒeddƒeeddƒƒgZdS )	ÚDAQListInfoPositiveResponseZdaq_list_propertiesr   r5   )Z
predefinedZevent_fixedr8   r9   rB   r:   r;   r<   Zmax_odtZmax_odt_entriesZfixed_eventNr`   r/   r/   r/   r0   rµ   ‡  s   ÿúrµ   c                   @   sH   e Zd Zedddg d¢ƒeddƒeddƒeddƒeddƒed	dƒgZd
S )ÚDAQEventInfoPositiveResponseZdaq_event_propertiesr   r5   )Zx0r7   r8   r9   rB   r:   r;   r<   Zmax_daq_listZevent_channel_name_lengthZevent_channel_time_cycleZevent_channel_time_unitZevent_channel_priorityNrš   r/   r/   r/   r0   r¶   ’  s   ÿùr¶   c                   @   sH   e Zd Zeddƒedddg d¢ƒeddƒeddƒeddƒed	dƒgZd
S )ÚProgramStartPositiveResponser_   r   Zcomm_mode_pgmr5   )rb   rc   rd   rA   rB   r:   rC   r<   Zmax_cto_pgmZ
max_bs_pgmZ
min_bs_pgmZqueue_size_pgmNre   r/   r/   r/   r0   r·   ž  s   ÿør·   c                   @   s(   e Zd Zedddg d¢ƒeddƒgZdS )ÚPgmProcessorPositiveResponseZpgm_propertiesr   r5   )Zabsolute_modeZfunctional_modeZcompression_supportedZcompression_requiredZencryption_supportedZencryption_requiredZnon_seq_pgm_supportedZnon_seq_pgm_requiredZ
max_sectorNrš   r/   r/   r/   r0   r¸   «  s
   ÿúr¸   c                   @   s4   e Zd ZeddƒeddƒeddƒeeddƒƒgZdS )ÚSectorInfoPositiveResponseZclear_sequence_numberr   Zprogram_sequence_numberZprogramming_methodZsector_infoNr¥   r/   r/   r/   r0   r¹   ¶  s
   ür¹   c                
   @   sF   e Zd ZdZdddddddd	d
dœ	Zeddeƒedddd„ d�gZdS )ÚEvPacketzEvent packetZEV_RESUME_MODEZEV_CLEAR_DAQZEV_STORE_DAQZEV_STORE_CALZEV_CMD_PENDINGZEV_DAQ_OVERLOADZEV_SESSION_TERMINATEDZEV_USERZEV_TRANSPORT)	r   rN   rZ   rƒ   r„   r…   r†   r‘   rˆ   Z
event_coder   Zevent_information_datarL   c                 C   s
   t ƒ d S rv   rw   r}   r/   r/   r0   rK   Ï  rL   zEvPacket.<lambda>©rq   N)r*   r+   r,   r-   Zevent_code_enumr   r   r.   r/   r/   r/   r0   rº   ¿  s    ÷
ÿþrº   c                   @   s8   e Zd ZdZdddœZeddeƒeddd	d
„ d�gZdS )Ú
ServPacketzService Request packetZ
SERV_RESETZ	SERV_TEXTr�   Zservice_request_coder   r2   rL   c                 C   s
   t ƒ d S rv   rw   r}   r/   r/   r0   rK   Ý  rL   zServPacket.<lambda>r»   N)r*   r+   r,   r-   Zservice_request_code_enumr   r   r.   r/   r/   r/   r0   r¼   Ó  s   þ
ÿþr¼   N):Zscapy.configr   Zscapy.contrib.automotiver   Z"scapy.contrib.automotive.xcp.utilsr   r   r   r   Zscapy.fieldsr   r	   r
   r   r   r   r   r   r   r   r   r   r   Zscapy.packetr   r   r1   r3   r\   ra   rf   rr   rx   ry   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   Ú<module>   sJ   <4			
			 	