<s> import sys <EOL> import os <EOL> import fcntl <EOL> import termios <EOL> import struct <EOL> import select <EOL> import errno <EOL> import time <EOL> from . serialutil import * <EOL> if ( sys . hexversion < <NUM_LIT> ) : <EOL> import TERMIOS <EOL> else : <EOL> TERMIOS = termios <EOL> if ( sys . hexversion < <NUM_LIT> ) : <EOL> import FCNTL <EOL> else : <EOL> FCNTL = fcntl <EOL> plat = sys . platform . lower ( ) <EOL> if plat [ : <NUM_LIT:5> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % port <EOL> ASYNC_SPD_MASK = <NUM_LIT> <EOL> ASYNC_SPD_CUST = <NUM_LIT> <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> import array <EOL> buf = array . array ( '<STR_LIT:i>' , [ <NUM_LIT:0> ] * <NUM_LIT:32> ) <EOL> FCNTL . ioctl ( port . fd , TERMIOS . TIOCGSERIAL , buf ) <EOL> buf [ <NUM_LIT:6> ] = buf [ <NUM_LIT:7> ] / baudrate <EOL> buf [ <NUM_LIT:4> ] &= ~ ASYNC_SPD_MASK <EOL> buf [ <NUM_LIT:4> ] |= ASYNC_SPD_CUST <EOL> try : <EOL> res = FCNTL . ioctl ( port . fd , TERMIOS . TIOCSSERIAL , buf ) <EOL> except IOError : <EOL> raise ValueError ( '<STR_LIT>' % baudrate ) <EOL> baudrate_constants = { <EOL> <NUM_LIT:0> : <NUM_LIT:0> , <EOL> <NUM_LIT:50> : <NUM_LIT:1> , <EOL> <NUM_LIT> : <NUM_LIT:2> , <EOL> <NUM_LIT> : <NUM_LIT:3> , <EOL> <NUM_LIT> : <NUM_LIT:4> , <EOL> <NUM_LIT> : <NUM_LIT:5> , <EOL> <NUM_LIT:200> : <NUM_LIT:6> , <EOL> <NUM_LIT> : <NUM_LIT:7> , <EOL> <NUM_LIT> : <NUM_LIT:10> , <EOL> <NUM_LIT> : <NUM_LIT:11> , <EOL> <NUM_LIT> : <NUM_LIT:12> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT:15> , <EOL> <NUM_LIT> : <NUM_LIT:16> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> , <EOL> <NUM_LIT> : <NUM_LIT> <EOL> } <EOL> elif plat == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % ( port + <NUM_LIT:1> ) <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % port <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:3> ] == '<STR_LIT>' or plat [ : <NUM_LIT:7> ] == '<STR_LIT>' or plat [ : <NUM_LIT:7> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % port <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:6> ] == '<STR_LIT>' : <EOL> version = os . uname ( ) [ <NUM_LIT:2> ] . split ( '<STR_LIT:.>' ) <EOL> if int ( version [ <NUM_LIT:0> ] ) >= <NUM_LIT:8> : <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> import array <EOL> import fcntl <EOL> buf = array . array ( '<STR_LIT:i>' , [ baudrate ] ) <EOL> IOSSIOSPEED = <NUM_LIT> <EOL> fcntl . ioctl ( port . fd , IOSSIOSPEED , buf , <NUM_LIT:1> ) <EOL> else : <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( "<STR_LIT>" ) <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % port <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:6> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % port <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:4> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % ( port + <NUM_LIT:1> ) <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:2> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % ( port + <NUM_LIT:1> ) <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:5> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % ( ord ( '<STR_LIT:a>' ) + port ) <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> elif plat [ : <NUM_LIT:3> ] == '<STR_LIT>' : <EOL> def device ( port ) : <EOL> return '<STR_LIT>' % ( port ) <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise ValueError ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> else : <EOL> sys . stderr . write ( """<STR_LIT>""" % ( sys . platform , os . name , VERSION ) ) <EOL> def device ( portum ) : <EOL> return '<STR_LIT>' % portnum <EOL> def set_special_baudrate ( port , baudrate ) : <EOL> raise SerialException ( <EOL> "<STR_LIT>" ) <EOL> baudrate_constants = { } <EOL> TIOCMGET = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCMGET or <NUM_LIT> <EOL> TIOCMBIS = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCMBIS or <NUM_LIT> <EOL> TIOCMBIC = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCMBIC or <NUM_LIT> <EOL> TIOCMSET = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCMSET or <NUM_LIT> <EOL> TIOCM_DTR = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_DTR or <NUM_LIT> <EOL> TIOCM_RTS = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_RTS or <NUM_LIT> <EOL> TIOCM_CTS = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_CTS or <NUM_LIT> <EOL> TIOCM_CAR = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_CAR or <NUM_LIT> <EOL> TIOCM_RNG = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_RNG or <NUM_LIT> <EOL> TIOCM_DSR = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_DSR or <NUM_LIT> <EOL> TIOCM_CD = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_CD or TIOCM_CAR <EOL> TIOCM_RI = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCM_RI or TIOCM_RNG <EOL> TIOCINQ = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . FIONREAD or <NUM_LIT> <EOL> TIOCM_zero_str = struct . pack ( '<STR_LIT:I>' , <NUM_LIT:0> ) <EOL> TIOCM_RTS_str = struct . pack ( '<STR_LIT:I>' , TIOCM_RTS ) <EOL> TIOCM_DTR_str = struct . pack ( '<STR_LIT:I>' , TIOCM_DTR ) <EOL> TIOCSBRK = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCSBRK or <NUM_LIT> <EOL> TIOCCBRK = hasattr ( TERMIOS , '<STR_LIT>' ) and TERMIOS . TIOCCBRK or <NUM_LIT> <EOL> class PosixSerial ( SerialBase ) : <EOL> """<STR_LIT>""" <EOL> def open ( self ) : <EOL> """<STR_LIT>""" <EOL> if self . _port is None : <EOL> raise SerialException ( <EOL> "<STR_LIT>" ) <EOL> if self . _isOpen : <EOL> raise SerialException ( "<STR_LIT>" ) <EOL> self . fd = None <EOL> try : <EOL> self . fd = os . open ( self . portstr , os . O_RDWR | <EOL> os . O_NOCTTY | os . O_NONBLOCK ) <EOL> except Exception as msg : <EOL> self . fd = None <EOL> raise SerialException ( <EOL> "<STR_LIT>" % ( self . _port , msg ) ) <EOL> try : <EOL> self . _reconfigurePort ( ) <EOL> except : <EOL> try : <EOL> os . close ( self . fd ) <EOL> except : <EOL> pass <EOL> self . fd = None <EOL> raise <EOL> else : <EOL> self . _isOpen = True <EOL> def _reconfigurePort ( self ) : <EOL> """<STR_LIT>""" <EOL> if self . fd is None : <EOL> raise SerialException ( <EOL> "<STR_LIT>" ) <EOL> custom_baud = None <EOL> vmin = vtime = <NUM_LIT:0> <EOL> if self . _interCharTimeout is not None : <EOL> vmin = <NUM_LIT:1> <EOL> vtime = int ( self . _interCharTimeout * <NUM_LIT:10> ) <EOL> try : <EOL> orig_attr = termios . tcgetattr ( self . fd ) <EOL> iflag , oflag , cflag , lflag , ispeed , ospeed , cc = orig_attr <EOL> except termios . error as msg : <EOL> raise SerialException ( "<STR_LIT>" % msg ) <EOL> cflag |= ( TERMIOS . CLOCAL | TERMIOS . CREAD ) <EOL> lflag &= ~ ( TERMIOS . ICANON | TERMIOS . ECHO | TERMIOS . ECHOE | TERMIOS . ECHOK | TERMIOS . ECHONL | <EOL> TERMIOS . ISIG | TERMIOS . IEXTEN ) <EOL> for flag in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> if hasattr ( TERMIOS , flag ) : <EOL> lflag &= ~ getattr ( TERMIOS , flag ) <EOL> oflag &= ~ ( TERMIOS . OPOST ) <EOL> iflag &= ~ ( TERMIOS . INLCR | TERMIOS . IGNCR | <EOL> TERMIOS . ICRNL | TERMIOS . IGNBRK ) <EOL> if hasattr ( TERMIOS , '<STR_LIT>' ) : <EOL> iflag &= ~ TERMIOS . IUCLC <EOL> if hasattr ( TERMIOS , '<STR_LIT>' ) : <EOL> iflag &= ~ TERMIOS . PARMRK <EOL> try : <EOL> ispeed = ospeed = getattr ( TERMIOS , '<STR_LIT>' % ( self . _baudrate ) ) <EOL> except AttributeError : <EOL> try : <EOL> ispeed = ospeed = baudrate_constants [ self . _baudrate ] <EOL> except KeyError : <EOL> ispeed = ospeed = getattr ( TERMIOS , '<STR_LIT>' ) <EOL> try : <EOL> custom_baud = int ( self . _baudrate ) <EOL> except ValueError : <EOL> raise ValueError ( '<STR_LIT>' % self . _baudrate ) <EOL> else : <EOL> if custom_baud < <NUM_LIT:0> : <EOL> raise ValueError ( '<STR_LIT>' % <EOL> self . _baudrate ) <EOL> cflag &= ~ TERMIOS . CSIZE <EOL> if self . _bytesize == <NUM_LIT:8> : <EOL> cflag |= TERMIOS . CS8 <EOL> elif self . _bytesize == <NUM_LIT:7> : <EOL> cflag |= TERMIOS . CS7 <EOL> elif self . _bytesize == <NUM_LIT:6> : <EOL> cflag |= TERMIOS . CS6 <EOL> elif self . _bytesize == <NUM_LIT:5> : <EOL> cflag |= TERMIOS . CS5 <EOL> else : <EOL> raise ValueError ( '<STR_LIT>' % self . _bytesize ) <EOL> if self . _stopbits == STOPBITS_ONE : <EOL> cflag &= ~ ( TERMIOS . CSTOPB ) <EOL> elif self . _stopbits == STOPBITS_ONE_POINT_FIVE : <EOL> cflag |= ( TERMIOS . CSTOPB ) <EOL> elif self . _stopbits == STOPBITS_TWO : <EOL> cflag |= ( TERMIOS . CSTOPB ) <EOL> else : <EOL> raise ValueError ( <EOL> '<STR_LIT>' % self . _stopbits ) <EOL> iflag &= ~ ( TERMIOS . INPCK | TERMIOS . ISTRIP ) <EOL> if self . _parity == PARITY_NONE : <EOL> cflag &= ~ ( TERMIOS . PARENB | TERMIOS . PARODD ) <EOL> elif self . _parity == PARITY_EVEN : <EOL> cflag &= ~ ( TERMIOS . PARODD ) <EOL> cflag |= ( TERMIOS . PARENB ) <EOL> elif self . _parity == PARITY_ODD : <EOL> cflag |= ( TERMIOS . PARENB | TERMIOS . PARODD ) <EOL> else : <EOL> raise ValueError ( '<STR_LIT>' % self . _parity ) <EOL> if hasattr ( TERMIOS , '<STR_LIT>' ) : <EOL> if self . _xonxoff : <EOL> iflag |= ( TERMIOS . IXON | TERMIOS . IXOFF ) <EOL> else : <EOL> iflag &= ~ ( TERMIOS . IXON | TERMIOS . IXOFF | TERMIOS . IXANY ) <EOL> else : <EOL> if self . _xonxoff : <EOL> iflag |= ( TERMIOS . IXON | TERMIOS . IXOFF ) <EOL> else : <EOL> iflag &= ~ ( TERMIOS . IXON | TERMIOS . IXOFF ) <EOL> if hasattr ( TERMIOS , '<STR_LIT>' ) : <EOL> if self . _rtscts : <EOL> cflag |= ( TERMIOS . CRTSCTS ) <EOL> else : <EOL> cflag &= ~ ( TERMIOS . CRTSCTS ) <EOL> elif hasattr ( TERMIOS , '<STR_LIT>' ) : <EOL> if self . _rtscts : <EOL> cflag |= ( TERMIOS . CNEW_RTSCTS ) <EOL> else : <EOL> cflag &= ~ ( TERMIOS . CNEW_RTSCTS ) <EOL> if vmin < <NUM_LIT:0> or vmin > <NUM_LIT:255> : <EOL> raise ValueError ( '<STR_LIT>' % vmin ) <EOL> cc [ TERMIOS . VMIN ] = vmin <EOL> if vtime < <NUM_LIT:0> or vtime > <NUM_LIT:255> : <EOL> raise ValueError ( '<STR_LIT>' % vtime ) <EOL> cc [ TERMIOS . VTIME ] = vtime <EOL> if [ iflag , oflag , cflag , lflag , ispeed , ospeed , cc ] != orig_attr : <EOL> termios . tcsetattr ( self . fd , TERMIOS . TCSANOW , [ <EOL> iflag , oflag , cflag , lflag , ispeed , ospeed , cc ] ) <EOL> if custom_baud is not None : <EOL> set_special_baudrate ( self , custom_baud ) <EOL> def close ( self ) : <EOL> """<STR_LIT>""" <EOL> if self . _isOpen : <EOL> if self . fd is not None : <EOL> os . close ( self . fd ) <EOL> self . fd = None <EOL> self . _isOpen = False <EOL> def makeDeviceName ( self , port ) : <EOL> return device ( port ) <EOL> def inWaiting ( self ) : <EOL> """<STR_LIT>""" <EOL> s = fcntl . ioctl ( self . fd , TIOCINQ , TIOCM_zero_str ) <EOL> return struct . unpack ( '<STR_LIT:I>' , s ) [ <NUM_LIT:0> ] <EOL> def read ( self , size = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> read = bytearray ( ) <EOL> while len ( read ) < size : <EOL> ready , _ , _ = select . select ( [ self . fd ] , [ ] , [ ] , self . _timeout ) <EOL> if not ready : <EOL> break <EOL> buf = os . read ( self . fd , size - len ( read ) ) <EOL> if not buf : <EOL> raise SerialException ( <EOL> '<STR_LIT>' ) <EOL> read . extend ( buf ) <EOL> return bytes ( read ) <EOL> def write ( self , data ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> t = len ( data ) <EOL> d = data <EOL> if self . _writeTimeout is not None and self . _writeTimeout > <NUM_LIT:0> : <EOL> timeout = time . time ( ) + self . _writeTimeout <EOL> else : <EOL> timeout = None <EOL> while t > <NUM_LIT:0> : <EOL> try : <EOL> n = os . write ( self . fd , d ) <EOL> if timeout : <EOL> timeleft = timeout - time . time ( ) <EOL> if timeleft < <NUM_LIT:0> : <EOL> raise writeTimeoutError <EOL> _ , ready , _ = select . select ( [ ] , [ self . fd ] , [ ] , timeleft ) <EOL> if not ready : <EOL> raise writeTimeoutError <EOL> d = d [ n : ] <EOL> t = t - n <EOL> except OSError as v : <EOL> if v . errno != errno . EAGAIN : <EOL> raise SerialException ( '<STR_LIT>' % ( v , ) ) <EOL> return len ( data ) <EOL> def flush ( self ) : <EOL> """<STR_LIT>""" <EOL> self . drainOutput ( ) <EOL> def flushInput ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> termios . tcflush ( self . fd , TERMIOS . TCIFLUSH ) <EOL> def flushOutput ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> termios . tcflush ( self . fd , TERMIOS . TCOFLUSH ) <EOL> def sendBreak ( self , duration = <NUM_LIT> ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> termios . tcsendbreak ( self . fd , int ( duration / <NUM_LIT> ) ) <EOL> def setBreak ( self , level = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> if self . fd is None : <EOL> raise portNotOpenError <EOL> if level : <EOL> fcntl . ioctl ( self . fd , TIOCSBRK ) <EOL> else : <EOL> fcntl . ioctl ( self . fd , TIOCCBRK ) <EOL> def setRTS ( self , level = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> if level : <EOL> fcntl . ioctl ( self . fd , TIOCMBIS , TIOCM_RTS_str ) <EOL> else : <EOL> fcntl . ioctl ( self . fd , TIOCMBIC , TIOCM_RTS_str ) <EOL> def setDTR ( self , level = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> if level : <EOL> fcntl . ioctl ( self . fd , TIOCMBIS , TIOCM_DTR_str ) <EOL> else : <EOL> fcntl . ioctl ( self . fd , TIOCMBIC , TIOCM_DTR_str ) <EOL> def getCTS ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> s = fcntl . ioctl ( self . fd , TIOCMGET , TIOCM_zero_str ) <EOL> return struct . unpack ( '<STR_LIT:I>' , s ) [ <NUM_LIT:0> ] & TIOCM_CTS != <NUM_LIT:0> <EOL> def getDSR ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> s = fcntl . ioctl ( self . fd , TIOCMGET , TIOCM_zero_str ) <EOL> return struct . unpack ( '<STR_LIT:I>' , s ) [ <NUM_LIT:0> ] & TIOCM_DSR != <NUM_LIT:0> <EOL> def getRI ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> s = fcntl . ioctl ( self . fd , TIOCMGET , TIOCM_zero_str ) <EOL> return struct . unpack ( '<STR_LIT:I>' , s ) [ <NUM_LIT:0> ] & TIOCM_RI != <NUM_LIT:0> <EOL> def getCD ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> s = fcntl . ioctl ( self . fd , TIOCMGET , TIOCM_zero_str ) <EOL> return struct . unpack ( '<STR_LIT:I>' , s ) [ <NUM_LIT:0> ] & TIOCM_CD != <NUM_LIT:0> <EOL> def drainOutput ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> termios . tcdrain ( self . fd ) <EOL> def nonblocking ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> fcntl . fcntl ( self . fd , FCNTL . F_SETFL , os . O_NONBLOCK ) <EOL> def fileno ( self ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> return self . fd <EOL> def flowControl ( self , enable ) : <EOL> """<STR_LIT>""" <EOL> if not self . _isOpen : <EOL> raise portNotOpenError <EOL> if enable : <EOL> termios . tcflow ( self . fd , TERMIOS . TCION ) <EOL> else : <EOL> termios . tcflow ( self . fd , TERMIOS . TCIOFF ) <EOL> try : <EOL> import io <EOL> except ImportError : <EOL> class Serial ( PosixSerial , FileLike ) : <EOL> pass <EOL> else : <EOL> class Serial ( PosixSerial , io . RawIOBase ) : <EOL> pass <EOL> class PosixPollSerial ( Serial ) : <EOL> """<STR_LIT>""" <EOL> def read ( self , size = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> if self . fd is None : <EOL> raise portNotOpenError <EOL> read = bytearray ( ) <EOL> poll = select . poll ( ) <EOL> poll . register ( self . fd , select . POLLIN | select . POLLERR | <EOL> select . POLLHUP | select . POLLNVAL ) <EOL> if size > <NUM_LIT:0> : <EOL> while len ( read ) < size : <EOL> for fd , event in poll . poll ( self . _timeout * <NUM_LIT:1000> ) : <EOL> if event & ( select . POLLERR | select . POLLHUP | select . POLLNVAL ) : <EOL> raise SerialException ( '<STR_LIT>' ) <EOL> buf = os . read ( self . fd , size - len ( read ) ) <EOL> read . extend ( buf ) <EOL> if ( ( self . _timeout is not None and self . _timeout >= <NUM_LIT:0> ) or <EOL> ( self . _interCharTimeout is not None and self . _interCharTimeout > <NUM_LIT:0> ) ) and not buf : <EOL> break <EOL> return bytes ( read ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> s = Serial ( <NUM_LIT:0> , <EOL> baudrate = <NUM_LIT> , <EOL> bytesize = EIGHTBITS , <EOL> parity = PARITY_EVEN , <EOL> stopbits = STOPBITS_ONE , <EOL> timeout = <NUM_LIT:3> , <EOL> xonxoff = <NUM_LIT:0> , <EOL> rtscts = <NUM_LIT:0> , <EOL> ) <EOL> s . setRTS ( <NUM_LIT:1> ) <EOL> s . setDTR ( <NUM_LIT:1> ) <EOL> s . flushInput ( ) <EOL> s . flushOutput ( ) <EOL> s . write ( '<STR_LIT:hello>' ) <EOL> sys . stdout . write ( '<STR_LIT>' % s . read ( <NUM_LIT:5> ) ) <EOL> sys . stdout . write ( '<STR_LIT>' % s . inWaiting ( ) ) <EOL> del s </s>
