• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
50 lines
1.5 KiB
Bash
Executable File
50 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# S90meow_launcherd - R3 Pro II Plan B app-launcher daemon (zero patch)
|
|
#
|
|
# Design (ANALYSIS.md §18):
|
|
# * PASSIVE daemon: never EVIOCGRABs, never injects events. Reads keys via
|
|
# EVIOCGKEY state polling (immune to any grab the player holds), touch via
|
|
# normal event reads on event1 (not grabbed). Zero interference with the
|
|
# player's own key handling.
|
|
# * Hotkey: hold PREVIOUS + VOL_UP together >=300ms -> app menu
|
|
# (cross-device: PREVIOUS is a GPIO key on event0, VOL_UP is an ADC key
|
|
# on event2. A two-key chord on event2 alone is impossible — its four
|
|
# keys share ONE ADC channel, so the old dual-volume hotkey can never
|
|
# register physically; see ANALYSIS.md §18.8).
|
|
# * Starts BEFORE S92_03_start_music_player (S90 < S92) so it is up early;
|
|
# the input devices are created by S11module_driver_default.
|
|
# * Stop sends SIGTERM; the daemon SIGCONTs a frozen player before exiting.
|
|
#
|
|
case "$1" in
|
|
start)
|
|
echo -n "Starting meow_launcherd: "
|
|
if [ -x /usr/bin/meow_launcherd ]; then
|
|
/usr/bin/meow_launcherd >/dev/null 2>&1 &
|
|
echo "OK"
|
|
else
|
|
echo "MISSING /usr/bin/meow_launcherd"
|
|
fi
|
|
;;
|
|
stop)
|
|
echo -n "Stopping meow_launcherd: "
|
|
if [ -f /usr/data/meow_launcherd.pid ]; then
|
|
kill "$(cat /usr/data/meow_launcherd.pid)" 2>/dev/null
|
|
fi
|
|
killall meow_launcherd 2>/dev/null
|
|
sleep 1
|
|
echo "OK"
|
|
;;
|
|
restart|reload)
|
|
"$0" stop
|
|
sleep 1
|
|
"$0" start
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|