Ȧ^_7ddlmZddlZddlZddlZddlZddlZ ddlZddl m Z m Z mZmZmZmZej$ej&ej(ej*dZdZGdde Zedk(rddlZed Zej8j;d j=eej8j;d ej;d ej?ej8j;d j=ejAdejCyy#e$r ddl m ZYwxYw))absolute_importN) SerialBaseSerialExceptionto_bytesPortNotOpenErrorSerialTimeoutExceptionTimeout)debuginfowarningerrorceZdZdZdZdZdZdZdZe dZ ddZ d Z d Z d Zdd Zd ZdZdZe dZe dZe dZe dZdZy)Serialz-Serial port implementation for plain sockets.)2Kni,iXiii` ii%iKiiicpd|_|j td|jr td t j |j |jt|_ |jjd|jd|_|js|j|j s|j#|j%|j'y#t$r1}d|_ tdj|j|d}~wwxYw)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.)timeoutzCould not open port {}: {}FT)logger_portris_opensocketcreate_connectionfrom_urlportstr POLL_TIMEOUT_socket Exceptionformat setblocking_reconfigure_port_dsrdtr_update_dtr_state_rtscts_update_rts_statereset_input_bufferreset_output_buffer)selfmsgs C/usr/lib/python3/dist-packages/serial/urlhandler/protocol_socket.pyopenz Serial.open3s  :: !"RS S <<!"9: : Z!33DMM$,,4OYefDL   '   ||  " " $||  " " $ !   " ZDL!">"E"EdllTW"XY Y Zs9C;; D5,D00D5c|j td|jr|jjdyy)zz Set communication parameters on opened port. For the socket:// protocol all settings are ignored! NzCan only operate on open portsz!ignored port configuration change)r!rrr r,s r.r%zSerial._reconfigure_portQs9 << !"BC C ;; KK  @ A c|jrt|jrK |jjtj|jj d|_d|_t jdyy#Y)xYw)z Close portNFg333333?)rr!shutdownr SHUT_RDWRclosetimesleepr1s r.r6z Serial.close[sg <<||LL))&*:*:;LL&&( $  DL JJsO  s ABBctj|}|jdk7r$tdj |j tj |j djD]\}}|dk(rotjtjd|_ |jjt|d|jjdztdj |d|j cxkrd kstd td  |j"|j fS#t$r}td j |d }~wwxYw) z(extract host and port from an URL stringrzexpected a string in the form "socket://:[?logging={debug|info|warning|error}]": not starting with socket:// ({!r})TloggingzpySerial.socketrzenabled loggingzunknown option: {!r}izport not in range 0...65535z_expected a string in the form "socket://:[?logging={debug|info|warning|error}]": {}N)urlparseurlsplitschemerr#parse_qsqueryitemsr: basicConfig getLoggerrsetLevel LOGGER_LEVELSr ValueErrorporthostname)r,urlpartsoptionvalueses r.rzSerial.from_urljs`!!#& <<8 #!55;VELL5IK K _"*"3"3EKK"F"L"L"N LY&'')")"3"34E"FDKKK((vay)ABKK%%&78$%;%B%B6%JKK L *U* !>??+ !>??+ ++  _!TTZTZ[\T]_ _ _s C/E E:E55E:c|js ttj|jgggd\}}}t |S)z9Return the number of bytes currently in the input buffer.r)rrselectr!len)r,lrlwlxs r. in_waitingzSerial.in_waitings?||"$ $]]DLL>2r1= B2wr2cH|js tt}t|j}t ||kr t j |jggg|j\}}}|s t/|S|jj|t |z }|s td|j||j-r t/|St ||krt/|S#t$r}}|jtjtjtj tj"tj$fvrtdj'|Yd}~d}~wt j(t*j(f$rw}|dtjtjtj tj"tj$fvrtdj'|Yd}~Od}~wwxYw)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. zsocket disconnectedread failed: {}Nr)rr bytearrayr _timeoutrOrNr! time_leftrecvrextendOSErrorerrnoEAGAINEALREADY EWOULDBLOCK EINPROGRESSEINTRr#r rexpiredbytes)r,sizereadrready_bufrLs r.rez Serial.reads ||"$ ${$--($i$ G$mmT\\NBGDUDUDWX q! *T{)ll''s4y(89)*?@@ C  T{;$i$:T{ G775<<ARARTYTeTeglgrgr"ss)*;*B*B1*EFFtLL&,,/ GQ4 enne>O>OQVQbQbdidodopp)*;*B*B1*EFFq  Gs-7DAD H! A3F&H!*A,HH!c|js tt|}t|x}}t |j }|dkDr |j j|}|jr|S|js]|jr tdtjg|j gg|j\}}}|sQtd|jJtjg|j ggd\}}}|s td||d}||z}|js|jr td|dkDr|t|z S#t$rt$r}} | j t j"t j$t j&t j(t j*fvrtdj-| Yd} ~ d} ~ wtj.$rw} | dt j"t j$t j&t j(t j*fvrtdj-| Yd} ~ Nd} ~ wwxYw)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. rz Write timeoutNzwrite failed (select)zwrite failed: {})rrrrOr _write_timeoutr!sendis_non_blocking is_infiniterbrrNrXrr[r\r]r^r_r`rar#r ) r,datadtx_lenlengthrnrgrfrLs r.writez Serial.writes& ||"$ $ TNa& $--.qj# HLL%%a(**H ,,(4_EE"(--T\\NBHYHYH["\KAua 4_EE",,.666"(--T\\NB"MKAua -.EFFabE! **w/@,_==MqjNA!#  H775<<ARARTYTeTeglgrgr"ss)*<*C*CA*FGGt<< HQ4 enne>O>OQVQbQbdidodopp)*<*C*CA*FGGq  Hs- (E)4B9E))J;A3G33J A,I;;Jc |js td}|rItj|jgggd\}}} |r|jj d}|rHyy#t $r}}|j t jt jt jt jt jfvrtdj|Yd}~d}~wtjtjf$rw}|dt jt jt jt jt jfvrtdj|Yd}~d}~wwxYw)z9Clear input buffer, discarding all that is in the buffer.TrirUN)rrrNr!rYr[r\r]r^r_r`rarr#r r)r,rfrgrLs r.r*zSerial.reset_input_buffers-||"$ $ --BBKE1a G LL--d3E   G775<<ARARTYTeTeglgrgr"ss)*;*B*B1*EFFtLL&,,/ GQ4 enne>O>OQVQbQbdidodopp)*;*B*B1*EFFq  Gs&A%% F.A3C&&&F A,E>>Fc|js t|jr|jjdyy)zs Clear output buffer, aborting the current output and discarding all that is in the buffer. zignored reset_output_bufferNrrrr r1s r.r+zSerial.reset_output_buffer s3 ||"$ $ ;; KK  : ; r2c|js t|jr+|jjdj |yy)za Send break condition. Timed, returns to idle state after given duration. zignored send_break({!r})N)rrrr r#)r,durations r. send_breakzSerial.send_breaks> ||"$ $ ;; KK  7>>xH I r2c|jr5|jjdj|jyy)zJSet break: Controls TXD. When active, to transmitting is possible.z!ignored _update_break_state({!r})N)rr r# _break_stater1s r._update_break_statezSerial._update_break_states4 ;; KK  @GGHYHYZ [ r2c|jr5|jjdj|jyy)z)Set terminal status line: Request To Sendzignored _update_rts_state({!r})N)rr r# _rts_stater1s r.r)zSerial._update_rts_state%0 ;; KK  >EEdooV W r2c|jr5|jjdj|jyy)z-Set terminal status line: Data Terminal Readyzignored _update_dtr_state({!r})N)rr r# _dtr_stater1s r.r'zSerial._update_dtr_state*rr2c~|js t|jr|jjdy)z(Read terminal status line: Clear To Sendzreturning dummy for ctsTrvr1s r.ctsz Serial.cts/1||"$ $ ;; KK  6 7r2c~|js t|jr|jjdy)z)Read terminal status line: Data Set Readyzreturning dummy for dsrTrvr1s r.dsrz Serial.dsr8rr2c~|js t|jr|jjdy)z)Read terminal status line: Ring Indicatorzreturning dummy for riFrvr1s r.riz Serial.riAs1||"$ $ ;; KK  5 6r2c~|js t|jr|jjdy)z)Read terminal status line: Carrier Detectzreturning dummy for cd)Trvr1s r.cdz Serial.cdJrr2c6|jjS)z@Get the file handle of the underlying socket for use with select)r!filenor1s r.rz Serial.filenoVs||""$$r2N))g?)__name__ __module__ __qualname____doc__ BAUDRATESr/r%r6rpropertyrSrersr*r+ryr|r)r'rrrrrr2r.rr-s74I#<B ,:'R3jG2<J\ X X %r2r__main__zsocket://localhost:7000z{} z write... shello z read: {} )" __future__rr\r:rNrr7r; ImportError urllib.parseparseserial.serialutilrrrrrr DEBUGINFOWARNINGERRORrDr rrsyssstdoutrsr#flushrer6rr2r.rs &'  $66 ]] LL ]]   k%Zk%`  z()AJJV]]1%&JJ\"GGJGGIJJ\((34GGIC $##$sD.. D=<D=