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