관리-도구
편집 파일: serialwin32.cpython-39.opt-1.pyc
a �����ֽXwN����������������������@���sT���d�dl�Z�d�dlZd�dlmZ�d�dlZd�dlmZmZmZmZm Z �G�dd��de�Z dS�)�����N)�win32)� SerialBase�SerialException�to_bytes�portNotOpenError�writeTimeoutErrorc�����������������������s��e�Zd�ZdZdZ��fdd�Zdd��Zdd��Zd d ��Zdd��Z e d d���Zd;dd�Zdd��Z dd��Zdd��Zdd��Zdd��Zdd��Zdd��Zd d!��Ze d"d#���Ze d$d%���Ze d&d'���Ze d(d)���Zd<d,d-�Zd=d/d0�Ze d1d2���Zd3d4��Zd5d6��Zd7d8��Zej j!d9d:���Z ���Z"S�)>�Serialz5Serial port implementation for Win32 based on ctypes.)�2����K����n����������������i,��iX��i���i��i` ��i���i�%��i�K��i����i����i���c��������������������s,���d�|�_�d�|�_d�|�_tt|��j|i�|���d�S��N)�_port_handle�_overlapped_read�_overlapped_write�superr����__init__)�self�args�kwargs�� __class__���6/usr/lib/python3.9/site-packages/serial/serialwin32.pyr������s����zSerial.__init__c�������������� ���C���s���|�j�du�rtd��|�jr td��|�j}z.|����d�rRt|dd���dkrRd|�}W�n�tyf���Y�n0�t� |tj tjB�ddtjtj tjB�d�|�_|�jtjkr�d|�_td �|�jt������z�t���|�_t�dd dd�|�j_t���|�_t�dddd�|�j_t�|�jdd��t���|�_t�|�jt�|�j���|�����t� |�jtj!tj"B�tj#B�tj$B���W�n.���z|��%���W�n���Y�n0�d|�_��Y�n0�d|�_dS�) zx Open port with current settings. This may throw a SerialException if the port cannot be opened. Nz.Port must be configured before it can be used.zPort is already open.ZCOM��������z\\.\r���zcould not open port {!r}: {!r}��������T)&Z_portr����is_open�name�upper� startswith�int� ValueErrorr���Z CreateFileZGENERIC_READZ GENERIC_WRITEZ OPEN_EXISTING�FILE_ATTRIBUTE_NORMALZFILE_FLAG_OVERLAPPEDr���ZINVALID_HANDLE_VALUE�formatZportstr�ctypes�WinErrorZ OVERLAPPEDr���ZCreateEvent�hEventr���� SetupComm�COMMTIMEOUTS�_orgTimeoutsZGetCommTimeouts�byref�_reconfigure_port� PurgeComm� PURGE_TXCLEAR� PURGE_TXABORT� PURGE_RXCLEAR� PURGE_RXABORT�_close)r����portr���r���r����open!���s^���� " � ���zSerial.openc�����������������C���s���|�j�std��t���}|�jdu�r"n*|�jdkr6tj|_ntt|�jd��d�|_ |�jdkrv|�j durvtt|�j d��d�|_|�jdu�r�n*|�jdkr�tj|_ntt|�jd��d�|_t� |�j�t�|���t�|�j�tj��t���}t�|�j�t�|���|�j|_|�jtjk�r d|_nR|�jtjk�r d|_n<|�jtjk�r6d|_n&|�jtjk�rLd |_ntd �|�j���|�jtj k�rztj!|_"d|_#n�|�jtj$k�r�tj%|_"d|_#nj|�jtj&k�r�tj'|_"d|_#nL|�jtj(k�r�tj)|_"d|_#n.|�jtj*k�r�tj+|_"d|_#ntd�|�j���|�j,tj-k�rtj.|_/n@|�j,tj0k�r2tj1|_/n(|�j,tj2k�rJtj3|_/ntd�|�j,���d|_4|�j5du��r�|�j6�r~tj7|_8n|�j9�r�tj:ntj;|_8|�j6|_<n�|�j5j=�s�td �|�j5j=���|�j5j>�r�td�|�j5j>���|�j5j?du�r�td�|�j5j?���|�j5j@du�rtd�|�j5j@���|�j5jA�r2td�|�j5jA���tjB|_8d|_<|�jC�rRtjD|_En|�jF�r`tjGntjH|_E|�jC|_I|�jJ|_K|�jJ|_Ld|_Md|_Nd|_OtjP|_QtjR|_St�T|�j�t�|���s�td�t�U�����dS�)z,Set communication parameters on opened port.z'Can only operate on a valid port handleNr���i���r���������������r���z%Unsupported number of data bits: {!r}zUnsupported parity mode: {!r}z%Unsupported number of stop bits: {!r}z:Unsupported value for RS485Settings.rts_level_for_tx: {!r}z:Unsupported value for RS485Settings.rts_level_for_rx: {!r}z9Unsupported value for RS485Settings.delay_before_tx: {!r}z9Unsupported value for RS485Settings.delay_before_rx: {!r}z2Unsupported value for RS485Settings.loopback: {!r}zCCannot configure port, something went wrong. Original message: {!r})Vr���r���r���r,����_timeoutZMAXDWORDZReadIntervalTimeout�maxr$���ZReadTotalTimeoutConstantZ_inter_byte_timeout�_write_timeoutZWriteTotalTimeoutConstant�SetCommTimeoutsr(���r.���ZSetCommMaskZEV_ERRZDCBZGetCommStateZ _baudrateZBaudRateZ _bytesize�serialZFIVEBITSZByteSizeZSIXBITSZ SEVENBITSZ EIGHTBITSr%���r'���Z_parityZPARITY_NONEZNOPARITYZParityZfParityZPARITY_EVENZ EVENPARITYZ PARITY_ODDZ ODDPARITYZPARITY_MARKZ MARKPARITYZPARITY_SPACEZSPACEPARITYZ _stopbitsZSTOPBITS_ONEZ ONESTOPBITZStopBitsZSTOPBITS_ONE_POINT_FIVEZONE5STOPBITSZSTOPBITS_TWOZTWOSTOPBITSZfBinaryZ_rs485_modeZ_rtsctsZRTS_CONTROL_HANDSHAKEZfRtsControl� _rts_stateZRTS_CONTROL_ENABLEZRTS_CONTROL_DISABLEZfOutxCtsFlowZrts_level_for_txZrts_level_for_rxZdelay_before_txZdelay_before_rxZloopbackZRTS_CONTROL_TOGGLEZ_dsrdtrZDTR_CONTROL_HANDSHAKEZfDtrControl� _dtr_stateZDTR_CONTROL_ENABLEZDTR_CONTROL_DISABLEZfOutxDsrFlowZ_xonxoffZfOutXZfInXZfNullZ fErrorCharZ fAbortOnErrorZXONZXonCharZXOFFZXoffCharZSetCommStater)���)r���ZtimeoutsZcomDCBr���r���r���r/���b���s����� �� ������ �� ��zSerial._reconfigure_portc�����������������C���s|���|�j�durxt�|�j�|�j��|�jdur@|�����t�|�jj��d|�_|�jdurf|�� ���t�|�jj��d|�_t�|�j���d|�_�dS�)zinternal close port helperN) r���r���r>���r-���r����cancel_readZCloseHandler*���r����cancel_write�r���r���r���r���r5�������s���� z Serial._closec�����������������C���s���|�j�r|�����d|�_�dS�)z Close portFN)r ���r5���rD���r���r���r����close����s����zSerial.closec�����������������C���sD���t����}t����}t��|�jt�|�t�|��s>td�t� �����|j S�)z9Return the number of bytes currently in the input buffer.�ClearCommError failed ({!r}))r����DWORD�COMSTAT�ClearCommErrorr���r(���r.���r���r'���r)����cbInQue�r����flags�comstatr���r���r���� in_waiting����s ����zSerial.in_waitingr���c����������� ��� ���C���sR��|�j�s t�|dk�rDt�|�jj��t���}t���}t�|�j t �|�t �|��s`td� t ������|�jdkrvt|j|�n|}|dk�r<t �|�}t���}t�|�j ||t �|�t �|�j��}|s�t���tjtjfvr�td� t ������t�|�j t �|�j�t �|�d�}|�s*t���tjk�r*td� t ������|jd|j��} nt��} nt��} t| �S�)z� Read size bytes from the serial port. If a timeout is set it may return less characters as requested. With no timeout it will block until the requested number of bytes is read. r���rF���zReadFile failed ({!r})Tz!GetOverlappedResult failed ({!r})N)r ���r���r���Z ResetEventr���r*���rG���rH���rI���r���r(���r.���r���r'���r)����timeout�minrJ���Zcreate_string_bufferZReadFile�GetLastError� ERROR_SUCCESS�ERROR_IO_PENDING�GetOverlappedResult�ERROR_OPERATION_ABORTED�raw�value�bytes) r����sizerL���rM����n�buf�rcZread_okZ result_ok�readr���r���r���r]�����sD���� � �zSerial.readc�����������������C���s��|�j�s t�t|�}|�rt���}t�|�j|t|�t� |�|�j �}|�jdkr�|stt���tj tjfvrttd�t������t�|�j|�j t� |�d��t���tjkr�|jS�|jt|�kr�t�|jS�|r�tj nt���}|tjtjtjfv�r�dS�|tj tjfv���r�t|�S�td�t������ndS�dS�)z2Output the given byte string over the serial port.r���zWriteFile failed ({!r})TN)r ���r���r���r���rG���Z WriteFiler����lenr(���r.���r���r=���rQ���rR���rS���r���r'���r)���rT���rU���rW���r���ZERROR_INVALID_USER_BUFFERZERROR_NOT_ENOUGH_MEMORY)r����datarZ����success� errorcoder���r���r����write-��s0���� �zSerial.writec�����������������C���s���|�j�rt�d��q�dS�)zb Flush of file like objects. In this case, wait until all data is written. g�������?N)�out_waiting�time�sleeprD���r���r���r����flushR��s����zSerial.flushc�����������������C���s$���|�j�s t�t�|�jtjtjB���dS�)z9Clear input buffer, discarding all that is in the buffer.N)r ���r���r���r0���r���r3���r4���rD���r���r���r����reset_input_buffer]��s����zSerial.reset_input_bufferc�����������������C���s$���|�j�s t�t�|�jtjtjB���dS�)zs Clear output buffer, aborting the current output and discarding all that is in the buffer. N)r ���r���r���r0���r���r1���r2���rD���r���r���r����reset_output_bufferc��s����zSerial.reset_output_bufferc�����������������C���s.���|�j�s t�|�jrt�|�j��nt�|�j��dS�)zBSet break: Controls TXD. When active, to transmitting is possible.N)r ���r���Z_break_stater���ZSetCommBreakr���ZClearCommBreakrD���r���r���r����_update_break_statel��s ����zSerial._update_break_statec�����������������C���s,���|�j�rt�|�jtj��nt�|�jtj��dS�)z)Set terminal status line: Request To SendN)r@���r����EscapeCommFunctionr���ZSETRTSZCLRRTSrD���r���r���r����_update_rts_stateu��s����zSerial._update_rts_statec�����������������C���s,���|�j�rt�|�jtj��nt�|�jtj��dS�)z-Set terminal status line: Data Terminal ReadyN)rA���r���rj���r���ZSETDTRZCLRDTRrD���r���r���r����_update_dtr_state|��s����zSerial._update_dtr_statec�����������������C���s,���|�j�s t�t���}t�|�jt�|���|jS�r���) r ���r���r���rG���ZGetCommModemStatusr���r(���r.���rW���)r����statr���r���r����_GetCommModemStatus���s ����zSerial._GetCommModemStatusc�����������������C���s���t�j|����@�dkS�)z(Read terminal status line: Clear To Sendr���)r���Z MS_CTS_ONrn���rD���r���r���r����cts���s����z Serial.ctsc�����������������C���s���t�j|����@�dkS�)z)Read terminal status line: Data Set Readyr���)r���Z MS_DSR_ONrn���rD���r���r���r����dsr���s����z Serial.dsrc�����������������C���s���t�j|����@�dkS�)z)Read terminal status line: Ring Indicatorr���)r���Z MS_RING_ONrn���rD���r���r���r����ri���s����z Serial.ric�����������������C���s���t�j|����@�dkS�)z)Read terminal status line: Carrier Detectr���)r���Z MS_RLSD_ONrn���rD���r���r���r����cd���s����z Serial.cdr���Nc�����������������C���s ���|du�r|}t��|�j||��dS�)z� Recommend a buffer size to the driver (device driver can ignore this value). Must be called before the port is opened. N)r���r+���r���)r���Zrx_sizeZtx_sizer���r���r����set_buffer_size���s����zSerial.set_buffer_sizeTc�����������������C���s4���|�j�s t�|r t�|�jtj��nt�|�jtj��dS�)a*�� Manually control flow - when software flow control is enabled. This will do the same as if XON (true) or XOFF (false) are received from the other device and control the transmission accordingly. WARNING: this function is not portable to different platforms! N)r ���r���r���rj���r���ZSETXONZSETXOFF)r����enabler���r���r����set_output_flow_control���s ����zSerial.set_output_flow_controlc�����������������C���sD���t����}t����}t��|�jt�|�t�|��s>td�t� �����|j S�)z0Return how many bytes the in the outgoing bufferrF���)r���rG���rH���rI���r���r(���r.���r���r'���r)���ZcbOutQuerK���r���r���r���rc������s ����zSerial.out_waitingc�����������������C���sP���t����}t��|�jt�|�t�|�d�}|sLt����t�jt�jfv�rLt�� |�j|��dS�)�ACancel a blocking read operation, may be called from other threadFN) r���rG���rT���r���r(���r.���rQ���rS���ZERROR_IO_INCOMPLETEZ CancelIoEx)r���Z overlappedr\����errr���r���r����_cancel_overlapped_io���s�����zSerial._cancel_overlapped_ioc�����������������C���s���|���|�j��dS�)rv���N)rx���r���rD���r���r���r���rB������s����zSerial.cancel_readc�����������������C���s���|���|�j��dS�)zBCancel a blocking write operation, may be called from other threadN)rx���r���rD���r���r���r���rC������s����zSerial.cancel_writec�����������������C���s0���|dur|st�d�|���ntjj�|�|��dS�)z$Change the exclusive access setting.Nz.win32 only supports exclusive access (not: {}))r%���r'���r?���r���� exclusive�__set__)r���ry���r���r���r���ry������s����zSerial.exclusive)r���)r���N)T)#�__name__� __module__�__qualname__�__doc__Z BAUDRATESr���r7���r/���r5���rE����propertyrN���r]���rb���rf���rg���rh���ri���rk���rl���rn���ro���rp���rq���rr���rs���ru���rc���rx���rB���rC���r���ry����setter� __classcell__r���r���r���r���r������sH���A� )% r���)r(���rd���r?���r���Zserial.serialutilr���r���r���r���r���r���r���r���r���r����<module> ���s ���