diff --git a/.jc_aliases b/.jc_aliases new file mode 100644 index 0000000..e94a504 --- /dev/null +++ b/.jc_aliases @@ -0,0 +1,51 @@ +jc() { + screen -S joycontrol -X stuff "$1^M" +} + +jcupdate() { + cd ~/joycontrol + git pull --ff-only + cd + cp -f ~/joycontrol/.jc_aliases ~ +} + +jcstart() { + jcupdate + screen -dmS ~/joycontrol sudo python3 ~/run_controller_cli.py PRO_CONTROLLER -r 98:E2:55:92:E8:81 +} + +jcstop() { + screen -S joycontrol -X quit +} + +jcrestart() { + jcstop + jcstart +} + +jcmacro() { + buttonDelay='0.01' + if [[ ! -z $2 ]]; then + buttonDelay=$2 + fi + + macro=$(~/joycontrol/expand_nested_loops.sh "~/joycontrol/macro/$1") + echo "$macro" + + while read -r line; do + if [[ ${line:0:1} != "#" ]]; then + jc "$line" + jc "sleep $buttonDelay" + fi + done <<< $macro +} + +jclist() { + ls ~/joycontrol/macro +} + +if screen -ls | grep joycontrol; then + echo "joycontrol already running, restart id needed" +else + jcstart +fi diff --git a/expand_nested_loops.sh b/expand_nested_loops.sh new file mode 100644 index 0000000..a4aa4f8 --- /dev/null +++ b/expand_nested_loops.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Recursively read lines until EOF or a "loopend" is encountered. +# Prints everything it reads, expanding any nested loops. +expand() { + local line repeat body + # Read one line at a time + while IFS= read -r line; do + # If this is the start of a loop, grab the count + if [[ $line =~ ^[[:space:]]*loop[[:space:]]+([0-9]+)[[:space:]]*$ ]]; then + repeat=${BASH_REMATCH[1]} + # Recursively collect inner block into an array + mapfile -t body < <( expand ) + # Print that block "repeat" times + for ((i=0; i