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