
    Vh                     |    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
             Q/home/dcms/DCMS/lib/python3.12/site-packages/twisted/internet/_win32serialport.py__init__zSerialPort.__init__    sB    **" + 	
 	   (335&0&<&<T1a&N# ) 4 4 6'1'='=dAq$'O$d22994ARSd33::DBT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%..LL%%((+  
DMr.   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                  rt        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   ))LL%%t';';Q
 r*+--/w??!!$"6"6"="=>(()),,W__=$$GB
 --))4+?+?A MM&&uxBQ/@'@A MM&&u- 	d2299:%..LL%%((+  
DMr.   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*'($##LL--tT5J5J 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
 ));8M8M	  	#$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!=!=>..tV<$$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.   