
    ^jX                        d Z ddlZ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
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlZddlmZ ddlmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddlm&Z&m'Z' ddl(T ddl)m*Z*m+Z+m,Z,  G d dej-                  Z. G d dej-                  Z/ edde          Z0 edde.          Z1 edd          Z2 edd          Z3 edd          Z4d Z5d Z6d Z7d  Z8 G d! d"ee           Z9d$d#Z:dS )%z4Work in progress HIDRAW device abstraction for Linux    N)c_int)c_uint)c_uint8)c_uint16)c_int16)c_uint32)c_int32)c_int64)create_string_buffer)ThreadPoolExecutor)XlibSelectDevice)_IOR_IOR_str	_IOWR_len)DeviceRelativeAxisAbsoluteAxisButtonJoystick
Controller)DeviceOpenExceptionControllerManager)*)get_mappingRelationcreate_guidc                   *    e Zd ZdefdefdeffZd ZdS )HIDRawDevInfobustypevendorproductc                 l    d| j          dt          | j                   dt          | j                   dS )NzInfo(bustype=z	, vendor=z
, product=))r   hexr    r!   selfs    U/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/experimental/hidraw.py__repr__zHIDRawDevInfo.__repr__&   s<    ft|ffc$+6F6FffRUVZVbRcRcffff    N)__name__
__module____qualname___u32_s16_fields_r(    r)   r'   r   r   !   sG        D!4 D!#Hg g g g gr)   r   c                   *    e Zd Zdefdedz  ffZd ZdS )HIDRawReportDescriptorsizevaluesi   c                 D    t          | j                  d | j                 S N)bytesr4   r3   r%   s    r'   	__bytes__z HIDRawReportDescriptor.__bytes__.   s    T[!!*49*--r)   N)r*   r+   r,   r-   _u8r/   r8   r0   r)   r'   r2   r2   *   s=        3:&(H. . . . .r)   r2   H               c                 B     t          ddt                    | |          S )Nr:      )r   r2   )filenor3   s     r'   HIDIOCGRDESCrC   9   s!    24T12264@@@r)   c                 6     t          dd          | |          S )Nr:      r   rB   buffers     r'   HIDIOCSFEATURErI   =       9S$///r)   c                 6     t          dd          | |          S )Nr:      rF   rG   s     r'   HIDIOCGFEATURErM   A   rJ   r)   c                     t                      }d}| D ];}t          d          D ]$}|dz  r|                    ||z              |dz  }%|dz  }<|S )Nr   r?   r;   )setrangeadd)
bytestringbitsjbyteis        r'   get_set_bitsrW   J   sn    55D	A  q 	 	Aax  QQJDD	QKr)   c                   ^     e Zd ZdZ fdZddefdZd fd	Z fd	Zd
 Z	d Z
d Zd Z xZS )HIDRawDeviceNc                    || _         t          j        |t          j        t          j        z            }t          |          | _        t          dt          di	                    | j        j
                  | _        t          |                              d          | _        t          |                              d          | _        t#          |                              d          }t%          |          }t'          ||          | _        g | _        i | _        t          j        |           t1                                          ||           d S )Nusb	bluetoothzutf-8)	_filenameosopenO_RDWR
O_NONBLOCKHIDIOCGRAWINFOinfoBUS_USBBUS_BLUETOOTHgetr   bus_typeHIDIOCGRAWPHYSdecodephysHIDIOCGRAWUNIQuniqHIDIOCGRAWNAMEHIDIOCGRDESCSIZErC   report_descriptorcontrolscontrol_mapclosesuper__init__)r&   displayfilenamerB   name	desc_size	__class__s         r'   rt   zHIDRawDevice.__init__Y   s   !29r}#<=="6**	 %DHHIZ[["6**11'::	"6**11'::	f%%,,W55 %V,,	!-fi!@!@
$'''''r)   r      returnc                 j    t          |dz             }||d<   t          | j        |           |j        S )Nr;   r   )rH   )r   rM   _filenoraw)r&   numberlengthrH   s       r'   get_feature_reportzHIDRawDevice.get_feature_reportn   s9    %fqj11q	t|F3333zr)   Fc                 P   t                                          ||           	 t          j        | j        t          j        t          j        z            | _        n!# t          $ r}t          |          d }~ww xY wt          j
        j        j                            |            d S r6   )rs   r_   r^   r]   r`   ra   r}   OSErrorr   pygletappplatform_event_loopselect_devicesrQ   )r&   window	exclusiveery   s       r'   r_   zHIDRawDevice.open}   s    VY'''	)74>29r}3LMMDLL 	) 	) 	)%a(((	) 	
&599$?????s   6A 
A:&A55A:c                     t                                                       | j        sd S t          j        j        j                            |            t          j        | j                   d | _        d S r6   )	rs   rr   r}   r   r   r   r   remover^   )r&   ry   s    r'   rr   zHIDRawDevice.close   s\    | 	F
&5<<TBBB
r)   c                     | j         S r6   )rp   r%   s    r'   get_controlszHIDRawDevice.get_controls   s
    }r)   c                     | j         S r6   )r}   r%   s    r'   rB   zHIDRawDevice.fileno   s
    |r)   c                     dS NFr0   r%   s    r'   pollzHIDRawDevice.poll   s    ur)   c                 d    | j         sd S 	 d S # t          $ r |                                  Y d S w xY wr6   )r}   r   rr   r%   s    r'   selectzHIDRawDevice.select   sJ    | 	F	D 	 	 	JJLLLFF	s   //)r   rz   r   )r*   r+   r,   r}   rt   r7   r   r_   rr   r   rB   r   r   __classcell__)ry   s   @r'   rY   rY   V   s        G( ( ( ( (* U    @ @ @ @ @ @          	 	 	 	 	 	 	r)   rY   c                 .   i }d}t          j        |          D ]\}|                    d          rEt           j                            ||          }	 t          | |          ||<   L# t          $ r Y Xw xY w]t          |                                          S )Nz/devhidraw)	r^   listdir
startswithpathjoinrY   r   listr4   )ru   _devicesbaserv   r   s        r'   get_devicesr      s    HDJt$$  x(( 	7<<h//D!-gt!<!<   		 !!"""s   A%%
A21A2r6   );__doc__r^   fcntlctypeswarningsr   _intr   _uintr   r9   r   _u16r   r.   r   r-   r	   _s32r
   _s64r   concurrent.futuresr   r   pyglet.app.xlibr   pyglet.libs.ioctlr   r   r   pyglet.input.baser   r   r   r   r   r   r   r   "pyglet.input.linux.evdev_constantspyglet.input.controllerr   r   r   	Structurer   r2   rn   rb   rm   rh   rk   rC   rI   rM   rW   rY   r   r0   r)   r'   <module>r      s   : : 				                " " " " " " ! ! ! ! ! ! # # # # # # " " " " " " # # # # # # " " " " " " " " " " " " ' ' ' ' ' ' 1 1 1 1 1 1  , , , , , , 7 7 7 7 7 7 7 7 7 7 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ D D D D D D D D 0 0 0 0 F F F F F F F F F Fg g g g gF$ g g g. . . . .V- . . . 4T5)) c4//#t$$#t$$#t$$A A A0 0 00 0 0	 	 	T T T T T#V T T Tn# # # # # #r)   