U
    Pe                     @   s  d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZmZ dejkrTedZdZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+d Z,d!Z-d"Z.dZ/dZ0dZ1d"Z.d#Z2d$Z3d%Z4d&Z5d'Z6d(Z7d)Z8d*Z9d+Z:d$Z;d,Z<dZ=dZ>dZ?d"Z@d#ZAd-ZBG d.d/ d/eZCG d0d1 d1eZDG d2d3 d3eZEG d4d5 d5eZFG d6d7 d7eZGdejkrejHZHeeGegeH_IejJZJeeGeeeDegeJ_IejKZKeeGeegeK_IejLZLeeGgeL_IG d8d9 d9ZMdS ):a  
Python mtdev
============

The mtdev module provides Python bindings to the `Kernel multi-touch
transformation library <https://launchpad.net/mtdev>`_, also known as mtdev
(MIT license).

The mtdev library transforms all variants of kernel MT events to the
slotted type B protocol. The events put into mtdev may be from any MT
device, specifically type A without contact tracking, type A with
contact tracking, or type B with contact tracking. See the kernel
documentation for further details.

.. warning::

    This is an external library and Kivy does not provide any support for it.
    It might change in the future and we advise you don't rely on it in your
    code.
    N)	cdll	Structurec_ulongc_intc_ushortc_void_ppointerPOINTERbyrefZKIVY_DOCzlibmtdev.so.1/   0   1   2   3   4   5   6   7   8   9   :         i@  iA  iB  iC  iD  iE  iF  iG  iJ  iK  iL  iM  iN  iO                             	         c                   @   s   e Zd ZdefdefgZdS )timevalZtv_secZtv_usecN)__name__
__module____qualname__r   _fields_ r*   r*   2/tmp/pip-unpacked-wheel-xzebddm3/kivy/lib/mtdev.pyr%   X   s   r%   c                   @   s(   e Zd ZdefdefdefdefgZdS )input_eventtimetypecodevalueN)r&   r'   r(   r%   r   r   r)   r*   r*   r*   r+   r,   ^   s
   r,   c                   @   s4   e Zd ZdefdefdefdefdefdefgZdS )input_absinfor0   ZminimummaximumZfuzzZflat
resolutionN)r&   r'   r(   r   r)   r*   r*   r*   r+   r1   f   s   r1   c                   @   s6   e Zd Zdefdefdee fdefdee fgZdS )
mtdev_caps
has_mtdatahas_slothas_absslotabsN)r&   r'   r(   r   MTDEV_ABS_SIZEr1   r)   r*   r*   r*   r+   r4   p   s   

r4   c                   @   s   e Zd ZdefdefgZdS )mtdevcapsstateN)r&   r'   r(   r4   r   r)   r*   r*   r*   r+   r;   y   s   r;   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )Devicec                 C   s   || _ d| _t | _t d }| jdkrjzt|tjtjB | _W q  t	k
rf   t |krb Y q X q t
t| j| j}|dkrt| j d| _tdd S )Ng      @r   zUnable to open device)	_filename_fdr;   _devicer-   osopen
O_NONBLOCKO_RDONLYPermissionError
mtdev_openr   close	Exception)selffilenameZpermission_wait_untilretr*   r*   r+   __init__   s    

zDevice.__init__c                 C   s2   | j dkrdS tt| j t| j  d| _ dS )z"Close the mtdev converter
        r?   N)rA   mtdev_closer   rB   rC   rI   rK   r*   r*   r+   rI      s
    
zDevice.closec                 C   s*   | j dkrtdttt| j| j |S )a6  Check state of kernel device

        :Parameters:
            `ms`: int
                Number of milliseconds to wait for activity

        :Return:
            Return True if the device is idle, i.e, there are no fetched events
            in the pipe and there is nothing to fetch from the device.
        r?   Device closed)rA   rJ   bool
mtdev_idler   rB   )rK   msr*   r*   r+   idle   s    
zDevice.idlec                 C   s>   | j dkrtdt }tt| j| j t|ddkr:d S |S )Nr?   rQ   r   r   )rA   rJ   r,   	mtdev_getr   rB   r
   )rK   Zevr*   r*   r+   get   s    
z
Device.getc                 C   s    | j dkrtdt| jjjS )z7Return True if the device has multitouch data.
        r?   rQ   )rA   rJ   rR   rB   r<   r5   rP   r*   r*   r+   r5      s    
zDevice.has_mtdatac                 C   s    | j dkrtdt| jjjS )z8Return True if the device has slot information.
        r?   rQ   )rA   rJ   rR   rB   r<   r6   rP   r*   r*   r+   r6      s    
zDevice.has_slotc                 C   s<   | j dkrtd|dk s"|tkr*tdt| jjj| S )zReturn True if the device has abs data.

        :Parameters:
            `index`: int
                One of const starting with a name ABS_MT_
        r?   rQ   r   Invalid index)rA   rJ   r:   
IndexErrorrR   rB   r<   r7   rK   indexr*   r*   r+   r7      s
    
zDevice.has_absc                 C   s   t S )z@Return the maximum number of abs information available.
        )r:   rP   r*   r*   r+   get_max_abs   s    zDevice.get_max_absc                 C   s.   | j dkrtd| jjjdkr$dS | jjjS )zReturn the slot data.
        r?   rQ   r   N)rA   rJ   rB   r<   r6   r8   rP   r*   r*   r+   get_slot   s
    
zDevice.get_slotc                 C   s8   | j dkrtd|dk s"|tkr*td| jjj| S )zReturn the abs data.

        :Parameters:
            `index`: int
                One of const starting with a name ABS_MT_
        r?   rQ   r   rX   )rA   rJ   r:   rY   rB   r<   r9   rZ   r*   r*   r+   get_abs   s
    
zDevice.get_absN)r&   r'   r(   rN   rI   rU   rW   r5   r6   r7   r\   r]   r^   r*   r*   r*   r+   r>      s   		r>   )N__doc__rC   r-   ctypesr   r   r   r   r   r   r   r	   r
   environLoadLibraryZlibmtdevZMTDEV_CODE_SLOTZMTDEV_CODE_TOUCH_MAJORZMTDEV_CODE_TOUCH_MINORZMTDEV_CODE_WIDTH_MAJORZMTDEV_CODE_WIDTH_MINORZMTDEV_CODE_ORIENTATIONZMTDEV_CODE_POSITION_XZMTDEV_CODE_POSITION_YZMTDEV_CODE_TOOL_TYPEZMTDEV_CODE_BLOB_IDZMTDEV_CODE_TRACKING_IDZMTDEV_CODE_PRESSUREZMTDEV_CODE_ABS_XZMTDEV_CODE_ABS_YZMTDEV_CODE_ABS_ZZMTDEV_CODE_BTN_DIGIZMTDEV_CODE_BTN_TOOL_PENZMTDEV_CODE_BTN_TOOL_RUBBERZMTDEV_CODE_BTN_TOOL_BRUSHZMTDEV_CODE_BTN_TOOL_PENCILZMTDEV_CODE_BTN_TOOL_AIRBRUSHZMTDEV_CODE_BTN_TOOL_FINGERZMTDEV_CODE_BTN_TOOL_MOUSEZMTDEV_CODE_BTN_TOOL_LENSZMTDEV_CODE_BTN_TOUCHZMTDEV_CODE_BTN_STYLUSZMTDEV_CODE_BTN_STYLUS2ZMTDEV_CODE_BTN_TOOL_DOUBLETAPZMTDEV_CODE_BTN_TOOL_TRIPLETAPZMTDEV_CODE_BTN_TOOL_QUADTAPZMTDEV_TYPE_EV_ABSZMTDEV_TYPE_EV_SYNZMTDEV_TYPE_EV_KEYZMTDEV_TYPE_EV_RELZMTDEV_TYPE_EV_MSCZMTDEV_TYPE_EV_SWZMTDEV_TYPE_EV_LEDZMTDEV_TYPE_EV_SNDZMTDEV_TYPE_EV_REPZMTDEV_TYPE_EV_FFZMTDEV_TYPE_EV_PWRZMTDEV_TYPE_EV_FF_STATUSZMTDEV_ABS_TRACKING_IDZMTDEV_ABS_POSITION_XZMTDEV_ABS_POSITION_YZMTDEV_ABS_TOUCH_MAJORZMTDEV_ABS_TOUCH_MINORZMTDEV_ABS_WIDTH_MAJORZMTDEV_ABS_WIDTH_MINORZMTDEV_ABS_ORIENTATIONr:   r%   r,   r1   r4   r;   rH   argtypesrV   rS   rO   r>   r*   r*   r*   r+   <module>   s   ,


	