File: sxmo_wakelock.sh

package info (click to toggle)
sxmo-utils 1.14.2-1.1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 6,016 kB
  • sloc: sh: 9,166; ansic: 117; makefile: 68
file content (98 lines) | stat: -rw-r--r-- 1,883 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors

# shellcheck source=scripts/core/sxmo_common.sh
. sxmo_common.sh

usage() {
		cat >&2 <<EOF
Usage: $(basename "$0") ACTION
	lock <lock-name> <duration|nanosec|infinite>
	unlock <lock-name>
duration: <value><unit>
value: integer
unit: ms|s|mn|h (milisec, sec, minute, hour)
EOF
}

_validint() {
	if ! echo "$1" | grep -q '^[[:digit:]]\+$'; then
		echo "$1 isn't an integer" >&2
		exit 1
	fi
}

lock() {
	if [ "$#" -ne 2 ]; then
		sxmo_log "warning: sxmo_wakelock.sh $*"
		usage
		exit 1
	fi

	if [ ! -f /sys/power/wake_lock ]; then
		exit # we swallow when the system doesn't support it
	fi

	case "$2" in
		infinite)
			sxmo_debug "lock $1 infinite"
			echo "sxmo_$1" | doas tee -a /sys/power/wake_lock > /dev/null
			exit
			;;
		*ms)
			_validint "${2%ms}"
			set "$1" "${2%ms}000000"
			;;
		*s)
			_validint "${2%s}"
			set "$1" "${2%s}000000000"
			;;
		*mn)
			_validint "${2%mn}"
			set "$1" "$(printf "%s * 60000000000" "${2%mn}" | bc)"
			;;
		*h)
			_validint "${2%h}"
			set "$1" "$(printf "%s * 3600000000000" "${2%h}" | bc)"
			;;
	esac

	sxmo_debug "lock $1 $2"
	echo "sxmo_$1 $2" | doas tee -a /sys/power/wake_lock > /dev/null
}

unlock() {
	if [ "$#" -ne 1 ]; then
		usage
		sxmo_log "warning: sxmo_wakelock.sh $*"
		exit 1
	fi

	if [ ! -f /sys/power/wake_unlock ]; then
		exit # we swallow when the system doesn't support it
	fi

	sxmo_debug "unlock $1"
	echo "sxmo_$1" | doas tee -a /sys/power/wake_unlock > /dev/null 2>&1
}

debug() {
	if [ "$1" = "watch" ]; then
		watch -n1 cat /sys/power/wake_lock
	else
		tr " " "\n" < /sys/power/wake_lock | grep .
		tail -f "$XDG_STATE_HOME"/sxmo.log | grep "${0##*/}"
	fi
}

cmd="$1"
shift
case "$cmd" in
	lock) lock "$@";;
	unlock) unlock "$@";;
	debug) debug "$@";;
	*)
		sxmo_log "warning: sxmo_wakelock.sh $*"
		usage; exit 1;;
esac