diff options
-rw-r--r-- | pyserial/serial/sermsdos.py | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/pyserial/serial/sermsdos.py b/pyserial/serial/sermsdos.py new file mode 100644 index 0000000..c16d1bd --- /dev/null +++ b/pyserial/serial/sermsdos.py @@ -0,0 +1,229 @@ +# sermsdos.py +# +# History: +# +# 3rd September 2002 Dave Haynes +# 1. First defined +# +# Although this code should run under the latest versions of +# Python, on DOS-based platforms such as Windows 95 and 98, +# it has been specifically written to be compatible with +# PyDOS, available at: +# http://www.python.org/ftp/python/wpy/dos.html +# +# PyDOS is a stripped-down version of Python 1.5.2 for +# DOS machines. Therefore, in making changes to this file, +# please respect Python 1.5.2 syntax. In addition, please +# limit the width of this file to 60 characters. +# +# Note also that the modules in PyDOS contain fewer members +# than other versions, so we are restricted to using the +# following: +# +# In module os: +# ------------- +# environ, chdir, getcwd, getpid, umask, fdopen, close, +# dup, dup2, fstat, lseek, open, read, write, O_RDONLY, +# O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC, +# access, F_OK, R_OK, W_OK, X_OK, chmod, listdir, mkdir, +# remove, rename, renames, rmdir, stat, unlink, utime, +# execl, execle, execlp, execlpe, execvp, execvpe, _exit, +# system. +# +# In module os.path: +# ------------------ +# curdir, pardir, sep, altsep, pathsep, defpath, linesep. +# + +import os +import sys +import string + +BAUD_RATES = { + 110: "11", + 150: "15", + 300: "30", + 600: "60", + 1200: "12", + 2400: "24", + 4800: "48", + 9600: "96", + 19200: "19"} + +(PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, +PARITY_SPACE) = range(5) +(STOPBITS_ONE, STOPBITS_ONEANDAHALF, +STOPBITS_TWO) = (1, 1.5, 2) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5,6,7,8) +(RETURN_ERROR, RETURN_BUSY, RETURN_RETRY, RETURN_READY, +RETURN_NONE) = ('E', 'B', 'P', 'R', 'N') +portNotOpenError = ValueError('port not open') + +class SerialException(Exception): + pass + +class Serial: + """ + port: number of device; numbering starts at + zero. if everything fails, the user can + specify a device string, note that this + isn't portable any more + baudrate: baud rate + bytesize: number of databits + parity: enable parity checking + stopbits: number of stopbits + timeout: set a timeout (None for waiting forever) + xonxoff: enable software flow control + rtscts: enable RTS/CTS flow control + retry: DOS retry mode + """ + def __init__(self, + port, + baudrate = 9600, + bytesize = EIGHTBITS, + parity = PARITY_NONE, + stopbits = STOPBITS_ONE, + timeout = None, + xonxoff = 0, + rtscts = 0, + retry = RETURN_RETRY + ): + + if type(port) == type(''): + #strings are taken directly + self.portstr = port + else: + #numbers are transformed to a string + self.portstr = 'COM%d' % (port+1) + + self.baud = BAUD_RATES[baudrate] + self.bytesize = str(bytesize) + + if parity == PARITY_NONE: + self.parity = 'N' + elif parity == PARITY_EVEN: + self.parity = 'E' + elif parity == PARITY_ODD: + self.parity = 'O' + elif parity == PARITY_MARK: + self.parity = 'M' + elif parity == PARITY_SPACE: + self.parity = 'S' + + self.stop = str(stopbits) + self.retry = retry + self.filename = "sermsdos.tmp" + + self._config(self.portstr, self.baud, self.parity, + self.bytesize, self.stop, self.retry, self.filename) + + def __del__(self): + self.close() + + def close(self): + pass + + def _config(self, port, baud, parity, data, stop, retry, + filename): + comString = string.join(("MODE ", port, ":" + , " BAUD= ", baud, " PARITY= ", parity + , " DATA= ", data, " STOP= ", stop, " RETRY= ", + retry, " > ", filename ), '') + os.system(comString) + + def setBaudrate(self, baudrate): + self._config(self.portstr, BAUD_RATES[baudrate], + self.parity, self.bytesize, self.stop, self.retry, + self.filename) + + def inWaiting(self): + """returns the number of bytes waiting to be read""" + raise NotImplementedError + + def read(self, num = 1): + "Read num bytes from serial port" + handle = os.open(self.portstr, + os.O_RDONLY | os.O_BINARY) + # print os.fstat(handle) + rv = os.read(handle, num) + os.close(handle) + return rv + + def write(self, s): + "Write string to serial port" + handle = os.open(self.portstr, + os.O_WRONLY | os.O_BINARY) + rv = os.write(handle, s) + os.close(handle) + return rv + + def flushInput(self): + raise NotImplementedError + + def flushOutput(self): + raise NotImplementedError + + def sendBreak(self): + raise NotImplementedError + + def setRTS(self,level=1): + """Set terminal status line""" + raise NotImplementedError + + def setDTR(self,level=1): + """Set terminal status line""" + raise NotImplementedError + + def getCTS(self): + """Eead terminal status line""" + raise NotImplementedError + + def getDSR(self): + """Eead terminal status line""" + raise NotImplementedError + + def getRI(self): + """Eead terminal status line""" + raise NotImplementedError + + def getCD(self): + """Eead terminal status line""" + raise NotImplementedError + + def readline(self, size=None): + raise NotImplementedError + + def readlines(self, sizehint=None): + raise NotImplementedError + + def xreadlines(self, sizehint=None): + raise NotImplementedError + + def writelines(self, sequence): + raise NotImplementedError + + def flush(self): + raise NotImplementedError + + def __repr__(self): + return string.join(( "<Serial>: ", self.portstr + , self.baud, self.parity, self.bytesize, self.stop, + self.retry , self.filename), ' ') + +if __name__ == '__main__': + print __name__ + s = Serial(0) + print s + + + + + + + + + + + + + |