summaryrefslogtreecommitdiff
path: root/extra/tigertool/tigertool.py
diff options
context:
space:
mode:
Diffstat (limited to 'extra/tigertool/tigertool.py')
-rwxr-xr-xextra/tigertool/tigertool.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/extra/tigertool/tigertool.py b/extra/tigertool/tigertool.py
new file mode 100755
index 0000000000..c69788e810
--- /dev/null
+++ b/extra/tigertool/tigertool.py
@@ -0,0 +1,133 @@
+#!/usr/bin/python2
+# Copyright 2017 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.
+
+"""Script to control tigertail USB-C Mux board."""
+
+import argparse
+import sys
+import time
+
+import ecusb.tiny_servo_common as c
+
+STM_VIDPID = '18d1:5027'
+serialno = 'Uninitialized'
+
+def do_mux(mux, pty):
+ """Set mux via ec console 'pty'.
+
+ Commands are:
+ # > mux A
+ # TYPE-C mux is A
+ """
+ validmux = ['A', 'B', 'off']
+ if mux not in validmux:
+ c.log('Mux setting %s invalid, try one of %s' % (mux, validmux))
+ return False
+
+ cmd = '\r\nmux %s\r\n' % mux
+ regex = 'TYPE\-C mux is ([^\s\r\n]*)\r'
+
+ results = pty._issue_cmd_get_results(cmd, [regex])[0]
+ result = results[1].strip().strip('\n\r')
+
+ if result != mux:
+ c.log('Mux set to %s but saved as %s.' % (mux, result))
+ return False
+ c.log('Mux set to %s' % result)
+ return True
+
+def do_reboot(pty):
+ """Reboot via ec console pty
+
+ Command is: reboot.
+ """
+ cmd = '\r\nreboot\r\n'
+ regex = 'Rebooting'
+
+ try:
+ results = pty._issue_cmd_get_results(cmd, [regex])[0]
+ time.sleep(1)
+ c.log(results)
+ except Exception as e:
+ c.log(e)
+ return False
+
+ return True
+
+def do_sysjump(region, pty):
+ """Set region via ec console 'pty'.
+
+ Commands are:
+ # > sysjump rw
+ """
+ validregion = ['ro', 'rw']
+ if region not in validregion:
+ c.log('Region setting %s invalid, try one of %s' % (
+ region, validregion))
+ return False
+
+ cmd = '\r\nsysjump %s\r\n' % region
+ try:
+ pty._issue_cmd(cmd)
+ time.sleep(1)
+ except Exception as e:
+ c.log(e)
+ return False
+
+ c.log('Region requested %s' % region)
+ return True
+
+def get_parser():
+ parser = argparse.ArgumentParser(
+ description=__doc__)
+ parser.add_argument('-s', '--serialno', type=str, default=None,
+ help='serial number of board to use')
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument('--setserialno', type=str, default=None,
+ help='serial number to set on the board.')
+ group.add_argument('-m', '--mux', type=str, default=None,
+ help='mux selection')
+ group.add_argument('-r', '--sysjump', type=str, default=None,
+ help='region selection')
+ group.add_argument('--reboot', action='store_true',
+ help='reboot tigertail')
+ return parser
+
+def main(argv):
+ parser = get_parser()
+ opts = parser.parse_args(argv)
+
+ result = True
+
+ # Let's make sure there's a tigertail
+ # If nothing found in 5 seconds, fail.
+ c.wait_for_usb(STM_VIDPID, 5.)
+
+ pty = c.setup_tinyservod(STM_VIDPID, 0, serialno=opts.serialno)
+
+ if opts.setserialno:
+ try:
+ c.do_serialno(opts.setserialno, pty)
+ except Exception:
+ result = False
+
+ elif opts.mux:
+ result &= do_mux(opts.mux, pty)
+
+ elif opts.sysjump:
+ result &= do_sysjump(opts.sysjump, pty)
+
+ elif opts.reboot:
+ result &= do_reboot(pty)
+
+ if result:
+ c.log('PASS')
+ else:
+ c.log('FAIL')
+ exit(-1)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))