§
    °ÊcŠ$  ã                   óÔ   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlZ	 d dlmZ n# e$ r	 d dlmZ Y nw xY w G d„ de¦  «        Z G d	„ d
e¦  «        ZdS )é    N)Údefaultdict)Ú_uinput)ÚecodesÚutilÚdevice)Ú
InputEvent)ÚEventIOc                   ó   — e Zd ZdS )ÚUInputErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú./usr/lib/python3/dist-packages/evdev/uinput.pyr   r      s   € € € € € Ø€Dr   r   c                   ó°   — e Zd ZdZdZeej        ej        fdœd„¦   «         Z		 	 	 	 dd
„Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚUInputzf
    A userland input device and that can inject input events into the
    linux input subsystem.
    )	ÚnameÚvendorÚproductÚversionÚbustypeÚeventsÚdevnodeÚfdr   )Úfiltered_typesc                óœ  — g }|D ]R}t          |t          j        ¦  «        s!t          j        t          |¦  «        ¦  «        }|                     |¦  «         ŒSt          t          ¦  «        }|D ]I}|                     ¦   «                              ¦   «         D ] \  }}||          	                    |¦  «         Œ!ŒJ|D ]	}	|	|v r||	= Œ
 | dd|i|¤ŽS )aÏ  
        Create an UInput device with the capabilities of one or more input
        devices.

        Arguments
        ---------
        devices : InputDevice|str
          Varargs of InputDevice instances or paths to input devices.

        filtered_types : Tuple[event type codes]
          Event types to exclude from the capabilities of the uinput device.

        **kwargs
          Keyword arguments to UInput constructor (i.e. name, vendor etc.).
        r   r   )
Ú
isinstancer   ÚInputDeviceÚstrÚappendr   ÚsetÚcapabilitiesÚitemsÚupdate)
Úclsr   ÚdevicesÚkwargsÚdevice_instancesÚdevÚall_capabilitiesÚev_typeÚev_codesÚevtypes
             r   Úfrom_devicezUInput.from_device$   s	  € ð$ ÐØð 	)ð 	)ˆCÝ˜c¥6Ô#5Ñ6Ô6ð 3ÝÔ(­¨S©¬Ñ2Ô2�Ø×#Ò# CÑ(Ô(Ð(Ð(å&¥sÑ+Ô+Ðð $ð 	;ð 	;ˆCØ%(×%5Ò%5Ñ%7Ô%7×%=Ò%=Ñ%?Ô%?ð ;ð ;Ñ!�˜Ø  Ô)×0Ò0°Ñ:Ô:Ð:Ð:ð;ð %ð 	-ð 	-ˆFØÐ)Ð)Ð)Ø$ VÐ,øàˆsÐ5Ð5Ð*Ð5¨fÐ5Ð5Ð5r   Núpy-evdev-uinputé   é   ú/dev/uinputc
           	      ó^  — || _         || _        || _        || _        || _        || _        || _        |s*t          j        t          j	         	                    ¦   «         i}|  
                    ¦   «          t          j        |¦  «        | _        |                      |¦  «        \  }
}t          j        | j        |¦  «         |	pg }	|	D ]}t          j        | j        |¦  «         Œ|D ] \  }}t          j        | j        ||¦  «         Œ!t          j        | j        ||||||
¦  «         t          j        | j        ¦  «         t)          j        t          j        ¦  «        | _        t(          j        | j        j        _        t(          j        | j        j        _        |                      ¦   «         | _        dS )aô  
        Arguments
        ---------
        events : dict
          Dictionary of event types mapping to lists of event codes. The
          event types and codes that the uinput device will be able to
          inject - defaults to all key codes.

        name
          The name of the input device.

        vendor
          Vendor identifier.

        product
          Product identifier.

        version
          Version identifier.

        bustype
          Bustype identifier.

        phys
          Physical path.

        input_props
          Input properties and quirks.

        Note
        ----
        If you do not specify any events, the uinput device will be able
        to inject only ``KEY_*`` and ``BTN_*`` event codes.
        N)r   r   r   r   r   Úphysr   r   ÚEV_KEYÚkeysÚ_verifyr   Úopenr   Ú_prepare_eventsÚset_physÚset_propÚenableÚsetupÚcreateÚctypesÚCDLLÚ__file__ÚdllÚc_intÚ_uinput_begin_uploadÚrestypeÚ_uinput_end_uploadÚ_find_devicer   )Úselfr   r   r   r   r   r   r   r5   Úinput_propsÚabsinfoÚprepared_eventsÚpropÚetypeÚcodes                  r   Ú__init__zUInput.__init__I   s…  € ðP ˆŒ	ØˆŒØˆŒØˆŒØˆŒØˆŒ	ØˆŒàð 	9Ý”m¥V¤[×%5Ò%5Ñ%7Ô%7Ð8ˆFà�Š‰Œˆõ ”,˜wÑ'Ô'ˆŒð $(×#7Ò#7¸Ñ#?Ô#?Ñ ˆ�õ 	Ô˜œ $Ñ'Ô'Ð'ð "Ð' RˆØð 	,ð 	,ˆDÝÔ˜TœW dÑ+Ô+Ð+Ð+à*ð 	1ð 	1‰KˆE�4ÝŒN˜4œ7 E¨4Ñ0Ô0Ð0Ð0åŒ�d”g˜t V¨W°g¸wÈÑPÔPÐPõ 	Œ�t”wÑÔÐå”;�wÔ/Ñ0Ô0ˆŒÝ06´ˆŒÔ%Ô-Ý.4¬lˆŒÔ#Ô+ð
 ×'Ò'Ñ)Ô)ˆŒˆˆr   c           
      ó¬  — g g }}|                      ¦   «         D ]¸\  }}|D ]°}t          |t          t          t          j        f¦  «        rp|d         g}|                     |d         ¦  «         |                     dgdt          |d         ¦  «        z
  z  ¦  «         |                     |¦  «         |d         }|                     ||f¦  «         Œ±Œ¹||fS )z>Prepare events for passing to _uinput.enable and _uinput.setupr   r1   é   )	r$   r   ÚtupleÚlistr   ÚAbsInfoÚextendÚlenr!   )rI   r   rK   rL   rN   ÚcodesrO   Úfs           r   r:   zUInput._prepare_events�   sã   € à#% r�ˆØ"ŸLšL™NœNð 	6ð 	6‰LˆE�5Øð 6ð 6�å˜d¥U­Dµ&´.Ð$AÑBÔBð #à˜aœ˜	�AØ—H’H˜T !œWÑ%Ô%Ð%ð —H’H˜a˜S A­¨D°¬G©¬Ñ$4Ñ5Ñ6Ô6Ð6Ø—N’N 1Ñ%Ô%Ð%Ø œ7�DØ×&Ò&¨¨t }Ñ5Ô5Ð5Ð5ð6ð ˜Ð'Ð'r   c                 ó   — | S ©Nr   ©rI   s    r   Ú	__enter__zUInput.__enter__¯   s   € Øˆr   c                 óR   — t          | d¦  «        r|                      ¦   «          d S d S )Nr   )ÚhasattrÚclose)rI   ÚtypeÚvalueÚtbs       r   Ú__exit__zUInput.__exit__²   s/   € Ý�4˜ÑÔð 	Ø�JŠJ‰LŒLˆLˆLˆLð	ð 	r   c                 ó†   ‡ — ˆ fd„dD ¦   «         }d                      ‰ j        j        d                     |¦  «        ¦  «        S )Nc              3   óR   •K  — | ]!}t          t          ‰|¦  «        ¦  «        V — Œ"d S r[   )ÚreprÚgetattr)Ú.0ÚirI   s     €r   ú	<genexpr>z"UInput.__repr__.<locals>.<genexpr>¸   sM   øè è € ð Jð J¨�T•'˜$ Ñ"Ô"Ñ#Ô#ð Jð Jð Jð Jð Jð Jr   )r   r   r   r   r   r5   z{}({})z, )ÚformatÚ	__class__r   Újoin)rI   Úvs   ` r   Ú__repr__zUInput.__repr__¶   sU   ø€ ðJð Jð Jð JØHðJñ Jô Jˆà�Š˜tœ~Ô6¸¿	º	À!¹¼ÑEÔEÐEr   c                 ó$  — d}d„ |                       d¦  «                             ¦   «         D ¦   «         }|                     | j        t          j        | j                 | j        | j        | j	        | j
        d                     |¦  «        ¦  «        }|S )Nzcname "{}", bus "{}", vendor "{:04x}", product "{:04x}", version "{:04x}", phys "{}"
event types: {}c                 ó   — g | ]
}|d          ‘ŒS )r   r   )ri   rj   s     r   ú
<listcomp>z"UInput.__str__.<locals>.<listcomp>À   s   € Ð@Ð@Ð@˜A�1�Q”4Ð@Ð@Ð@r   Tú )r#   r7   rl   r   r   ÚBUSr   r   r   r   r5   rn   )rI   ÚmsgÚevtypess      r   Ú__str__zUInput.__str__¼   s„   € ð!ˆð AÐ@ ×!2Ò!2°4Ñ!8Ô!8×!=Ò!=Ñ!?Ô!?Ð@Ñ@Ô@ˆØ�jŠj˜œ¥F¤J¨t¬|Ô$<Øœ d¤lØœ t¤y°#·(²(¸7Ñ2CÔ2CñEô Eˆð ˆ
r   c                 ó    — | j         �| j                              ¦   «          | j        dk    r"t          j        | j        ¦  «         d| _        d S d S )Néÿÿÿÿ)r   r`   r   r   r\   s    r   r`   zUInput.closeÇ   sO   € àŒ;Ð"ØŒK×ÒÑÔÐð Œ7�RŠ<ˆ<ÝŒM˜$œ'Ñ"Ô"Ð"ØˆDŒGˆGˆGð ˆ<r   c                 óf   — t          j        | j        t          j        t          j        d¦  «         dS )zÄ
        Inject a ``SYN_REPORT`` event into the input subsystem. Events
        queued by :func:`write()` will be fired. If possible, events
        will be merged into an 'atomic' event.
        r   N)r   Úwriter   r   ÚEV_SYNÚ
SYN_REPORTr\   s    r   Úsynz
UInput.synÑ   s'   € õ 	Œ�d”g�vœ}­fÔ.?ÀÑCÔCÐCÐCÐCr   FTc                 ód   — | j         €t          d¦  «        ‚| j                              ||¦  «        S )zASee :func:`capabilities <evdev.device.InputDevice.capabilities>`.Nz2input device not opened - cannot read capabilities)r   r   r#   )rI   ÚverboserK   s      r   r#   zUInput.capabilitiesÚ   s1   € àŒ;ÐÝÐRÑSÔSÐSàŒ{×'Ò'¨°Ñ9Ô9Ð9r   c                 óê   — t          j        ¦   «         }||_        | j                             | j        t          j        |¦  «        ¦  «        }|r$t          dt          j
        |¦  «        z   ¦  «        ‚|S )NzFailed to begin uinput upload: )ÚffÚUInputUploadÚ	effect_idrC   rE   r   r@   Úbyrefr   ÚosÚstrerror)rI   r…   ÚuploadÚrets       r   Úbegin_uploadzUInput.begin_uploadá   sf   € Ý”Ñ"Ô"ˆØ$ˆÔàŒh×+Ò+¨D¬GµV´\À&Ñ5IÔ5IÑJÔJˆØð 	TÝÐ?Å"Ä+ÈcÑBRÔBRÑRÑSÔSÐSàˆr   c                 ó¶   — | j                              | j        t          j        |¦  «        ¦  «        }|r$t          dt          j        |¦  «        z   ¦  «        ‚d S )NzFailed to end uinput upload: )rC   rG   r   r@   r†   r   r‡   rˆ   )rI   r‰   rŠ   s      r   Ú
end_uploadzUInput.end_uploadë   sX   € ØŒh×)Ò)¨$¬'µ6´<ÀÑ3GÔ3GÑHÔHˆØð 	RÝÐ=ÅÄÈCÑ@PÔ@PÑPÑQÔQÐQð	Rð 	Rr   c                 óê   — t          j        ¦   «         }||_        | j                             | j        t          j        |¦  «        ¦  «        }|r$t          dt          j
        |¦  «        z   ¦  «        ‚|S )NzFailed to begin uinput erase: )rƒ   ÚUInputEraser…   rC   Ú_uinput_begin_eraser   r@   r†   r   r‡   rˆ   )rI   r…   ÚeraserŠ   s       r   Úbegin_erasezUInput.begin_eraseð   se   € Ý”Ñ Ô ˆØ#ˆŒàŒh×*Ò*¨4¬7µF´LÀÑ4GÔ4GÑHÔHˆØð 	SÝÐ>ÅÄÈSÑAQÔAQÑQÑRÔRÐRØˆr   c                 ó¶   — | j                              | j        t          j        |¦  «        ¦  «        }|r$t          dt          j        |¦  «        z   ¦  «        ‚d S )NzFailed to end uinput erase: )rC   Ú_uinput_end_eraser   r@   r†   r   r‡   rˆ   )rI   r‘   rŠ   s      r   Ú	end_erasezUInput.end_eraseù   sX   € ØŒh×(Ò(¨¬µ&´,¸uÑ2EÔ2EÑFÔFˆØð 	QÝÐ<½r¼{È3Ñ?OÔ?OÑOÑPÔPÐPð	Qð 	Qr   c                 ó<  — 	 t          j        | j        ¦  «        t          j                 }t          j        |¦  «        s‚ n># t
          t          f$ r* d}t          |                     | j        ¦  «        ¦  «        ‚w xY wt          j	        | j        t           j
        ¦  «        s)d}t          |                     | j        ¦  «        ¦  «        ‚t          | j        ¦  «        t          j        k    r.d}t          |                     t          j        ¦  «        ¦  «        ‚dS )zr
        Verify that an uinput device exists and is readable and writable
        by the current process.
        z_"{}" does not exist or is not a character device file - verify that the uinput module is loadedz!"{}" cannot be opened for writingz8uinput device name must not be longer than {} charactersN)r‡   Ústatr   ÚST_MODEÚS_ISCHRÚ
IndexErrorÚOSErrorr   rl   ÚaccessÚW_OKrW   r   r   Ú
maxnamelen)rI   Úmrv   s      r   r8   zUInput._verifyþ   sõ   € ð	8Ý”˜œÑ%Ô%¥d¤lÔ3ˆAÝ”< ‘?”?ð Øðøå�GÐ$ð 	8ð 	8ð 	8ð>ˆCå˜cŸjšj¨¬Ñ6Ô6Ñ7Ô7Ð7ð	8øøøõ
 Œy˜œ¥r¤wÑ/Ô/ð 	8Ø5ˆCÝ˜cŸjšj¨¬Ñ6Ô6Ñ7Ô7Ð7åˆtŒy‰>Œ>�GÔ.Ò.Ð.ØLˆCÝ˜cŸjšj­Ô);Ñ<Ô<Ñ=Ô=Ð=ð /Ð.s   ‚>A Á;A<c                 ó¬   — t          j        d¦  «         t          j        d¦  «        D ]*}t	          j        |¦  «        }|j        | j        k    r|c S Œ+d S )Ngš™™™™™¹?z/dev/input/)ÚtimeÚsleepr   Úlist_devicesr   r   r   )rI   ÚpathÚds      r   rH   zUInput._find_device  s`   € åŒ
�3‰ŒˆåÔ% mÑ4Ô4ð 	ð 	ˆDÝÔ" 4Ñ(Ô(ˆAØŒv˜œÒ"Ð"Ø���ð #ð	ð 	r   )	Nr0   r1   r1   r1   r2   r3   r0   N)FT)r   r   r   Ú__doc__Ú	__slots__Úclassmethodr   r}   ÚEV_FFr/   rP   r:   r]   rd   rp   rx   r`   r   r#   r‹   r�   r’   r•   r8   rH   r   r   r   r   r      sa  € € € € € ðð ð
€Ið
 Ø39´=À&Ä,Ð2Oð "6ð "6ð "6ð "6ñ „[ð"6ðJ Ø'Ø?BØLPð	R*ð R*ð R*ð R*ðh(ð (ð (ð$ð ð ðð ð ðFð Fð Fð	ð 	ð 	ðð ð ðDð Dð Dð:ð :ð :ð :ðð ð ðRð Rð Rð
ð ð ðQð Qð Qð
>ð >ð >ð.ð ð ð ð r   r   )r‡   r—   r¡   Úcollectionsr   Úevdevr   r   r   r   Úevdev.eventsr   Úevdev.ffrƒ   r@   Úevdev.eventio_asyncr	   ÚImportErrorÚevdev.eventioÚ	Exceptionr   r   r   r   r   ú<module>r²      sF  ðð 
€	€	€	Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø €€€ð&Ø+Ð+Ð+Ð+Ð+Ð+Ð+øØð &ð &ð &Ø%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&øøøð
	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ðCð Cð Cð Cð CˆWñ Cô Cð Cð Cð Cs   ´; »A	ÁA	