summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2004-01-15 01:20:23 +0000
committercliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2004-01-15 01:20:23 +0000
commit107db8d2eadbc7ebff536d08cb7b0c74e9279016 (patch)
treed68a91e6b19e25866796ddb39d3b6bec426770ea
parent5e52fc71b576da04fcde7a7ad848f22b45d0a8fb (diff)
downloadpyserial-git-107db8d2eadbc7ebff536d08cb7b0c74e9279016.tar.gz
accept any baudrate and let the system decide if that is a valid value, added test for that
-rw-r--r--pyserial/examples/test.py2
-rw-r--r--pyserial/examples/test_advanced.py11
-rw-r--r--pyserial/serial/serialutil.py16
-rw-r--r--pyserial/serial/serialwin32.py9
4 files changed, 29 insertions, 9 deletions
diff --git a/pyserial/examples/test.py b/pyserial/examples/test.py
index d312fe6..9713145 100644
--- a/pyserial/examples/test.py
+++ b/pyserial/examples/test.py
@@ -51,7 +51,7 @@ class Test4_Nonblocking(unittest.TestCase):
self.s.write(c)
time.sleep(0.02) #there might be a small delay until the character is ready (especialy on win32)
self.failUnless(self.s.inWaiting()==1, "expected exactly one character for inWainting()")
- self.failUnless(self.s.read(1)==c, "expected an '%s' which was written before" % c)
+ self.failUnless(self.s.read(1)==c, "expected a '%s' which was written before" % c)
self.failUnless(self.s.read(1)=='', "expected empty buffer after all sent chars are read")
def test2_LoopbackTimeout(self):
"""timeout: test the timeout/immediate return.
diff --git a/pyserial/examples/test_advanced.py b/pyserial/examples/test_advanced.py
index d9ca93d..8d65b16 100644
--- a/pyserial/examples/test_advanced.py
+++ b/pyserial/examples/test_advanced.py
@@ -58,6 +58,8 @@ class Test_ChangeAttributes(unittest.TestCase):
self.failUnlessEqual(self.s.portstr, serial.device(1))
def test_BaudrateSetting(self):
+ self.s.port = PORT
+ self.s.open()
for baudrate in (300, 9600, 19200, 115200):
self.s.baudrate = baudrate
#test get method
@@ -65,7 +67,14 @@ class Test_ChangeAttributes(unittest.TestCase):
#test internals
self.failUnlessEqual(self.s._baudrate, baudrate)
#test illegal values
- for illegal_value in (-300, -1, 0, 301, 9000, 12345, 'a', None):
+ for illegal_value in (-300, -1, 0, 'a', None):
+ self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
+
+ def test_BaudrateSetting2(self):
+ #test illegal values, depending on machine/port some of these may be valid...
+ self.s.port = PORT
+ self.s.open()
+ for illegal_value in (500000,576000,921600,92160):
self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
def test_BytesizeSetting(self):
diff --git a/pyserial/serial/serialutil.py b/pyserial/serial/serialutil.py
index 40897c2..19ec677 100644
--- a/pyserial/serial/serialutil.py
+++ b/pyserial/serial/serialutil.py
@@ -181,7 +181,7 @@ class SerialBase(FileLike):
if was_open: self.open()
def getPort(self):
- """get the current port setting. The value that was passed on init or using
+ """Get the current port setting. The value that was passed on init or using
setPort() is passed back. See also the attribute portstr which contains
the name of the port as a string."""
return self._port
@@ -190,10 +190,16 @@ class SerialBase(FileLike):
def setBaudrate(self, baudrate):
- """Change baudrate."""
- if baudrate not in self.BAUDRATES: raise ValueError("Not a valid baudrate: %r" % baudrate)
- self._baudrate = baudrate
- if self._isOpen: self._reconfigurePort()
+ """Change baudrate. It raises a ValueError if the port is open and the
+ baudrate is not possible. If the port is closed, then tha value is
+ accepted and the exception is raised when the port is opened."""
+ #~ if baudrate not in self.BAUDRATES: raise ValueError("Not a valid baudrate: %r" % baudrate)
+ try:
+ self._baudrate = int(baudrate)
+ except TypeError:
+ raise ValueError("Not a valid baudrate: %r" % baudrate)
+ else:
+ if self._isOpen: self._reconfigurePort()
def getBaudrate(self):
"""Get the current baudrate setting."""
diff --git a/pyserial/serial/serialwin32.py b/pyserial/serial/serialwin32.py
index 35245a7..fa04029 100644
--- a/pyserial/serial/serialwin32.py
+++ b/pyserial/serial/serialwin32.py
@@ -11,7 +11,7 @@ import win32event # We use events and the WaitFor[Single|Multiple]Objects functi
import win32con # constants.
from serialutil import *
-VERSION = "$Revision: 1.27 $".split()[1] #extract CVS version
+VERSION = "$Revision: 1.28 $".split()[1] #extract CVS version
#from winbase.h. these should realy be in win32con
MS_CTS_ON = 16
@@ -70,6 +70,7 @@ class Serial(SerialBase):
self._overlappedRead = win32file.OVERLAPPED()
self._overlappedRead.hEvent = win32event.CreateEvent(None, 1, 0, None)
self._overlappedWrite = win32file.OVERLAPPED()
+ #~ self._overlappedWrite.hEvent = win32event.CreateEvent(None, 1, 0, None)
self._overlappedWrite.hEvent = win32event.CreateEvent(None, 0, 0, None)
self._isOpen = True
@@ -144,7 +145,10 @@ class Serial(SerialBase):
comDCB.fErrorChar = 0
comDCB.fAbortOnError = 0
- win32file.SetCommState(self.hComPort, comDCB)
+ try:
+ win32file.SetCommState(self.hComPort, comDCB)
+ except win32file.error, e:
+ raise ValueError("Cannot configure port, some setting was wrong. Original message: %s" % e)
#~ def __del__(self):
#~ self.close()
@@ -199,6 +203,7 @@ class Serial(SerialBase):
if not self.hComPort: raise portNotOpenError
#print repr(s),
if s:
+ #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
err, n = win32file.WriteFile(self.hComPort, s, self._overlappedWrite)
if err: #will be ERROR_IO_PENDING:
# Wait for the write to complete.