a2cloud/setup/adtpro.sh
T. Joseph Carter 55c53b9c10 Clarify license on script files
As noted, Ivan has agreed to allow these scripts to be relicensed under
CC0.  We have one file under LGPL (a unit file we lifted wholesake from
systemd) and the ADTPro wrapper which I'm pretty sure Ivan wrote, but if
he didn't we need to fix its license to be the same as ADTPro.

Either way, to the best of my knowledge, this resolves the question of
how things are licensed explicitly.  (Closes #21)
2018-06-24 21:48:42 -07:00

156 lines
5.1 KiB
Bash
Executable File

#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 noexpandtab filetype=sh:
# adtpro.sh - a2cloud wrapper for adtpro
#
# To the extent possible under law, T. Joseph Carter and Ivan Drucker have
# waived all copyright and related or neighboring rights to the a2cloud
# scripts themselves. Software used or installed by these scripts is subject
# to other licenses. This work is published from the United States.
# This script may have some common history with the similar script found in
# ADTPro's source tree. The original may have been written by David Schmidt,
# and we should check on that.
# ADTPro - *nix startup shell script
#
# Note:
# Invoke with the name of the communications button to push
# in order to start with that mode active (i.e. './adtpro.sh ethernet')
#
# You can set two variables here:
# 1. $MY_JAVA_HOME - to pick a particular java to run under
# 2. $ADTPRO_HOME - to say where you installed ADTPro
#
# Set default ADTPRO_HOME to be the fully qualified
# current working directory.
#export ADTPRO_HOME="`dirname \"$0\"`"
#cd "$ADTPRO_HOME"
#export ADTPRO_HOME=`pwd`
# Uncomment and modify one or both of the lines below if you
# want to specify a particular location for Java or ADTPro.
# NOTE: be sure to include a trailing slash on MY_JAVA_HOME,
# but not on ADTPRO_HOME.
#
# export MY_JAVA_HOME=/usr/local/java/bin/
# export ADTPRO_HOME=~/myuser/adtpro
usageExit () {
echo "usage:" 1>&2
echo "adtpro.sh [headless] [serial|ethernet|audio|localhost] [serialPortName]" 1>&2
exit 1
}
export ADTPRO_HOME=/usr/local/adtpro
cd "$ADTPRO_HOME"
OS=`uname`
OS_ARCH=`uname -m`
[[ $1 == "headless" ]] && { headless=1; shift; } || headless=
if [[ $1 && ( $1 != "serial" && $1 != "ethernet" && $1 != "audio" && $1 != "localhost" ) ]]; then
usageExit
fi
# For Linux, use this:
if [ "$OS" = "Linux" ]; then
serialPortName=
if [[ $1 == "serial" ]]; then
if [[ $2 ]]; then
serialPortName="$2"
[[ ${serialPortName:0:5} == "/dev/" ]] && serialPortName=${serialPortName:5}
if [[ ! -c /dev/$serialPortName ]]; then
echo "Serial port $serialPortName not found." 1>&2
usageExit
fi
elif [[ -c /dev/ttyUSBlower ]]; then
serialPortName=ttyUSBlower
elif [[ $(ls -1 /dev/ttyUSBlower_hub* 2> /dev/null | wc -l) -gt 0 ]]; then
serialPortName=$(ls -1 /dev/ttyUSBlower_hub* 2> /dev/null | head -1 | cut -c 6-)
elif [[ $(ls -1 /dev/ttyUSBupper_hub* 2> /dev/null | wc -l) -gt 1 ]]; then
serialPortName=$(ls -1 /dev/ttyUSBupper_hub* 2> /dev/null | head -1 | cut -c 6-)
else
echo "No eligible USB-to-serial adapter found." 1>&2
echo "Possible ports:" 1>&2
echo " lower USB port"
echo " any port on lower USB hub with no other adapters"
echo " lowest port on USB hub on upper or lower USB port with multiple adapters"
usageExit
fi
fi
if [[ $(grep CommPort= /usr/local/adtpro/disks/ADTPro.properties) ]]; then
if [[ $serialPortName ]]; then
sed -i "s/^CommPort=.*$/CommPort=\/dev\/$serialPortName/" /usr/local/adtpro/disks/ADTPro.properties &> /dev/null
else
serialPortName=$(grep 'CommPort=/dev/' /usr/local/adtpro/disks/ADTPro.properties 2> /dev/null | cut -f 3 -d '/')
fi
else
echo -e "#ADTPro.properties\n#$(date)\nCommPortSpeed=115200\nCommPortBootstrapSpeed=2400\nCommPort=/dev/$serialPortName\nCommPortBootstrapPacing=250\nHardwareHandshaking=false\nSerialIPHost=localhost\nSerialIPPort=1977" > /usr/local/adtpro/disks/ADTPro.properties
chmod ugo+w /usr/local/adtpro/disks/ADTPro.properties
fi
ADTPRO_EXTRA_JAVA_PARMS="-Dgnu.io.rxtx.SerialPorts=/dev/$serialPortName"
if [ -f /usr/bin/raspi-config ]; then
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/arm
elif [ "$OS_ARCH" = "i686" ]; then
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/i686-pc-linux-gnu
else
if [ "$OS_ARCH" = "i386" ]; then
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/i686-pc-linux-gnu
else
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/x86_64-unknown-linux-gnu
fi
fi
fi
# For OSX, use this:
if [ "$OS" = "Darwin" ]; then
if [ "$OS_ARCH" = "powerpc" ]; then
export RXTXLIB=lib/rxtx/rxtx-2.1-7-bins-r2/Mac_OS_X
else
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/mac-10.5
fi
fi
# For Solaris, use this:
if [ "$OS" = "SunOS" ]; then
export RXTXLIB=lib/rxtx/rxtx-2.2pre2-local/sparc-sun-solaris2.10-32
fi
# Set up the library location.
export TWEAK1="-Djava.library.path="
export TWEAK=$TWEAK1$ADTPRO_HOME/$RXTXLIB
if [[ $headless ]]; then
if [[ ! $1 || ! -f /usr/bin/xvfb-run ]]; then
if [[ ! -f /usr/bin/xvfb-run ]]; then
echo "Headless operation requires xvfb."
usageExit
else
echo "Headless operation requires a communication mode (e.g. serial)."
usageExit
fi
exit 1
else
HEADLESS="xvfb-run --auto-servernum "
fi
fi
if [[ $serialPortName && $(ps aux | grep "/sbin/getty.*$serialPortName") ]]; then
sudo pkill -f "/sbin/getty.*$serialPortName"
fi
sudo pkill -f [A]DTPro
cd "$ADTPRO_HOME"/disks
$HEADLESS"$MY_JAVA_HOME"java -Xms256m -Xmx512m "$TWEAK" $ADTPRO_EXTRA_JAVA_PARMS -cp ../lib/ADTPro.jar:../"$RXTXLIB"/../RXTXcomm.jar:../lib/AppleCommander/AppleCommander-ac.jar org.adtpro.ADTPro $* &
if [[ $1 == "serial" ]]; then
echo "Starting up on interface $serialPortName. Please wait..."
fi
if [ -t 0 ]; then
sleep 30
fi