Ë
    �Úa_)  ã                   ó–  — 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mZmZmZmZmZmZ ej$                  ej&                  ej(                  ej*                  dœZ G d„ de«      Zedk(  r¼d dlZ ed«      Zej6                  j9                  d	j;                  e«      «       ej6                  j9                  d
«       ej9                  d«       ej=                  «        ej6                  j9                  dj;                  ej?                  d«      «      «       ejA                  «        yy# e$ r
 d dlmZ Y �Œw xY w# e$ r d dl
Z	Y �Œ*w xY w)é    )Úabsolute_importN)Ú
SerialBaseÚSerialExceptionÚto_bytesÚ	iterbytesÚSerialTimeoutExceptionÚPortNotOpenError)ÚdebugÚinfoÚwarningÚerrorc                   óÚ   ‡ — e Zd ZdZdZˆ fd„Zd„ Zˆ fd„Zd„ Zd„ Z	e
d„ «       Zdd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Ze
d„ «       Zd„ Zd„ Zd„ Ze
d„ «       Ze
d„ «       Ze
d„ «       Ze
d„ «       Zˆ xZS )ÚSerialzSSerial port implementation that simulates a loop back connection in plain software.)é2   éK   én   é†   é–   éÈ   i,  iX  i°  i  i`	  iÀ  i€%  i K  i –  i á  i Â c                 ód   •— d| _         d | _        d | _        d| _        t	        t
        | �  |i |¤Ž y )Ni   F)Úbuffer_sizeÚqueueÚloggerÚ_cancel_writeÚsuperr   Ú__init__)ÚselfÚargsÚkwargsÚ	__class__s      €úA/usr/lib/python3/dist-packages/serial/urlhandler/protocol_loop.pyr   zSerial.__init__/   s5   ø€ ØˆÔØˆŒ
ØˆŒØ"ˆÔÜŒf�dÑ$ dÐ5¨fÓ5ó    c                 óÊ  — | j                   rt        d«      ‚d| _        t        j                  | j
                  «      | _        | j                  €t        d«      ‚| j                  | j                  «       | j                  «        d| _         | j                  s| j                  «        | j                  s| j                  «        | j                  «        | j                  «        y)zx        Open port with current settings. This may throw a SerialException
        if the port cannot be opened.
        zPort is already open.Nz.Port must be configured before it can be used.T)Úis_openr   r   r   ÚQueuer   Ú_portÚfrom_urlÚportÚ_reconfigure_portÚ_dsrdtrÚ_update_dtr_stateÚ_rtsctsÚ_update_rts_stateÚreset_input_bufferÚreset_output_buffer©r   s    r!   ÚopenzSerial.open6   s¯   € ð
 �<Š<Ü!Ð"9Ó:Ð:ØˆŒÜ—[‘[ ×!1Ñ!1Ó2ˆŒ
à�:‰:ÐÜ!Ð"RÓSÐSð 	�‰�d—i‘iÔ ð 	×ÑÔ àˆŒØ�|Š|Ø×"Ñ"Ô$Ø�|Š|Ø×"Ñ"Ô$Ø×ÑÔ!Ø× Ñ Õ"r"   c                 óº   •— | j                   r#d| _         	 | j                  j                  d «       t        t
        | �  «        y # t        j                  $ r Y Œ(w xY w)NF)r$   r   Ú
put_nowaitÚFullr   r   Úclose)r   r    s    €r!   r5   zSerial.closeQ   sO   ø€ Ø�<Š<Ø ˆDŒLðØ—
‘
×%Ñ% dÔ+ô 	Œf�dÑ!Õ#øô —:‘:ò Ùðús   –A ÁAÁAc                 ó  — t        | j                  t        j                  «      rd| j                  cxk  rdk  s&n t	        dj                  | j                  «      «      ‚| j                  r| j                  j                  d«       yy)zx        Set communication parameters on opened port. For the loop://
        protocol all settings are ignored!
        r   l        zinvalid baudrate: {!r}z_reconfigure_port()N)Ú
isinstanceÚ	_baudrateÚnumbersÚIntegralÚ
ValueErrorÚformatr   r   r0   s    r!   r)   zSerial._reconfigure_portZ   sc   € ô ˜$Ÿ.™.¬'×*:Ñ*:Ô;À1ÀtÇ~Á~ÔC_ÐX_ÔC_ÜÐ5×<Ñ<¸T¿^¹^ÓLÓMÐMØ�;Š;Ø�K‰K×ÑÐ2Õ3ð r"   c                 ór  — 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	                  |«      «      ‚ y
# t        $ r}t        d	j	                  |«      «      ‚d
}~ww xY w)z(extract host and port from an URL stringÚloopznexpected a string in the form "loop://[?logging={debug|info|warning|error}]": not starting with loop:// ({!r})TÚloggingzpySerial.loopr   zenabled loggingzunknown option: {!r}zPexpected a string in the form "loop://[?logging={debug|info|warning|error}]": {}N)ÚurlparseÚurlsplitÚschemer   r<   Úparse_qsÚqueryÚitemsr?   ÚbasicConfigÚ	getLoggerr   ÚsetLevelÚLOGGER_LEVELSr
   r;   )r   ÚurlÚpartsÚoptionÚvaluesÚes         r!   r'   zSerial.from_urle   s  € ä×!Ñ! #Ó&ˆØ�<‰<˜6Ò!Ü!ð&ç&,¡f¨U¯\©\Ó&:ó<ð <ð	Pä"*×"3Ñ"3°E·K±KÀÓ"F×"LÑ"LÓ"Nò L‘�˜Ø˜YÒ&Ü×'Ñ'Ô)Ü")×"3Ñ"3°OÓ"D�D”KØ—K‘K×(Ñ(¬°v¸a±yÑ)AÔBØ—K‘K×%Ñ%Ð&7Õ8ä$Ð%;×%BÑ%BÀ6Ó%JÓKÐKñLøô ò 	PÜ!ðEßEKÁVÈAÃYóPð Pûð	Pús   Á
CD Ä	D6ÄD1Ä1D6c                 óþ   — | j                   s
t        «       ‚| j                  rB| j                  j                  dj	                  | j
                  j                  «       «      «       | j
                  j                  «       S )z9Return the number of bytes currently in the input buffer.zin_waiting -> {:d}©r$   r	   r   r
   r<   r   Úqsizer0   s    r!   Ú
in_waitingzSerial.in_waiting~   s[   € ð �|Š|Ü"Ó$Ð$Ø�;Š;ð �K‰K×ÑÐ2×9Ñ9¸$¿*¹*×:JÑ:JÓ:LÓMÔNØ�z‰z×ÑÓ!Ð!r"   c                 óœ  — | j                   s
t        «       ‚| j                  �1| j                  dk7  r"t        j                  «       | j                  z   }nd}t	        «       }|dkD  rª| j                   rž	 | j
                  j                  | j                  ¬«      }|�||z  }|dz  }n	 t        |«      S |rJt        j                  «       |kD  r3| j                  r| j                  j                  d«       	 t        |«      S |dkD  r| j                   rŒžt        |«      S # t
        j                  $ r | j                  dk(  rY t        |«      S Y Œ™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.
        Nr   ©Útimeouté   zread timeout)r$   r	   Ú_timeoutÚtimeÚ	bytearrayr   ÚgetÚEmptyr   r   Úbytes)r   ÚsizerU   ÚdataÚbs        r!   ÚreadzSerial.read‰   s#  € ð �|Š|Ü"Ó$Ð$Ø�=‰=Ð$¨¯©¸!Ò);Ü—i‘i“k D§M¡MÑ1‰GàˆGÜ‹{ˆØ�QŠh˜4Ÿ<š<ð
Ø—J‘J—N‘N¨4¯=©=�NÓ9�ð
 �=Ø˜A‘I�DØ˜A‘I‘Dàô �T‹{Ðñ	 œ4Ÿ9™9›;¨Ò0Ø—;’;Ø—K‘K×$Ñ$ ^Ô4ØÜ�T‹{Ðð% �QŠh˜4Ÿ<›<ô$ �T‹{Ðøô —;‘;ò Ø—=‘= AÒ%Øô �T‹{Ðñ &ðús   Á2&D Ä"EÅ
Ec                 ó:   — | j                   j                  d «       y )N)r   r3   r0   s    r!   Úcancel_readzSerial.cancel_readª   s   € Ø�
‰
×Ñ˜dÕ#r"   c                 ó   — d| _         y )NT)r   r0   s    r!   Úcancel_writezSerial.cancel_write­   s
   € Ø!ˆÕr"   c                 ó  — d| _         | j                  s
t        «       ‚t        |«      }dt	        |«      z  | j
                  z  }| j                  �z|| j                  kD  rk| j                  }|dkD  rB| j                   s6t        j                  t        |d«      «       |dz  }|dkD  r| j                   sŒ6| j                   ryt        d«      ‚t        |«      D ])  }| j                  j                  || j                  ¬«       Œ+ t	        |«      S )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.
        Fg      $@r   g      à?zWrite timeoutrT   )r   r$   r	   r   Úlenr8   Ú_write_timeoutrX   ÚsleepÚminr   r   r   Úput)r   r^   Útime_used_to_sendÚ	time_leftÚbytes        r!   ÚwritezSerial.write°   sñ   € ð #ˆÔØ�|Š|Ü"Ó$Ð$Ü˜‹~ˆà ¤3 t£9Ñ,¨t¯~©~Ñ=Ðð ×ÑÐ*Ð/@À4×CVÑCVÒ/Và×+Ñ+ˆIØ˜a’-¨×(:Ò(:Ü—
‘
œ3˜y¨#Ó.Ô/Ø˜SÑ �	ð ˜a’-¨×(:Ó(:ð ×!Ò!ØÜ(¨Ó9Ð9Ü˜d“Oò 	>ˆDØ�J‰J�N‰N˜4¨×)<Ñ)<ˆNÕ=ð	>ä�4‹yÐr"   c                 óR  — | j                   s
t        «       ‚| j                  r| j                  j                  d«       	 | j                  j                  «       r6| j                  j                  «        | j                  j                  «       rŒ5yy# t        j                  $ r Y yw xY w)z9Clear input buffer, discarding all that is in the buffer.zreset_input_buffer()N©r$   r	   r   r   r   rQ   Ú
get_nowaitr[   r0   s    r!   r.   zSerial.reset_input_bufferË   sy   € à�|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ3Ô4ð	Ø—*‘*×"Ñ"Ô$Ø—
‘
×%Ñ%Ô'ð —*‘*×"Ñ"×$øä�{‰{ò 	Ùð	úó   ¿AB ÂB&Â%B&c                 óR  — | j                   s
t        «       ‚| j                  r| j                  j                  d«       	 | j                  j                  «       r6| j                  j                  «        | j                  j                  «       rŒ5yy# t        j                  $ r Y yw xY w)zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        zreset_output_buffer()Nrp   r0   s    r!   r/   zSerial.reset_output_buffer×   s{   € ð
 �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ4Ô5ð	Ø—*‘*×"Ñ"Ô$Ø—
‘
×%Ñ%Ô'ð —*‘*×"Ñ"×$øä�{‰{ò 	Ùð	úrr   c                 óþ   — | j                   s
t        «       ‚| j                  rB| j                  j                  dj	                  | j
                  j                  «       «      «       | j
                  j                  «       S )z0Return how many bytes the in the outgoing bufferzout_waiting -> {:d}rP   r0   s    r!   Úout_waitingzSerial.out_waitingæ   s[   € ð �|Š|Ü"Ó$Ð$Ø�;Š;ð �K‰K×ÑÐ3×:Ñ:¸4¿:¹:×;KÑ;KÓ;MÓNÔOØ�z‰z×ÑÓ!Ð!r"   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)z[        Set break: Controls TXD. When active, to transmitting is
        possible.
        z_update_break_state({!r})N)r   r   r<   Ú_break_stater0   s    r!   Ú_update_break_statezSerial._update_break_stateñ   s4   € ð
 �;Š;Ø�K‰K×ÑÐ8×?Ñ?À×@QÑ@QÓRÕSð r"   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)z)Set terminal status line: Request To Sendz'_update_rts_state({!r}) -> state of CTSN)r   r   r<   Ú
_rts_stater0   s    r!   r-   zSerial._update_rts_stateù   ó0   € à�;Š;Ø�K‰K×ÑÐF×MÑMÈdÏoÉoÓ^Õ_ð r"   c                 ó†   — | j                   r5| j                   j                  dj                  | j                  «      «       yy)z-Set terminal status line: Data Terminal Readyz'_update_dtr_state({!r}) -> state of DSRN©r   r   r<   Ú
_dtr_stater0   s    r!   r+   zSerial._update_dtr_stateþ   r{   r"   c                 óÆ   — | j                   s
t        «       ‚| j                  r4| j                  j                  dj	                  | j
                  «      «       | j
                  S )z(Read terminal status line: Clear To SendzCTS -> state of RTS ({!r}))r$   r	   r   r   r<   rz   r0   s    r!   Úctsz
Serial.cts  sG   € ð �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ9×@Ñ@ÀÇÁÓQÔRØ�‰Ðr"   c                 óš   — | j                   r4| j                   j                  dj                  | j                  «      «       | j                  S )z)Read terminal status line: Data Set ReadyzDSR -> state of DTR ({!r})r}   r0   s    r!   Údsrz
Serial.dsr  s7   € ð �;Š;Ø�K‰K×ÑÐ9×@Ñ@ÀÇÁÓQÔRØ�‰Ðr"   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z)Read terminal status line: Ring Indicatorzreturning dummy for RIF©r$   r	   r   r   r0   s    r!   Úriz	Serial.ri  s1   € ð �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ5Ô6Ør"   c                 ó~   — | j                   s
t        «       ‚| j                  r| j                  j                  d«       y)z)Read terminal status line: Carrier Detectzreturning dummy for CDTr„   r0   s    r!   Úcdz	Serial.cd  s1   € ð �|Š|Ü"Ó$Ð$Ø�;Š;Ø�K‰K×ÑÐ5Ô6Ør"   )rV   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	BAUDRATESr   r1   r5   r)   r'   ÚpropertyrR   r`   rb   rd   rn   r.   r/   ru   rx   r-   r+   r€   r‚   r…   r‡   Ú__classcell__)r    s   @r!   r   r   )   sÐ   ø„ Ù]ð4€Iô6ò#ô6$ò	4òPð2 ñ"ó ð"óòB$ò"òò6
òð ñ"ó ð"òTò`ò
`ð
 ñó ðð ñó ðð ñó ðð ñó ôr"   r   Ú__main__zloop://z{}
z	write...
zhello
zread: {!r}
é   )!Ú
__future__r   r?   r9   rX   r@   ÚImportErrorÚurllib.parseÚparser   r%   Úserial.serialutilr   r   r   r   r   r	   ÚDEBUGÚINFOÚWARNINGÚERRORrI   r   rˆ   ÚsysÚsÚstdoutrn   r<   Úflushr`   r5   © r"   r!   ú<module>rŸ      s  ðõ  'ã Û Û ð$ÛðÛ÷ y× xð �]‰]Ø�L‰LØ�‰Ø�]‰]ñ	€ôzˆZô zðB ˆzÒÛÙˆyÓ€AØ‡J�J×Ñ�V—]‘] 1Ó%Ô&à‡J�J×Ñ�\Ô"Ø‡G�GˆIÔØ‡G�G„IØ‡J�J×Ñ�^×*Ñ*¨1¯6©6°!«9Ó5Ô6à‡G�G…Ið øðg ò $ß#Ð#ð$ûð ò Þðús"   ”D) ™D; Ä)D8Ä7D8Ä;	EÅE