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 |