aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kutter-pru-start.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kutter-pru-start.sh')
-rwxr-xr-xscripts/kutter-pru-start.sh119
1 files changed, 119 insertions, 0 deletions
diff --git a/scripts/kutter-pru-start.sh b/scripts/kutter-pru-start.sh
new file mode 100755
index 00000000..5ddc657c
--- /dev/null
+++ b/scripts/kutter-pru-start.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+# System startup script to start the PRU firmware
+
+### BEGIN INIT INFO
+# Provides: kutter_pru
+# Required-Start: $local_fs
+# Required-Stop:
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Kutter_PRU daemon
+# Description: Starts the PRU for Kutter.
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+DESC="kutter_pru startup"
+NAME="kutter_pru"
+KUTTER_HOST_MCU=/usr/local/bin/kutter_mcu
+KUTTER_HOST_ARGS="-w -r"
+PIDFILE=/var/run/kutter_mcu.pid
+RPROC0=/sys/class/remoteproc/remoteproc1
+RPROC1=/sys/class/remoteproc/remoteproc2
+
+. /lib/lsb/init-functions
+
+pru_stop()
+{
+ # Shutdown existing Kutter instance (if applicable). The goal is to
+ # put the GPIO pins in a safe state.
+ if [ -c /dev/rpmsg_pru30 ]; then
+ log_daemon_msg "Attempting to shutdown PRU..."
+ set -e
+ ( echo "FORCE_SHUTDOWN" > /dev/rpmsg_pru30 ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Kutter and then retry." && exit 1 )
+ sleep 1
+ ( echo "FORCE_SHUTDOWN" > /dev/rpmsg_pru30 ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Kutter and then retry." && exit 1 )
+ sleep 1
+ set +e
+ fi
+
+ log_daemon_msg "Stopping pru"
+ echo 'stop' > $RPROC0/state
+ echo 'stop' > $RPROC1/state
+}
+
+pru_start()
+{
+ if [ -c /dev/rpmsg_pru30 ]; then
+ pru_stop
+ else
+ echo 'stop' > $RPROC0/state
+ echo 'stop' > $RPROC1/state
+ fi
+ sleep 1
+
+ log_daemon_msg "Starting pru"
+ echo 'start' > $RPROC0/state
+ echo 'start' > $RPROC1/state
+
+ # log_daemon_msg "Loading ADC module"
+ # echo 'BB-ADC' > /sys/devices/platform/bone_capemgr/slots
+}
+
+mcu_host_stop()
+{
+ # Shutdown existing Kutter instance (if applicable). The goal is to
+ # put the GPIO pins in a safe state.
+ if [ -c /tmp/kutter_host_mcu ]; then
+ log_daemon_msg "Attempting to shutdown host mcu..."
+ set -e
+ ( echo "FORCE_SHUTDOWN" > /tmp/kutter_host_mcu ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Kutter and then retry." && exit 1 )
+ sleep 1
+ ( echo "FORCE_SHUTDOWN" > /tmp/kutter_host_mcu ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Kutter and then retry." && exit 1 )
+ sleep 1
+ set +e
+ fi
+
+ log_daemon_msg "Stopping kutter host mcu" $NAME
+ killproc -p $PIDFILE $KUTTER_HOST_MCU
+}
+
+mcu_host_start()
+{
+ [ -x $KUTTER_HOST_MCU ] || return
+
+ if [ -c /tmp/kutter_host_mcu ]; then
+ mcu_host_stop
+ fi
+
+ log_daemon_msg "Starting kutter MCU" $NAME
+ start-stop-daemon --start --quiet --exec $KUTTER_HOST_MCU \
+ --background --pidfile $PIDFILE --make-pidfile \
+ -- $KUTTER_HOST_ARGS
+ log_end_msg $?
+}
+
+case "$1" in
+start)
+ pru_start
+ mcu_host_start
+ ;;
+stop)
+ pru_stop
+ mcu_host_stop
+ ;;
+restart)
+ $0 stop
+ $0 start
+ ;;
+reload|force-reload)
+ log_daemon_msg "Reloading configuration not supported" $NAME
+ log_end_msg 1
+ ;;
+status)
+ status_of_proc -p $PIDFILE $KUTTER_HOST_MCU $NAME && exit 0 || exit $?
+ ;;
+*) log_action_msg "Usage: /etc/init.d/kutter {start|stop|status|restart|reload|force-reload}"
+ exit 2
+ ;;
+esac
+exit 0