Ë
    È¦^_Û7  ã                   ó€  — d dl mZ d dlZd dlZd dlZd dlZd dlZ	 d dlZd dlmZmZmZmZmZmZ ej$                  ej&                  ej(                  ej*                  dœZdZ G d„ de«      Zedk(  r¼d dlZ ed	«      Zej8                  j;                  d
j=                  e«      «       ej8                  j;                  d«       ej;                  d«       ej?                  «        ej8                  j;                  dj=                  ejA                  d«      «      «       ejC                  «        yy# e$ r
 d dl	m
Z Y �Œw xY w)é    )Úabsolute_importN)Ú
SerialBaseÚSerialExceptionÚto_bytesÚPortNotOpenErrorÚSerialTimeoutExceptionÚTimeout)ÚdebugÚinfoÚwarningÚerroré   c                   ó¶   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Ze	d„ «       Z
dd„Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ Ze	d„ «       Ze	d„ «       Ze	d„ «       Ze	d„ «       Zd„ Zy)ÚSerialz-Serial port implementation for plain sockets.)é2   éK   én   é†   é–   éÈ   i,  iX  i°  i  i`	  iÀ  i€%  i K  i –  i á  i Â c                 óp  — d| _         | j                  €t        d«      ‚| j                  rt        d«      ‚	 t	        j
                  | j                  | j                  «      t        ¬«      | _	        | j                  j                  d«       | j                  «        d| _        | j                  s| j                  «        | j                   s| j#                  «        | j%                  «        | j'                  «        y# t        $ r1}d| _	        t        dj                  | j                  |«      «      ‚d}~ww xY w)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.zPort is already open.)ÚtimeoutzCould not open port {}: {}FT)ÚloggerÚ_portr   Úis_openÚsocketÚcreate_connectionÚfrom_urlÚportstrÚPOLL_TIMEOUTÚ_socketÚ	ExceptionÚformatÚsetblockingÚ_reconfigure_portÚ_dsrdtrÚ_update_dtr_stateÚ_rtsctsÚ_update_rts_stateÚreset_input_bufferÚreset_output_buffer)ÚselfÚmsgs     úC/usr/lib/python3/dist-packages/serial/urlhandler/protocol_socket.pyÚopenzSerial.open3   sü   € ð
 ˆŒØ�:‰:ÐÜ!Ð"RÓSÐSØ�<Š<Ü!Ð"9Ó:Ð:ð	Zä!×3Ñ3°D·M±MÀ$Ç,Á,Ó4OÔYeÔfˆDŒLð
 	�‰× Ñ  Ô'ð 	×ÑÔ àˆŒØ�|Š|Ø×"Ñ"Ô$Ø�|Š|Ø×"Ñ"Ô$Ø×ÑÔ!Ø× Ñ Õ"øô ò 	ZØˆDŒLÜ!Ð">×"EÑ"EÀdÇlÁlÐTWÓ"XÓYÐYûð	Zús   ·9C; Ã;	D5Ä,D0Ä0D5c                 ó‚   — | j                   €t        d«      ‚| j                  r| j                  j                  d«       yy)zz        Set communication parameters on opened port. For the socket://
        protocol all settings are ignored!
        NzCan only operate on open portsz!ignored port configuration change)r!   r   r   r   ©r,   s    r.   r%   zSerial._reconfigure_portQ   s9   € ð
 �<‰<ÐÜ!Ð"BÓCÐCØ�;Š;Ø�K‰K×ÑÐ@ÕAð ó    c                 ó  — | j                   rt| j                  rK	 | j                  j                  t        j                  «       | j                  j                  «        d| _        d| _         t        j                  d«       yy#  Y Œ)xY w)z
Close portNFg333333Ó?)r   r!   Úshutdownr   Ú	SHUT_RDWRÚcloseÚtimeÚsleepr1   s    r.   r6   zSerial.close[   sg   € à�<Š<Ø�|Š|ðØ—L‘L×)Ñ)¬&×*:Ñ*:Ô;Ø—L‘L×&Ñ&Ô(ð  $�”Ø ˆDŒLä�J‰J�s�Oð øð
áús   šAB ÂBc                 óú  — t        j                  |«      }|j                  dk7  r$t        dj	                  |j                  «      «      ‚	 t        j
                  |j                  d«      j                  «       D ]’  \  }}|dk(  rot        j                  «        t        j                  d«      | _        | j                  j                  t        |d      «       | j                  j                  d«       Œzt        dj	                  |«      «      ‚ d|j                   cxk  rd	k  st        d
«      ‚ t        d
«      ‚	 |j"                  |j                   fS # t        $ r}t        dj	                  |«      «      ‚d}~ww xY w)z(extract host and port from an URL stringr   zexpected a string in the form "socket://<host>:<port>[?logging={debug|info|warning|error}]": not starting with socket:// ({!r})TÚloggingzpySerial.socketr   zenabled loggingzunknown option: {!r}i   zport not in range 0...65535z_expected a string in the form "socket://<host>:<port>[?logging={debug|info|warning|error}]": {}N)ÚurlparseÚurlsplitÚschemer   r#   Úparse_qsÚqueryÚitemsr:   ÚbasicConfigÚ	getLoggerr   ÚsetLevelÚLOGGER_LEVELSr
   Ú
ValueErrorÚportÚhostname)r,   ÚurlÚpartsÚoptionÚvaluesÚes         r.   r   zSerial.from_urlj   s`  € ä×!Ñ! #Ó&ˆØ�<‰<˜8Ò#Ü!ð5ç5;±V¸E¿L¹LÓ5IóKð Kð	_ä"*×"3Ñ"3°E·K±KÀÓ"F×"LÑ"LÓ"Nò L‘�˜Ø˜YÒ&Ü×'Ñ'Ô)Ü")×"3Ñ"3Ð4EÓ"F�D”KØ—K‘K×(Ñ(¬°v¸a±yÑ)AÔBØ—K‘K×%Ñ%Ð&7Õ8ä$Ð%;×%BÑ%BÀ6Ó%JÓKÐKðLð ˜Ÿ
™
Ô* UÒ*Ü Ð!>Ó?Ð?ð +Ü Ð!>Ó?Ð?ð +ð —‘ §
¡
Ð+Ð+øô ò 	_Ü!ðTßTZÑTZÐ[\ÓT]ó_ð _ûð	_ús   Á
C/E Å	E:ÅE5Å5E:c                 ó’   — | j                   s
t        «       ‚t        j                  | j                  gg g d«      \  }}}t	        |«      S )z9Return the number of bytes currently in the input buffer.r   )r   r   Úselectr!   Úlen)r,   ÚlrÚlwÚlxs       r.   Ú
in_waitingzSerial.in_waiting‡   s?   € ð �|Š|Ü"Ó$Ð$ô —]‘] D§L¡L >°2°r¸1Ó=‰
ˆˆB�Ü�2‹wˆr2   c                 óH  — | j                   s
t        «       ‚t        «       }t        | j                  «      }t        |«      |k  r´	 t        j                  | j                  gg g |j                  «       «      \  }}}|s	 t/        |«      S | j                  j                  |t        |«      z
  «      }|st        d«      ‚|j                  |«       |j-                  «       r	 t/        |«      S t        |«      |k  rŒ´t/        |«      S # t        $ r}}|j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  fvrt        dj'                  |«      «      ‚Y d}~Œ·d}~wt        j(                  t*        j(                  f$ rw}|d   t        j                  t        j                  t        j                   t        j"                  t        j$                  fvrt        dj'                  |«      «      ‚Y d}~�ŒOd}~ww xY w)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.
        zsocket disconnectedúread failed: {}Nr   )r   r   Ú	bytearrayr	   Ú_timeoutrO   rN   r!   Ú	time_leftÚrecvr   ÚextendÚOSErrorÚerrnoÚEAGAINÚEALREADYÚEWOULDBLOCKÚEINPROGRESSÚEINTRr#   r   r   ÚexpiredÚbytes)r,   ÚsizeÚreadr   ÚreadyÚ_ÚbufrL   s           r.   re   zSerial.read”   s¶  € ð �|Š|Ü"Ó$Ð$Ü‹{ˆÜ˜$Ÿ-™-Ó(ˆÜ�$‹i˜$ÒðGÜ$Ÿm™m¨T¯\©\¨N¸BÀÀG×DUÑDUÓDWÓX‘��q˜!ñ
 Øô* �T‹{Ðð) —l‘l×'Ñ'¨¬s°4«yÑ(8Ó9�ñ Ü)Ð*?Ó@Ð@Ø—‘˜CÔ ð �‰Ô ØÜ�T‹{Ðô; �$‹i˜$Óô: �T‹{Ðøô ò Gð —7‘7¤5§<¡<´·±Ä×ARÑARÔTY×TeÑTeÔgl×grÑgrÐ"sÑsÜ)Ð*;×*BÑ*BÀ1Ó*EÓFÐFô tûä—L‘L¤&§,¡,Ð/ò Gð �Q‘4¤§¡¬e¯n©n¼e×>OÑ>OÔQV×QbÑQbÔdi×doÑdoÐpÑpÜ)Ð*;×*BÑ*BÀ1Ó*EÓFÐFõ qûð	Gús-   Á7D ÂAD Ä	H!ÄA3FÆ&H!Æ*A,HÈH!c                 ó  — | j                   s
t        «       ‚t        |«      }t        |«      x}}t	        | j
                  «      }|dkD  �r	 | j                  j                  |«      }|j                  r|S |j                  s]|j                  «       rt        d«      ‚t        j                  g | j                  gg |j                  «       «      \  }}}|sQt        d«      ‚|j                  «       �J ‚t        j                  g | j                  gg d«      \  }}}|st        d«      ‚||d }||z  }|j                  s|j                  «       rt        d«      ‚|dkD  r�Œ|t        |«      z
  S # t        $ r ‚ t        $ r}}	|	j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  fvrt        dj-                  |	«      «      ‚Y d}	~	ŒÆd}	~	wt        j.                  $ rw}	|	d   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  fvrt        dj-                  |	«      «      ‚Y d}	~	�ŒNd}	~	ww xY w)z²        Output the given byte string over the serial port. Can block if the
        connection is blocked. May raise SerialException if the connection is
        closed.
        r   zWrite timeoutNzwrite failed (select)zwrite failed: {})r   r   r   rO   r	   Ú_write_timeoutr!   ÚsendÚis_non_blockingÚis_infiniterb   r   rN   rX   r   r[   r\   r]   r^   r_   r`   ra   r#   r   )
r,   ÚdataÚdÚtx_lenÚlengthr   Únrg   rf   rL   s
             r.   ÚwritezSerial.write½   s&  € ð �|Š|Ü"Ó$Ð$ä�T‹NˆÜ˜a›&Ð ˆ�Ü˜$×-Ñ-Ó.ˆØ�q‹jð#HØ—L‘L×%Ñ% aÓ(�Ø×*Ò*ð �HØ ×,Ò,ð —‘Ô(Ü4°_ÓEÐEÜ"(§-¡-°°T·\±\°NÀBÈ×HYÑHYÓH[Ó"\‘K�A�u˜aÙ Ü4°_ÓEÐEà"×,Ñ,Ó.Ð6Ð6Ð6ä"(§-¡-°°T·\±\°NÀBÈÓ"M‘K�A�u˜aÙ Ü-Ð.EÓFÐFØ�a�b�E�Ø˜!‘�ð ×*Ò*¨w¯©Ô/@Ü,¨_Ó=Ð=ðM �qŒjðN œ˜A›‰Ðøô! #ò ØÜò Hð —7‘7¤5§<¡<´·±Ä×ARÑARÔTY×TeÑTeÔgl×grÑgrÐ"sÑsÜ)Ð*<×*CÑ*CÀAÓ*FÓGÐGô tûä—<‘<ò Hð �Q‘4¤§¡¬e¯n©n¼e×>OÑ>OÔQV×QbÑQbÔdi×doÑdoÐpÑpÜ)Ð*<×*CÑ*CÀAÓ*FÓGÐGõ qûð	Hús-   Á(E) Á4B9E) Å)J Å;A3G3Ç3J È	A,I;É;J c                 ó  — | j                   s
t        «       ‚d}|rIt        j                  | j                  gg g d«      \  }}}	 |r| j                  j	                  d«      }|rŒHyy# t
        $ r}}|j                  t        j                  t        j                  t        j                  t        j                  t        j                  fvrt        dj                  |«      «      ‚Y d}~Œ†d}~wt        j                  t        j                  f$ rw}|d   t        j                  t        j                  t        j                  t        j                  t        j                  fvrt        dj                  |«      «      ‚Y d}~�Œd}~ww xY w)z9Clear input buffer, discarding all that is in the buffer.Tr   i   rU   N)r   r   rN   r!   rY   r[   r\   r]   r^   r_   r`   ra   r   r#   r   r   )r,   rf   rg   rL   s       r.   r*   zSerial.reset_input_bufferò   s-  € à�|Š|Ü"Ó$Ð$ð ˆÙÜ Ÿ-™-¨¯©¨¸¸BÀÓB‰KˆE�1�aðGÙØ ŸL™L×-Ñ-¨dÓ3�Eô	 øô
 ò Gð —7‘7¤5§<¡<´·±Ä×ARÑARÔTY×TeÑTeÔgl×grÑgrÐ"sÑsÜ)Ð*;×*BÑ*BÀ1Ó*EÓFÐFô tûä—L‘L¤&§,¡,Ð/ò Gð �Q‘4¤§¡¬e¯n©n¼e×>OÑ>OÔQV×QbÑQbÔdi×doÑdoÐpÑpÜ)Ð*;×*BÑ*BÀ1Ó*EÓFÐFõ qûð	Gús&   ÁA% Á%	FÁ.A3C&Ã&&FÄA,E>Å>Fc                 ó€   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       yy)zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        zignored reset_output_bufferN©r   r   r   r   r1   s    r.   r+   zSerial.reset_output_buffer  s3   € ð
 �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ:Õ;ð r2   c                 óž   — | j                   s
t        «       ‚| j                  r+| j                  j                  dj	                  |«      «       yy)za        Send break condition. Timed, returns to idle state after given
        duration.
        zignored send_break({!r})N)r   r   r   r   r#   )r,   Údurations     r.   Ú
send_breakzSerial.send_break  s>   € ð
 �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ7×>Ñ>¸xÓHÕIð r2   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)zJSet break: Controls TXD. When active, to transmitting is
        possible.z!ignored _update_break_state({!r})N)r   r   r#   Ú_break_stater1   s    r.   Ú_update_break_statezSerial._update_break_state  s4   € ð �;Š;Ø�K‰K×ÑÐ@×GÑGÈ×HYÑHYÓZÕ[ð r2   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)z)Set terminal status line: Request To Sendzignored _update_rts_state({!r})N)r   r   r#   Ú
_rts_stater1   s    r.   r)   zSerial._update_rts_state%  ó0   € à�;Š;Ø�K‰K×ÑÐ>×EÑEÀdÇoÁoÓVÕWð r2   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)z-Set terminal status line: Data Terminal Readyzignored _update_dtr_state({!r})N)r   r   r#   Ú
_dtr_stater1   s    r.   r'   zSerial._update_dtr_state*  r   r2   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z(Read terminal status line: Clear To Sendzreturning dummy for ctsTrv   r1   s    r.   Úctsz
Serial.cts/  ó1   € ð �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ6Ô7Ør2   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z)Read terminal status line: Data Set Readyzreturning dummy for dsrTrv   r1   s    r.   Údsrz
Serial.dsr8  r„   r2   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z)Read terminal status line: Ring Indicatorzreturning dummy for riFrv   r1   s    r.   Úriz	Serial.riA  s1   € ð �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ5Ô6Ør2   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z)Read terminal status line: Carrier Detectzreturning dummy for cd)Trv   r1   s    r.   Úcdz	Serial.cdJ  r„   r2   c                 ó6   — | j                   j                  «       S )z@Get the file handle of the underlying socket for use with select)r!   Úfilenor1   s    r.   rŒ   zSerial.filenoV  s   € à�|‰|×"Ñ"Ó$Ð$r2   N)é   )g      Ð?)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	BAUDRATESr/   r%   r6   r   ÚpropertyrS   re   rs   r*   r+   ry   r|   r)   r'   rƒ   r†   rˆ   rŠ   rŒ   © r2   r.   r   r   -   s¹   „ Ù7ð4€Iò#ò<Bòò,ð: ñó ðó'òR3òjGò2<óJò\òXò
Xð
 ñó ðð ñó ðð ñó ðð ñó ðó%r2   r   Ú__main__zsocket://localhost:7000z{}
z	write...
s   hello
z	read: {}
)"Ú
__future__r   r\   r:   rN   r   r7   r;   ÚImportErrorÚurllib.parseÚparseÚserial.serialutilr   r   r   r   r   r	   ÚDEBUGÚINFOÚWARNINGÚERRORrD   r    r   rŽ   ÚsysÚsÚstdoutrs   r#   Úflushre   r6   r”   r2   r.   ú<module>r£      s  ðõ& 'ã Û Û Û Û ð$Û÷6÷ 6ð
 �]‰]Ø�L‰LØ�‰Ø�]‰]ñ	€ð €ôk%ˆZô k%ð`	 ˆzÒÛÙÐ(Ó)€AØ‡J�J×Ñ�V—]‘] 1Ó%Ô&à‡J�J×Ñ�\Ô"Ø‡G�GˆJÔØ‡G�G„IØ‡J�J×Ñ�\×(Ñ(¨¯©°«Ó3Ô4à‡G�G…Ið øðC
 ò $ß#Ð#ð$ús   œD. Ä.D=Ä<D=