| #!/bin/sh |
| # Copyright 2018 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. |
| # |
| # The script provides utility for detecting whether a base is currently |
| # connected. |
| |
| # base_connected will block for at most 5 * 0.01 = ~50ms, and some |
| # ectool overhead (total ~80ms, experimentally) |
| base_connected() { |
| local logger_name="$1" |
| local retries=5 |
| |
| # Detect if the base is connected: |
| # - Tablet mode is used on Soraka-like devices |
| # - Base attached on Nocturne-like devices with CBAS/hammer driver. |
| # The EC driver may not be immediately available, so retry 5 times |
| while true; do |
| : $((retries -= 1)) |
| if ectool mkbpget switches 2>/dev/null; then |
| break |
| fi |
| if [ "${retries}" -lt 1 ]; then |
| logger -t "${logger_name}" "Error: ectool cannot talk to the EC." |
| return 1 |
| fi |
| sleep 0.01 |
| done | grep -qE "(Tablet mode: OFF|Base attached: ON)" |
| } |