
    i                         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 ej                  dk\  rd dl	m
Z
 nd dl	mZ
  G d	 d
      Z G d dej                        Zy)    N   )eventio)
InputEvent)
EvdevError)      )Self)Anyc                   >    e Zd Zd ZdefdZdefdZdefdZddZ	y)	ReadIteratorc                 2    t        d      | _        || _        y )N )itercurrent_batchdevice)selfr   s     ]/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/evdev/eventio_async.py__init__zReadIterator.__init__   s    !"X    returnc                     | S Nr   r   s    r   __iter__zReadIterator.__iter__       r   c                    	 t        | j                        S # t        $ rg t        j                  | j                  j
                  gg g       \  }}}| j                  j                         | _        t        | j                        cY S w xY wr   )nextr   StopIterationselectr   fdread)r   rwxs       r   __next__zReadIterator.__next__   sp    	,**++ 	,mmT[[^^$4b"=GAq!!%!1!1!3D**++	,s    A-BBc                     | S r   r   r   s    r   	__aiter__zReadIterator.__aiter__#   r   r   c                      t        j                         	 j                  t         j                               S # t
        $ r3  fd} j                  j                         j                  |       Y S w xY w)Nc                     	 | j                         _        j                  t        j                               y # t        $ r}j                  |       Y d }~y d }~ww xY wr   )resultr   
set_resultr   	Exceptionset_exception)batchefuturer   s     r   next_batch_readyz0ReadIterator.__anext__.<locals>.next_batch_ready-   sP    ,).D&%%d4+=+=&>?  ,((++,s   9= 	A!AA!)	asyncioFuturer+   r   r   r   r   
async_readadd_done_callback)r   r1   r0   s   ` @r   	__anext__zReadIterator.__anext__&   sp    !	Id4#5#567   		I, KK""$667GH		Is   $> 8A:9A:N)r   zasyncio.Future[InputEvent])
__name__
__module____qualname__r   r	   r   r   r%   r'   r6   r   r   r   r   r      s0    
$ ,* ,4 r   r   c                   6    e Zd Zd Zd Zd Zd ZdefdZd Z	y)	EventIOc                      t        j                          fd}j                   j                         |       y )Nc                  R    j                  j                                          y r   )remove_readerfileno)callbackloopr   s   r   readyz(EventIO._do_when_readable.<locals>.ready<   s    t{{}-Jr   )r2   get_event_loop
add_readerr?   )r   r@   rB   rA   s   `` @r   _do_when_readablezEventIO._do_when_readable9   s,    %%'	 	u-r   c                     	 |j                   |              y # t        $ r}|j                  |       Y d }~y d }~ww xY wr   )r+   r,   r-   )r   r0   cberrors       r   _set_resultzEventIO._set_resultB   s8    	(bd# 	(  ''	(s    	=8=c                 \     t        j                          j                   fd       S )z
        Asyncio coroutine to read and return a single input event as
        an instance of :class:`InputEvent <evdev.events.InputEvent>`.
        c                  <    j                   j                        S r   )rI   read_oner0   r   s   r   <lambda>z(EventIO.async_read_one.<locals>.<lambda>N   s    t'7'7'N r   r2   r3   rE   r   r0   s   `@r   async_read_onezEventIO.async_read_oneH   s%    
 !NOr   c                 \     t        j                          j                   fd       S )z
        Asyncio coroutine to read multiple input events from device. Return
        a generator object that yields :class:`InputEvent <evdev.events.InputEvent>`
        instances.
        c                  <    j                   j                        S r   )rI   r!   rM   s   r   rN   z$EventIO.async_read.<locals>.<lambda>X   s    t'7'7		'J r   rO   rP   s   `@r   r4   zEventIO.async_readQ   s%     !JKr   r   c                     t        |       S )z
        Return an iterator that yields input events. This iterator is
        compatible with the ``async for`` syntax.

        )r   r   s    r   async_read_loopzEventIO.async_read_loop[   s     D!!r   c                     	 t        j                         }|j                  | j                                y # t        $ r Y y w xY wr   )r2   rC   r>   r?   RuntimeError)r   rA   s     r   closezEventIO.closec   s=    	))+Dt{{}- 	 	s   36 	AAN)
r7   r8   r9   rE   rI   rQ   r4   r   rU   rX   r   r   r   r;   r;   8   s'    .(" "r   r;   )r2   r   sys r   eventsr   r   version_infotypingr	   r
   r   r;   r   r   r   <module>r^      sH      
    w"$ $N2goo 2r   