summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2011-08-19 01:50:49 +0000
committercliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2011-08-19 01:50:49 +0000
commitaa1663f080ffe2616b2081df907bd7bfa3e8e0d9 (patch)
tree226965c1e17b8f2f3d3c2c58cdfae49637af1f74
parent4d09a44add7f55724d63fb9339a07e467d7487d2 (diff)
downloadpyserial-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.txt2
-rw-r--r--serial/urlhandler/protocol_hwgrep.py45
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
+