
    h`                        d Z ddlZddlm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 ddlmZ ddlmZmZ  G d d	e          Z G d
 de          Z G d de          Z G d de          Z eeed            eeed            eeed            eee            G d de          Z eee           ej                            ee           dS )a+  
nRF sniffer

Firmware and documentation related to this module is available at:
https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Sniffer
https://github.com/adafruit/Adafruit_BLESniffer_Python
https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-nordic_ble.c
    N)conf)DLT_NORDIC_BLE)BitEnumFieldBitFieldByteEnumField	ByteField
LEIntFieldLEShortFieldLenFieldScalingField)BTLE)Packetbind_layersc                       e Zd ZdZ edddd            edd           ed	d           e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)d*d+d,d-d.d/d0d1d2d3          gZd4 Z	d5 Z
dS )6NRFS2_Packetz
    nRF Sniffer v2 Packet
    lenNz<Hc                     | dz   S )N    )xs    ]/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/nrf_sniffer.py<lambda>zNRFS2_Packet.<lambda>-   s
    Q     )fmtadjustversion   countertyper   
req_follow   event_followevent_device   req_single_packet   resp_single_packet   event_connectr   event_packet   req_scan_cont	   event_disconnect
   event_error   event_empty_data_packet   set_temporary_key   ping_req   	ping_resp   test_command_id   test_result_id   uart_test_startuart_dummy_packetswitch_baud_rate_reqswitch_baud_rate_respuart_out_startuart_out_stopset_adv_channel_hop_seqgo_idle)                     c                     t          |t                    sdS | j        dk    r|j        dk    p+| j        dk    o
|j        dk    p| j        dk    o
|j        dk    S )NFr!   r   r7   r5   rH   rG   )
isinstancer   r   )selfothers     r   answerzNRFS2_Packet.answerP   sl    %.. 	5 Y$55:#5 7Y$55:#57Y$55:#5	
r   c                     | j         8|d d         t          j        dt          |                    z   |dd          z   }||z   S )Nr!   z!Br   )hdr_lenstructpackr   )rO   ppays      r   
post_buildzNRFS2_Packet.post_buildZ   sD    <"1"D#a&&111AabbE9A3wr   )__name__
__module____qualname____doc__r   r   r
   r   fields_descrQ   rX   r   r   r   r   r   '   s        
 	$???	)QY%%ln n )	
 * o n o ( m / ) j k '  &!" '#$ *,-&%/1  	
 	
	"KH
 
 
    r   r   c                       e Zd ZdZdS )NRF2_Ping_RequestzPing requestN)rY   rZ   r[   namer   r   r   r_   r_   `   s        DDDr   r_   c                   ,    e Zd ZdZ edd          gZdS )NRF2_Ping_ResponsezPing responser   N)rY   rZ   r[   r`   r
   r]   r   r   r   rb   rb   d   s)        DY%%KKKr   rb   c                   $   e Zd ZdZ edd           eddd           eddd	d
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dd           edd           e	dd          gZ
dS )NRF2_Packet_EventzPacket event (device variant)
header_lenr/   reservedr   r!   phyNr$   zle-1mzle-2mzle-coded)r   r!   r   mic	encrypted	directioncrc_ok
rf_channelrssii dBmb)unitr   event_counter
delta_time)rY   rZ   r[   r`   r   r   r   r   r
   r	   r]   r   r   r   rd   rd   k   s        *D	,##Q""UD!W%L%LMMa  dA&&dA&&1a  	,""VT3777_a((
<##KKKr   rd   r5   )r   r7   r   c                   0    e Zd ZdZdZ edd          gZdS )
NRFS2_PCAPa  
    PCAP headers for DLT_NORDIC_BLE.

    Nordic's capture scripts either stick the COM port number (yep!) or a
    random number at the start of every packet.

    https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-nordic_ble.c

    The only "rule" is that we can't start packets with ``BE EF``, otherwise
    it becomes a "0.9.7" packet. So we just set "0" here.
    znRF Sniffer PCAP headerboard_idr   N)rY   rZ   r[   r\   r`   r   r]   r   r   r   rt   rt      s5        
 
 %D	*a  KKKr   rt   )r\   rT   scapy.configr   
scapy.datar   scapy.fieldsr   r   r   r   r	   r
   r   r   scapy.layers.bluetooth4LEr   scapy.packetr   r   r   r_   rb   rd   rt   l2typesregisterr   r   r   <module>r}      s0           % % % % % %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 + * * * * * , , , , , , , ,6 6 6 6 66 6 6 6r                     $ L+# 6 6 6 6 L,3 7 7 7 7 L+# 6 6 6 6 t $ $ $
       & J % % %   nj 1 1 1 1 1r   