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