summaryrefslogtreecommitdiff
path: root/extra/tigertool/ecusb/tiny_servod.py
blob: 632d9c3a2077b4771bbc70b752412e55b787c73d (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
52
53
54
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Ignore indention messages, since legacy scripts use 2 spaces instead of 4.
# pylint: disable=bad-indentation,docstring-section-indent
# pylint: disable=docstring-trailing-quotes

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

from ecusb import pty_driver
from ecusb import 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()