Ë
    ojÀ  ã                   ó|   — d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ  G d„ dee
j                  «      Zy)	zB
Serial port support for Windows.

Requires PySerial and pywin32.
é    N)Ú	EIGHTBITSÚPARITY_NONEÚSTOPBITS_ONE)Úto_bytes)Úabstract)ÚBaseSerialPortc                   óL   — e Zd ZdZdZdeeeddfd„Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zy)Ú
SerialPortz@A serial device, acting as a transport, that uses a win32 event.é   i€%  r   c
           
      óü  — | j                  |||||d ||	¬«      | _        | j                  «        | j                  «        || _        || _        g | _        d| _        d| _        d| _	        || _        t        j                  «       | _        t        j                  d ddd «      | j                  _        t        j                  «       | _        t        j                  d ddd «      | j                   _        | j                  j#                  | j                  j                  | d«       | j                  j#                  | j                   j                  | d«       | j
                  j%                  | «       | j'                  «        y )N)ÚbaudrateÚbytesizeÚparityÚstopbitsÚtimeoutÚxonxoffÚrtsctsr   r   ÚserialReadEventÚserialWriteEvent)Ú_serialFactoryÚ_serialÚ
flushInputÚflushOutputÚreactorÚprotocolÚoutQueueÚclosedÚclosedNotifiesÚwriteInProgressÚ	win32fileÚ
OVERLAPPEDÚ_overlappedReadÚ
win32eventÚCreateEventÚhEventÚ_overlappedWriteÚaddEventÚmakeConnectionÚ_finishPortSetup)
Úselfr   ÚdeviceNameOrPortNumberr   r   r   r   r   r   r   s
             úC/usr/lib/python3/dist-packages/twisted/internet/_win32serialport.pyÚ__init__zSerialPort.__init__    sB  € ð ×*Ñ*Ø"ØØØØØØØð +ó 	
ˆŒð 	�‰ÔØ×ÑÔØˆŒØ ˆŒØˆŒØˆŒØˆÔØ ˆÔà ˆŒÜ(×3Ñ3Ó5ˆÔÜ&0×&<Ñ&<¸TÀ1ÀaÈÓ&Nˆ×ÑÔ#Ü )× 4Ñ 4Ó 6ˆÔÜ'1×'=Ñ'=¸dÀAÀqÈ$Ó'Oˆ×ÑÔ$à�‰×Ñ˜d×2Ñ2×9Ñ9¸4ÐARÔSØ�‰×Ñ˜d×3Ñ3×:Ñ:¸DÐBTÔUà�‰×$Ñ$ TÔ*Ø×ÑÕó    c                 óÊ   — | j                  «       \  }}t        j                  | j                  j                  t        j
                  d«      | j                  «      \  }| _        y)zn
        Finish setting up the serial port.

        This is a separate method to facilitate testing.
        r   N)Ú_clearCommErrorr    ÚReadFiler   Ú_port_handleÚAllocateReadBufferr"   Úread_buf)r*   ÚflagsÚcomstatÚrcs       r,   r)   zSerialPort._finishPortSetupK   sQ   € ð ×-Ñ-Ó/‰ˆˆwÜ%×.Ñ.Ø�L‰L×%Ñ%Ü×(Ñ(¨Ó+Ø× Ñ ó
ÑˆˆD�Mr.   c                 óT   — t        j                  | j                  j                  «      S )N)r    ÚClearCommErrorr   r2   )r*   s    r,   r0   zSerialPort._clearCommErrorX   s   € Ü×'Ñ'¨¯©×(AÑ(AÓBÐBr.   c                 óÀ  — t        j                  | j                  j                  | j                  d«      }t        | j                  d | «      }| j                  «       \  }}|j                  rÞt        j                  | j                  j                  «       t        j                  | j                  j                  t        j                  |j                  «      | j                  «      \  }}t        j                  | j                  j                  | j                  d«      }| j                  j                  |t        |d | «      z   «       n| j                  j                  |«       t        j                  | j                  j                  «       t        j                  | j                  j                  t        j                  d«      | j                  «      \  }| _        y )Nr   r   )r    ÚGetOverlappedResultr   r2   r"   r   r4   r0   ÚcbInQuer#   Ú
ResetEventr%   r1   r3   r   ÚdataReceived)r*   ÚnÚfirstr5   r6   r7   Úbufs          r,   r   zSerialPort.serialReadEvent[   sg  € ä×)Ñ)Ø�L‰L×%Ñ% t×';Ñ';¸Qó
ˆô ˜Ÿ™ r¨Ð*Ó+ˆà×-Ñ-Ó/‰ˆˆwØ�?Š?Ü×!Ñ! $×"6Ñ"6×"=Ñ"=Ô>Ü×(Ñ(Ø—‘×)Ñ)Ü×,Ñ,¨W¯_©_Ó=Ø×$Ñ$ó‰GˆB�ô
 ×-Ñ-Ø—‘×)Ñ)¨4×+?Ñ+?ÀóˆAð �M‰M×&Ñ& u¬x¸¸B¸Q¸Ó/@Ñ'@ÕAð �M‰M×&Ñ& uÔ-ô 	×Ñ˜d×2Ñ2×9Ñ9Ô:Ü%×.Ñ.Ø�L‰L×%Ñ%Ü×(Ñ(¨Ó+Ø× Ñ ó
ÑˆˆD�Mr.   c                 óÒ   — |re| j                   r| j                  j                  |«       y d| _         t        j                  | j
                  j                  || j                  «       y y )Nr   )r   r   Úappendr    Ú	WriteFiler   r2   r&   )r*   Údatas     r,   ÚwritezSerialPort.write{   sR   € ÙØ×#Ò#Ø—‘×$Ñ$ TÕ*à'(�Ô$Ü×#Ñ#Ø—L‘L×-Ñ-¨t°T×5JÑ5Jõð r.   c                 óÒ   — 	 | j                   j                  d«      }t        j                  | j                  j
                  || j                  «       y # t        $ r
 d| _        Y y w xY w)Nr   )	r   Úpopr    rD   r   r2   r&   Ú
IndexErrorr   )r*   ÚdataToWrites     r,   r   zSerialPort.serialWriteEvent…   s^   € ð	ØŸ-™-×+Ñ+¨AÓ.ˆKô
 ×ÑØ—‘×)Ñ)¨;¸×8MÑ8Mõøô	 ò 	Ø#$ˆDÔ Ùð	ús   ‚A ÁA&Á%A&c                 ój  — | j                   j                  | j                  j                  «       | j                   j                  | j                  j                  «       t
        j                  j                  | |«       | j                  j                  «        | j                  j                  |«       y)z™
        Called when the serial port disconnects.

        Will call C{connectionLost} on the protocol that is handling the
        serial data.
        N)r   ÚremoveEventr"   r%   r&   r   ÚFileDescriptorÚconnectionLostr   Úcloser   )r*   Úreasons     r,   rN   zSerialPort.connectionLost�   sx   € ð 	�‰× Ñ  ×!5Ñ!5×!<Ñ!<Ô=Ø�‰× Ñ  ×!6Ñ!6×!=Ñ!=Ô>Ü×Ñ×.Ñ.¨t°VÔ<Ø�‰×ÑÔØ�‰×$Ñ$ VÕ,r.   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	connectedr   r   r   r-   r)   r0   r   rF   r   rN   © r.   r,   r
   r
      sD   „ ÙJà€Ið ØØØØØó) òV
òCò
ò@ò	ó-r.   r
   )rT   r#   r    Úserialr   r   r   Úserial.serialutilr   Útwisted.internetr   Útwisted.internet.serialportr   rM   r
   rV   r.   r,   ú<module>r[      s=   ðñó Û ÷ 8Ñ 7Ý &õ &õ 7ô@-� ×!8Ñ!8õ @-r.   