blob: d99e48ea4b10d8839a4879b07672af21444bf5db [file] [log] [blame]
#!/bin/sh
pkillwait mocad
# TODO(apenwarr): remove this once all devices use 'moca0' as the name.
if [ -e /sys/class/net/moca0 ]; then
# GFRG200
mocaifc=moca0
else
# GFMS100/GFHD100/GFHD200
mocaifc=eth1
fi
try_start() {
xinit=
if runnable mocap; then
# moca 2.0
is-storage-box && xinit="--preferred_nc 1"
mocap set \
--restore_defaults \
$xinit \
--rf_band 3 \
--beacon_channel_set 575 \
--lof 575 \
--tpc_en 0
mocap set --start
else
# moca 1.0
# TODO(apenwarr): remove this after fully migrating to moca 2.0.
is-storage-box && xinit="--preferredNC on"
mocactl restore_defaults
mocactl start \
$xinit \
--rfType bandE \
--singleCh on2 \
--autoScan off \
--beaconChannel 575 \
--lof 575 \
--tpc off
fi
}
mkdir -p /tmp/moca &&
cd /tmp/moca &&
mocad -i $mocaifc -w -l /tmp/moca & # backgrounds itself when ready to go
mocad_pid=$!
# Unfortunately this weird loop is needed because we can't use mocad -D.
# The -D option would self-background mocad as soon as it's ready to go, so
# sending it commands via mocactl/mocap would be guaranteed to work. But
# we have to background it ourselves, not let it background itself, so that
# we can collect its error code and pass it along to our parent, if it exits,
# so that we can be run under babysit and it will know whether or not to
# restart us.
for i in $(seq 20); do
if ! kill -0 "$mocad_pid" 2>/dev/null; then
echo "weird: mocad died before it started?" >&2
exit 1 # mocad exited unexpectedly, so report an error
fi
msleep 250
if try_start; then
echo "mocad started!" >&2
wait $mocad_pid
exit $? # return real mocad exit code
else
echo "moca start: code $?" >&2
fi
done
exit 2 # timed out