
    Yf                     z    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dS )	zB
Serial port support for Windows.

Requires PySerial and pywin32.
    N)	EIGHTBITSPARITY_NONESTOPBITS_ONE)to_bytes)abstract)BaseSerialPortc                   N    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dS )
SerialPortz@A serial device, acting as a transport, that uses a win32 event.   i%  r   c
           
         |                      |||||d ||	          | _        |                                  |                                  || _        || _        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        | d           | j                            | j        j        | d           | j                            |            |                                  d S )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
             S/var/www/html/env/lib/python3.11/site-packages/twisted/internet/_win32serialport.py__init__zSerialPort.__init__    sY    **" + 	
 	
 	   (355&0&<T1a&N&N# ) 4 6 6'1'=dAq$'O'O$d294ARSSSd3:DBTUUU$$T***    c                     |                                  \  }}t          j        | j        j        t          j        d          | j                  \  }| _        dS )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   sR     --//w%.L%(++ 
 
DMMMr.   c                 >    t          j        | j        j                  S )N)r    ClearCommErrorr   r2   )r*   s    r,   r0   zSerialPort._clearCommErrorX   s    '(ABBBr.   c                    t          j        | j        j        | j        d          }t          | j        d |                   }|                                 \  }}|j        rt          j
        | j        j                   t          j        | j        j        t          j        |j                  | j                  \  }}t          j        | j        j        | j        d          }| j                            |t          |d |                   z              n| j                            |           t          j
        | j        j                   t          j        | j        j        t          j        d          | j                  \  }| _        d S )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[   sd   )L%t';Q
 
 rr*++--//w? 	.!$"6"=>>>(),W_==$ GB
 -)4+? A M&&uxBQB/@/@'@AAAA M&&u--- 	d29:::%.L%(++ 
 
DMMMr.   c                     |rQ| j         r| j                            |           d S d| _         t          j        | j        j        || j                   d S d S )Nr   )r   r   appendr    	WriteFiler   r2   r&   )r*   datas     r,   writezSerialPort.write{   sq     	# $$T*****'($#L-tT5J    	 	r.   c                     	 | j                             d          }t          j        | j        j        || j                   d S # t          $ r d| _        Y d S w xY w)Nr   )	r   popr    rD   r   r2   r&   
IndexErrorr   )r*   dataToWrites     r,   r   zSerialPort.serialWriteEvent   sx    	-++A..K
 );8M    	  	 	 	#$D FF	s   A AAc                 <   | j                             | j        j                   | j                             | j        j                   t
          j                            | |           | j        	                                 | j
                            |           dS )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   s     	  !5!<===  !6!=>>>..tV<<<$$V,,,,,r.   N)__name__
__module____qualname____doc__	connectedr   r   r   r-   r)   r0   r   rF   r   rN    r.   r,   r
   r
      s        JJI )  )  )  ) V
 
 
C C 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 7 7 7 7 7 7 7 & & & & & & & % % % % % 7 6 6 6 6 6@- @- @- @- @-!8 @- @- @- @- @-r.   