#!/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 
 |