summaryrefslogtreecommitdiff
path: root/extra/tigertool/ecusb/tiny_servod.py
blob: f8d61b53050a36923c6acf32200a90250334f88c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Helper class to facilitate communication to servo ec console."""

from ecusb import pty_driver, stm32uart


class TinyServod(object):
    """Helper class to wrap a pty_driver with interface."""

    def __init__(self, vid, pid, interface, serialname=None, debug=False):
        """Build the driver and interface.

        Args:
          vid: servo device vid
          pid: servo device pid
          interface: which usb interface the servo console is on
          serialname: the servo device serial (if available)
        """
        self._vid = vid
        self._pid = pid
        self._interface = interface
        self._serial = serialname
        self._debug = debug
        self._init()

    def _init(self):
        self.suart = stm32uart.Suart(
            vendor=self._vid,
            product=self._pid,
            interface=self._interface,
            serialname=self._serial,
            debuglog=self._debug,
        )
        self.suart.run()
        self.pty = pty_driver.ptyDriver(self.suart, [])

    def reinitialize(self):
        """Reinitialize the connect after a reset/disconnect/etc."""
        self.close()
        self._init()

    def close(self):
        """Close out the connection and release resources.

        Note: if another TinyServod process or servod itself needs the same device
              it's necessary to call this to ensure the usb device is available.
        """
        self.suart.close()