Implement power button monitor, document device input devices

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Michael Smith
2026-02-13 20:07:37 +01:00
parent 0f653d4395
commit 3728e9499c
3 changed files with 48 additions and 39 deletions

View File

@@ -4,9 +4,8 @@
#
# Launched by dmenu_ln instead of sdlamp2 directly. Handles device-specific
# concerns that don't belong in the player binary:
# 1. Start WiFi hotspot (AP mode for SSH access)
# 2. Launch sdlamp2 as the foreground process
# 3. Monitor power button and trigger clean shutdown
# 1. Monitor power button and trigger clean shutdown
# 2. Launch sdlamp2 as the main process
#
# Install: copy to /mnt/vendor/bin/rg35xx-wrapper.sh
# Config: set CMD in dmenu_ln to point here instead of sdlamp2 directly
@@ -15,49 +14,42 @@ SDLAMP2="/mnt/vendor/bin/sdlamp2"
AUDIO_DIR="/mnt/sdcard/Music"
# --- WiFi hotspot ---
# TODO: Investigate how the stock menu starts AP mode.
# Likely candidates: hostapd, nmcli, or a vendor script in /mnt/vendor/ctrl/.
# Run these on the device to find out:
# grep -r 'hostapd\|hotspot\|ap_mode\|wifi' /mnt/vendor/ctrl/
# systemctl list-units | grep -i net
# nmcli general status && nmcli connection show
#
# Placeholder — uncomment/replace once the mechanism is known:
# nmcli connection up hotspot 2>/dev/null || true
# Deprioritized: connecting the device as a WiFi client to a shared network
# works fine even when sdlamp2 replaces the stock menu. Hotspot/AP mode isn't
# needed — SSH access works over the shared network.
# --- Power button monitor ---
# TODO: Investigate power button input device.
# Run on device:
# cat /proc/bus/input/devices (find the power button event device)
# evtest /dev/input/eventN (confirm KEY_POWER event code)
# cat /etc/systemd/logind.conf (check HandlePowerKey setting)
#
# Strategy: read key events from the power button input device in background.
# When KEY_POWER (code 116) is detected, send SIGTERM to sdlamp2 and poweroff.
#
# POWER_EVENT_DEV="/dev/input/eventN" # TBD: set after investigation
#
# monitor_power_button() {
# # evtest writes one line per event; filter for KEY_POWER press (value 1)
# evtest "$POWER_EVENT_DEV" 2>/dev/null | while read -r line; do
# case "$line" in
# *"code 116"*"value 1"*)
# kill -TERM "$SDLAMP2_PID" 2>/dev/null
# sleep 1
# poweroff
# ;;
# esac
# done
# }
# monitor_power_button &
# MONITOR_PID=$!
# axp2202-pek on /dev/input/event0 sends KEY_POWER (code 116).
# logind has HandlePowerKey=ignore, so we handle it here.
POWER_EVENT_DEV="/dev/input/event0"
monitor_power_button() {
# evtest writes one line per event; filter for KEY_POWER press (value 1)
evtest "$POWER_EVENT_DEV" 2>/dev/null | while read -r line; do
case "$line" in
*"code 116"*"value 1"*)
kill -TERM "$SDLAMP2_PID" 2>/dev/null
sleep 1
poweroff
;;
esac
done
}
# --- Launch sdlamp2 ---
"$SDLAMP2" "$AUDIO_DIR"
# Run in background so we can capture PID for the power button monitor.
"$SDLAMP2" "$AUDIO_DIR" &
SDLAMP2_PID=$!
monitor_power_button &
MONITOR_PID=$!
# Wait for sdlamp2 to finish (signal or normal exit).
wait "$SDLAMP2_PID"
SDLAMP2_EXIT=$?
# --- Cleanup ---
# Kill the power button monitor if it's still running
# kill "$MONITOR_PID" 2>/dev/null
kill "$MONITOR_PID" 2>/dev/null
exit "$SDLAMP2_EXIT"