
ßqV7  ã               @   sÆ   d  Z  d d l Z d d l Z d d l Z Gd d „  d e j ƒ Z e j d d „  ƒ Z e d k rÂ Gd d	 „  d	 e j	 ƒ Z
 e j ƒ  Z e e e
 d
 d d ƒZ e j e ƒ e j ƒ  e j ƒ  d S)zßSupport asyncio with serial ports. EXPERIMENTAL

Posix platforms only, Python 3.4+ only.

Windows event loops can not wait for serial ports with the current
implementation. It should be possible to get that working though.
é    Nc               @   sp   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 S)ÚSerialTransportc             C   s|   | |  _  | |  _ | |  _ d |  _ d |  _ d |  j _ |  j j ƒ  | j | j |  ƒ | j | j	 |  j j
 |  j ƒ d  S)NFr   )Ú_loopÚ	_protocolÚserialÚ_closingÚ_pausedZtimeoutZnonblockingÚ	call_soonÚconnection_madeÚ
add_readerÚfdÚ_read_ready)ÚselfÚloopÚprotocolZserial_instance© r   ú,/usr/lib/python3/dist-packages/serial/aio.pyÚ__init__   s    					zSerialTransport.__init__c             C   s   d j  d |  ƒ S)NzH{self.__class__.__name__}({self._loop}, {self._protocol}, {self.serial})r   )Úformat)r   r   r   r   Ú__repr__$   s    zSerialTransport.__repr__c             C   sV   |  j  r d  Sd |  _  |  j j |  j j ƒ |  j j ƒ  |  j j |  j j d  ƒ d  S)NT)	r   r   Úremove_readerr   r   Úcloser   r   Úconnection_lost)r   r   r   r   r   '   s    		zSerialTransport.closec             C   s,   |  j  j d ƒ } | r( |  j j | ƒ d  S)Ni   )r   Úreadr   Údata_received)r   Údatar   r   r   r   /   s    zSerialTransport._read_readyc             C   s   |  j  j | ƒ d  S)N)r   Úwrite)r   r   r   r   r   r   4   s    zSerialTransport.writec             C   s   d S)NFr   )r   r   r   r   Úcan_write_eof7   s    zSerialTransport.can_write_eofc             C   si   |  j  r t d ƒ ‚ |  j r* t d ƒ ‚ d |  _ |  j j |  j ƒ |  j j ƒ  re t j d |  ƒ d  S)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading)	r   ÚRuntimeErrorr   r   r   Ú_sock_fdÚ	get_debugÚloggingÚdebug)r   r   r   r   Úpause_reading:   s    			zSerialTransport.pause_readingc             C   sg   |  j  s t d ƒ ‚ d |  _  |  j r+ d  S|  j j |  j |  j ƒ |  j j ƒ  rc t j	 d |  ƒ d  S)Nz
Not pausedFz%r resumes reading)
r   r   r   r   r
   r   r   r   r    r!   )r   r   r   r   Úresume_readingD   s    			zSerialTransport.resume_readingN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r"   r#   r   r   r   r   r      s   
r   c             O   s7   t  j | | Ž  } | ƒ  } t |  | | ƒ } | | f S)N)r   ZSerialr   )r   Zprotocol_factoryÚargsÚkwargsZserr   Ú	transportr   r   r   Úcreate_serial_connectionU   s    	r*   Ú__main__c               @   s4   e  Z d  Z d d „  Z d d „  Z d d „  Z d S)ÚOutputc             C   s3   | |  _  t d | ƒ d | j _ | j d ƒ d  S)Nzport openedFs   hello world
)r)   Úprintr   Zrtsr   )r   r)   r   r   r   r	   `   s    	zOutput.connection_madec             C   s$   t  d t | ƒ ƒ |  j j ƒ  d  S)Nzdata received)r-   Úreprr)   r   )r   r   r   r   r   r   f   s    zOutput.data_receivedc             C   s   t  d ƒ t j ƒ  j ƒ  d  S)Nzport closed)r-   ÚasyncioÚget_event_loopÚstop)r   Úexcr   r   r   r   j   s    
zOutput.connection_lostN)r$   r%   r&   r	   r   r   r   r   r   r   r,   _   s   r,   z/dev/ttyUSB0Zbaudratei Â )Ú__doc__r/   r   r    Z	Transportr   Ú	coroutiner*   r$   ZProtocolr,   r0   r   ÚcoroZrun_until_completeZrun_foreverr   r   r   r   r   Ú<module>   s   ?	
