xref: /openbmc/openbmc/poky/scripts/contrib/serdevtry (revision eb8dc403)
1*eb8dc403SDave Cobbley#!/bin/sh
2*eb8dc403SDave Cobbley
3*eb8dc403SDave Cobbley# Copyright (C) 2014 Intel Corporation
4*eb8dc403SDave Cobbley#
5*eb8dc403SDave Cobbley# Released under the MIT license (see COPYING.MIT)
6*eb8dc403SDave Cobbley
7*eb8dc403SDave Cobbleyif [ "$1" = "" -o "$1" = "--help" ] ; then
8*eb8dc403SDave Cobbley    echo "Usage: $0 <serial terminal command>"
9*eb8dc403SDave Cobbley    echo
10*eb8dc403SDave Cobbley    echo "Simple script to handle maintaining a terminal for serial devices that"
11*eb8dc403SDave Cobbley    echo "disappear when a device is powered down or reset, such as the USB"
12*eb8dc403SDave Cobbley    echo "serial console on the original BeagleBone (white version)."
13*eb8dc403SDave Cobbley    echo
14*eb8dc403SDave Cobbley    echo "e.g. $0 picocom -b 115200 /dev/ttyUSB0"
15*eb8dc403SDave Cobbley    echo
16*eb8dc403SDave Cobbley    exit
17*eb8dc403SDave Cobbleyfi
18*eb8dc403SDave Cobbley
19*eb8dc403SDave Cobbleyargs="$@"
20*eb8dc403SDave CobbleyDEVICE=""
21*eb8dc403SDave Cobbleywhile [ "$1" != "" ]; do
22*eb8dc403SDave Cobbley    case "$1" in
23*eb8dc403SDave Cobbley        /dev/*)
24*eb8dc403SDave Cobbley            DEVICE=$1
25*eb8dc403SDave Cobbley            break;;
26*eb8dc403SDave Cobbley    esac
27*eb8dc403SDave Cobbley    shift
28*eb8dc403SDave Cobbleydone
29*eb8dc403SDave Cobbley
30*eb8dc403SDave Cobbleyif [ "$DEVICE" != "" ] ; then
31*eb8dc403SDave Cobbley    while true; do
32*eb8dc403SDave Cobbley        if [ ! -e $DEVICE ] ; then
33*eb8dc403SDave Cobbley            echo "serdevtry: waiting for $DEVICE to exist..."
34*eb8dc403SDave Cobbley            while [ ! -e $DEVICE ]; do
35*eb8dc403SDave Cobbley                sleep 0.1
36*eb8dc403SDave Cobbley            done
37*eb8dc403SDave Cobbley        fi
38*eb8dc403SDave Cobbley        if [ ! -w $DEVICE ] ; then
39*eb8dc403SDave Cobbley            # Sometimes (presumably because of a race with udev) we get to
40*eb8dc403SDave Cobbley            # the device before its permissions have been set up
41*eb8dc403SDave Cobbley            RETRYNUM=0
42*eb8dc403SDave Cobbley            while [ ! -w $DEVICE ]; do
43*eb8dc403SDave Cobbley                if [ "$RETRYNUM" = "2" ] ; then
44*eb8dc403SDave Cobbley                    echo "Device $DEVICE exists but is not writable!"
45*eb8dc403SDave Cobbley                    exit 1
46*eb8dc403SDave Cobbley                fi
47*eb8dc403SDave Cobbley                RETRYNUM=$((RETRYNUM+1))
48*eb8dc403SDave Cobbley                sleep 0.1
49*eb8dc403SDave Cobbley            done
50*eb8dc403SDave Cobbley        fi
51*eb8dc403SDave Cobbley        $args
52*eb8dc403SDave Cobbley        if [ -e $DEVICE ] ; then
53*eb8dc403SDave Cobbley            break
54*eb8dc403SDave Cobbley        fi
55*eb8dc403SDave Cobbley    done
56*eb8dc403SDave Cobbleyelse
57*eb8dc403SDave Cobbley    echo "Unable to determine device node from command: $args"
58*eb8dc403SDave Cobbley    exit 1
59*eb8dc403SDave Cobbleyfi
60*eb8dc403SDave Cobbley
61