xref: /OK3568_Linux_fs/buildroot/package/input-event-daemon/power-key.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#!/bin/sh
2
3EVENT=${1:-short-press}
4
5LONG_PRESS_TIMEOUT=3 # s
6DEBOUNCE=2 # s
7PIDFILE="/tmp/$(basename $0).pid"
8LOCKFILE=/tmp/.power_key
9
10short_press()
11{
12	logger -t $(basename $0) "[$$]: Power key short press..."
13
14	if which systemctl >/dev/null; then
15		SUSPEND_CMD="systemctl suspend"
16	elif which pm-suspend >/dev/null; then
17		SUSPEND_CMD="pm-suspend"
18	else
19		SUSPEND_CMD="echo -n mem > /sys/power/state"
20	fi
21
22	if [ ! -f $LOCKFILE ]; then
23		logger -t $(basename $0) "[$$]: Prepare to suspend..."
24
25		touch $LOCKFILE
26		sh -c "$SUSPEND_CMD"
27		{ sleep $DEBOUNCE && rm $LOCKFILE; }&
28	fi
29}
30
31long_press()
32{
33	logger -t $(basename $0) "[$$]: Power key long press (${LONG_PRESS_TIMEOUT}s)..."
34
35	logger -t $(basename $0) "[$$]: Prepare to power off..."
36
37	poweroff
38}
39
40logger -t $(basename $0) "[$$]: Received power key event: $@..."
41
42case "$EVENT" in
43	press)
44		# Lock it
45		exec 3<$0
46		flock -x 3
47
48		start-stop-daemon -K -q -p $PIDFILE || true
49		start-stop-daemon -S -q -b -m -p $PIDFILE -x /bin/sh -- \
50			-c "sleep $LONG_PRESS_TIMEOUT; $0 long-press"
51
52		# Unlock
53		flock -u 3
54		;;
55	release)
56		# Avoid race with press event
57		sleep .5
58
59		start-stop-daemon -K -q -p $PIDFILE && short_press
60		;;
61	short-press)
62		short_press
63		;;
64	long-press)
65		long_press
66		;;
67esac
68