OLD | NEW |
| (Empty) |
1 #! python | |
2 # | |
3 # Python Serial Port Extension for Win32, Linux, BSD, Jython | |
4 # see __init__.py | |
5 # | |
6 # This module implements a special URL handler that uses the port listing to | |
7 # find ports by searching the string descriptions. | |
8 # | |
9 # (C) 2011 Chris Liechti <cliechti@gmx.net> | |
10 # this is distributed under a free software license, see license.txt | |
11 # | |
12 # URL format: hwgrep://regexp | |
13 | |
14 import serial | |
15 import serial.tools.list_ports | |
16 | |
17 class Serial(serial.Serial): | |
18 """Just inherit the native Serial port implementation and patch the open fun
ction.""" | |
19 | |
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)) | |
24 else: | |
25 serial.Serial.setPort(self, value) | |
26 | |
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): | |
32 return port | |
33 else: | |
34 raise serial.SerialException('no ports found matching regexp %r' % (
url,)) | |
35 | |
36 # override property | |
37 port = property(serial.Serial.getPort, setPort, doc="Port setting") | |
38 | |
39 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
40 if __name__ == '__main__': | |
41 #~ s = Serial('hwgrep://ttyS0') | |
42 s = Serial(None) | |
43 s.port = 'hwgrep://ttyS0' | |
44 print s | |
45 | |
OLD | NEW |