|  | #!/bin/sh | 
|  |  | 
|  | # Copyright (C) 2014 Intel Corporation | 
|  | # | 
|  | # SPDX-License-Identifier: MIT | 
|  | # | 
|  |  | 
|  | if [ "$1" = "" -o "$1" = "--help" ] ; then | 
|  | echo "Usage: $0 <serial terminal command>" | 
|  | echo | 
|  | echo "Simple script to handle maintaining a terminal for serial devices that" | 
|  | echo "disappear when a device is powered down or reset, such as the USB" | 
|  | echo "serial console on the original BeagleBone (white version)." | 
|  | echo | 
|  | echo "e.g. $0 picocom -b 115200 /dev/ttyUSB0" | 
|  | echo | 
|  | exit | 
|  | fi | 
|  |  | 
|  | args="$@" | 
|  | DEVICE="" | 
|  | while [ "$1" != "" ]; do | 
|  | case "$1" in | 
|  | /dev/*) | 
|  | DEVICE=$1 | 
|  | break;; | 
|  | esac | 
|  | shift | 
|  | done | 
|  |  | 
|  | if [ "$DEVICE" != "" ] ; then | 
|  | while true; do | 
|  | if [ ! -e $DEVICE ] ; then | 
|  | echo "serdevtry: waiting for $DEVICE to exist..." | 
|  | while [ ! -e $DEVICE ]; do | 
|  | sleep 0.1 | 
|  | done | 
|  | fi | 
|  | if [ ! -w $DEVICE ] ; then | 
|  | # Sometimes (presumably because of a race with udev) we get to | 
|  | # the device before its permissions have been set up | 
|  | RETRYNUM=0 | 
|  | while [ ! -w $DEVICE ]; do | 
|  | if [ "$RETRYNUM" = "2" ] ; then | 
|  | echo "Device $DEVICE exists but is not writable!" | 
|  | exit 1 | 
|  | fi | 
|  | RETRYNUM=$((RETRYNUM+1)) | 
|  | sleep 0.1 | 
|  | done | 
|  | fi | 
|  | $args | 
|  | if [ -e $DEVICE ] ; then | 
|  | break | 
|  | fi | 
|  | done | 
|  | else | 
|  | echo "Unable to determine device node from command: $args" | 
|  | exit 1 | 
|  | fi | 
|  |  |