diff options
author | cliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a> | 2011-08-19 01:50:49 +0000 |
---|---|---|
committer | cliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a> | 2011-08-19 01:50:49 +0000 |
commit | aa1663f080ffe2616b2081df907bd7bfa3e8e0d9 (patch) | |
tree | 226965c1e17b8f2f3d3c2c58cdfae49637af1f74 | |
parent | 4d09a44add7f55724d63fb9339a07e467d7487d2 (diff) | |
download | pyserial-aa1663f080ffe2616b2081df907bd7bfa3e8e0d9.tar.gz |
new protocol "hwgrep://<regexp>"
git-svn-id: http://svn.code.sf.net/p/pyserial/code/trunk/pyserial@416 f19166aa-fa4f-0410-85c2-fa1106f25c8a
-rw-r--r-- | CHANGES.txt | 2 | ||||
-rw-r--r-- | serial/urlhandler/protocol_hwgrep.py | 45 |
2 files changed, 47 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 70ddba6..47f8fbc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -409,6 +409,8 @@ New Features: to add protocols w/o editing files. The list ``serial.protocol_handler_packages`` can be used to add or remove user packages with protocol handlers (see docs for details). +- new URL type: hwgrep://<regexp> uses list_ports module to search for ports + by their description Bugfixes: diff --git a/serial/urlhandler/protocol_hwgrep.py b/serial/urlhandler/protocol_hwgrep.py new file mode 100644 index 0000000..7b90761 --- /dev/null +++ b/serial/urlhandler/protocol_hwgrep.py @@ -0,0 +1,45 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# This module implements a special URL handler that uses the port listing to +# find ports by searching the string descriptions. +# +# (C) 2011 Chris Liechti <cliechti@gmx.net> +# this is distributed under a free software license, see license.txt +# +# URL format: hwgrep://regexp + +import serial +import serial.tools.list_ports + +class Serial(serial.Serial): + """Just inherit the native Serial port implementation and patch the open function.""" + + def setPort(self, value): + """translate port name before storing it""" + if isinstance(value, basestring): + serial.Serial.setPort(self, self.fromURL(value)) + else: + serial.Serial.setPort(self, value) + + def fromURL(self, url): + """extract host and port from an URL string""" + if url.lower().startswith("hwgrep://"): url = url[9:] + # use a for loop to get the 1st element from the generator + for port, desc, hwid in serial.tools.list_ports.grep(url): + return port + else: + raise SerialException('no ports found matching regexp %r' % (url,)) + + # override property + port = property(serial.Serial.getPort, setPort, doc="Port setting") + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +if __name__ == '__main__': + #~ s = Serial('hwgrep://ttyS0') + s = Serial(None) + s.port = 'hwgrep://ttyS0' + print s + |