blob: 7ce9dfe7f659dd03ebc9631fecf311ba8330088f [file] [log] [blame]
cliechti6fa19112011-08-19 01:50:49 +00001#! 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
14import serial
15import serial.tools.list_ports
16
17class 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"""
cliechti9a3809e2011-08-19 23:43:10 +000022 if isinstance(value, basestring) and value.startswith('hwgrep://'):
cliechti6fa19112011-08-19 01:50:49 +000023 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:
cliechti9a3809e2011-08-19 23:43:10 +000034 raise serial.SerialException('no ports found matching regexp %r' % (url,))
cliechti6fa19112011-08-19 01:50:49 +000035
36 # override property
37 port = property(serial.Serial.getPort, setPort, doc="Port setting")
38
39# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
40if __name__ == '__main__':
41 #~ s = Serial('hwgrep://ttyS0')
42 s = Serial(None)
43 s.port = 'hwgrep://ttyS0'
Chris Liechti68340d72015-08-03 14:15:48 +020044 print(s)
cliechti6fa19112011-08-19 01:50:49 +000045