3 # Python Serial Port Extension for Win32, Linux, BSD, Jython
6 # This module implements a special URL handler that uses the port listing to
7 # find ports by searching the string descriptions.
9 # (C) 2011 Chris Liechti <cliechti@gmx.net>
10 # this is distributed under a free software license, see license.txt
12 # URL format: hwgrep://regexp
15 import serial
.tools
.list_ports
17 class Serial(serial
.Serial
):
18 """Just inherit the native Serial port implementation and patch the open function."""
20 def setPort(self
, value
):
21 """translate port name before storing it"""
22 if isinstance(value
, basestring
) and value
.startswith('hwgrep://'):
23 serial
.Serial
.setPort(self
, self
.fromURL(value
))
25 serial
.Serial
.setPort(self
, value
)
27 def fromURL(self
, url
):
28 """extract host and port from an URL string"""
29 if url
.lower().startswith("hwgrep://"): url
= url
[9:]
30 # use a for loop to get the 1st element from the generator
31 for port
, desc
, hwid
in serial
.tools
.list_ports
.grep(url
):
34 raise serial
.SerialException('no ports found matching regexp %r' % (url
,))
37 port
= property(serial
.Serial
.getPort
, setPort
, doc
="Port setting")
39 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
40 if __name__
== '__main__':
41 #~ s = Serial('hwgrep://ttyS0')
43 s
.port
= 'hwgrep://ttyS0'