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 (at] 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 function.""" 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 46