A quick script to control lkbm firmware on the Ploopy Nano.
See this post for more features and more explanation.
#!/bin/sh | |
set -e | |
usage() { | |
cat <<ENDUSAGE | |
$0: Send commands to Ploopy Trackball Nano that is running LKBM firmware via caps/scroll/num lock LED signals | |
Usage: $0 [scroll|dpi|reset|status|help] | |
See <https://github.com/qmk/qmk_firmware/tree/master/keyboards/ploopyco/trackball_nano/keymaps/lkbm>. | |
ENDUSAGE | |
} | |
# Find the /sys/class/leds/* path for caps/num/scroll-lock | |
inputdev=/dev/input/by-id/usb-PloopyCo_Trackball_Nano-event-kbd | |
evntname="$(basename "$(readlink -f $inputdev)")" | |
# e.g. "event22" | |
sysclassdev=/sys/class/input/$evntname/device | |
sysinputname="$(echo $sysclassdev/*::capslock | sed 's|.*/\(input[0-9]*\).*|\1|')" | |
# e.g. "input1251" | |
caps=/sys/class/leds/$sysinputname::capslock/brightness | |
scroll=/sys/class/leds/$sysinputname::scrolllock/brightness | |
num=/sys/class/leds/$sysinputname::numlock/brightness | |
# We have to wait a very small amount of time or the LED changes don't seem to register | |
# I use busybox sleep but should also work with GNU sleep (untested) | |
lkbmwait() { | |
busybox sleep 0.0025s | |
} | |
# Toggle scroll behavior, between using the trackball as normal and using it as a 2D scroll ball | |
toggle_scroll() { | |
echo 1 > "$num" | |
lkbmwait | |
echo 0 > "$num" | |
lkbmwait | |
} | |
# Cycle between slow/med/fast DPI | |
cycle_dpi() { | |
echo 1 > "$caps" | |
lkbmwait | |
echo 0 > "$caps" | |
lkbmwait | |
} | |
# Enter reset mode to flash new firmware | |
enter_reset() { | |
echo 1 > "$caps" | |
lkbmwait | |
echo 1 > "$num" | |
lkbmwait | |
echo 0 > "$num" | |
lkbmwait | |
echo 0 > "$caps" | |
lkbmwait | |
} | |
# Read the current status of all the LEDs | |
read_status() { | |
c="$(cat "$caps")" | |
s="$(cat "$scroll")" | |
n="$(cat "$num")" | |
echo "Input device path: $inputdev" | |
echo "Event device name: $evntname" | |
echo "/sys/class even device: $sysclassdev" | |
echo "/sys/class input device: $sysinputname" | |
echo "Capslock: $c" | |
echo "Scroll lock: $s" | |
echo "Numlock: $n" | |
} | |
case "$1" in | |
scroll) toggle_scroll;; | |
dpi) cycle_dpi;; | |
reset) enter_reset;; | |
status) read_status;; | |
*) usage;; | |
esac |