• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
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"""
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# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
40if __name__ == '__main__':
41    #~ s = Serial('hwgrep://ttyS0')
42    s = Serial(None)
43    s.port = 'hwgrep://ttyS0'
44    print s
45
46