aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/klipper-pru-start.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/klipper-pru-start.sh')
-rwxr-xr-xscripts/klipper-pru-start.sh103
1 files changed, 89 insertions, 14 deletions
diff --git a/scripts/klipper-pru-start.sh b/scripts/klipper-pru-start.sh
index 747543a2..6e2cd96a 100755
--- a/scripts/klipper-pru-start.sh
+++ b/scripts/klipper-pru-start.sh
@@ -14,23 +14,98 @@
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DESC="klipper_pru startup"
NAME="klipper_pru"
+KLIPPER_HOST_MCU=/usr/local/bin/klipper_mcu
+KLIPPER_HOST_ARGS="-w -r"
+PIDFILE=/var/run/klipper_mcu.pid
. /lib/lsb/init-functions
+pru_stop()
+{
+ # Shutdown existing Klipper 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 Klipper and then retry." && exit 1 )
+ sleep 1
+ ( echo "FORCE_SHUTDOWN" > /dev/rpmsg_pru30 ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Klipper and then retry." && exit 1 )
+ sleep 1
+ set +e
+ fi
+
+ log_daemon_msg "Stopping pru"
+ echo 4a334000.pru0 > /sys/bus/platform/drivers/pru-rproc/unbind
+ echo 4a338000.pru1 > /sys/bus/platform/drivers/pru-rproc/unbind
+}
+
+pru_start()
+{
+ if [ -c /dev/rpmsg_pru30 ]; then
+ pru_stop
+ sleep 1
+ fi
+
+ log_daemon_msg "Starting pru"
+ echo 4a334000.pru0 > /sys/bus/platform/drivers/pru-rproc/bind
+ echo 4a338000.pru1 > /sys/bus/platform/drivers/pru-rproc/bind
+}
+
+mcu_host_stop()
+{
+ # Shutdown existing Klipper instance (if applicable). The goal is to
+ # put the GPIO pins in a safe state.
+ if [ -c /tmp/klipper_host_mcu ]; then
+ log_daemon_msg "Attempting to shutdown host mcu..."
+ set -e
+ ( echo "FORCE_SHUTDOWN" > /tmp/klipper_host_mcu ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Klipper and then retry." && exit 1 )
+ sleep 1
+ ( echo "FORCE_SHUTDOWN" > /tmp/klipper_host_mcu ) 2> /dev/null || ( log_action_msg "Firmware busy! Please shutdown Klipper and then retry." && exit 1 )
+ sleep 1
+ set +e
+ fi
+
+ log_daemon_msg "Stopping klipper host mcu" $NAME
+ killproc -p $PIDFILE $KLIPPER_HOST_MCU
+}
+
+mcu_host_start()
+{
+ [ -x $KLIPPER_HOST_MCU ] || return
+
+ if [ -c /tmp/klipper_host_mcu ]; then
+ mcu_host_stop
+ fi
+
+ log_daemon_msg "Starting klipper MCU" $NAME
+ start-stop-daemon --start --quiet --exec $KLIPPER_HOST_MCU \
+ --background --pidfile $PIDFILE --make-pidfile \
+ -- $KLIPPER_HOST_ARGS
+ log_end_msg $?
+}
+
case "$1" in
-start) log_daemon_msg "Starting klipper_pru" $NAME
- # Enable ADC module
- echo 'BB-ADC' > /sys/devices/platform/bone_capemgr/slots
- # Start PRU firmware
- if [ ! -c /dev/rpmsg_pru30 ]; then
- rmmod -f pru_rproc
- modprobe pru_rproc
- fi
- ;;
-stop|restart|reload|force-reload|status)
- ;;
-*) log_action_msg "Usage: /etc/init.d/klipper_pru {start|stop|status|restart|reload|force-reload}"
- exit 2
- ;;
+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 $KLIPPER_HOST_MCU $NAME && exit 0 || exit $?
+ ;;
+*) log_action_msg "Usage: /etc/init.d/klipper {start|stop|status|restart|reload|force-reload}"
+ exit 2
+ ;;
esac
exit 0