-
Notifications
You must be signed in to change notification settings - Fork 10
/
powerblock.sh
120 lines (95 loc) · 2.56 KB
/
powerblock.sh
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env bash
# ------------ USER CONFIGURATION HERE --------------
IS_ACTIVATED=1
STATUS_PIN=17
SHUTDOWN_PIN=18
DO_LOGGING=1
# ------------ NO EDITING BELOW THIS LINE -----------
VERSION_MAJOR=2
VERSION_MINOR=0
VERSION_PATCH=0
# Common path for all GPIO access
BASE_GPIO_PATH=/sys/class/gpio
# Assign names to states
STATE_ON="1"
STATE_OFF="0"
# ------------------- FUNCTION DEFINITIONS ---------------
# Exports a pin if not already exported
# Parameter $1: pin number
exportPin() {
if [ ! -e $BASE_GPIO_PATH/gpio$1 ]; then
echo "$1" > $BASE_GPIO_PATH/export
fi
}
# Set a pin as an output
# Parameter $1: pin number to be set as output pin
setDirectionOutput() {
echo "out" > $BASE_GPIO_PATH/gpio$1/direction
}
# Set a pin as an output
# Parameter $1: pin number to be set as output pin
setDirectionInput() {
echo "in" > $BASE_GPIO_PATH/gpio$1/direction
}
# Set value of a pin
# Parameter $1: pin number
# Parameter $2: output value. Can be 0 or 1
setPinValue() {
echo $2 > $BASE_GPIO_PATH/gpio$1/value
}
# Returns the current pin value
# Parameter $1: pin number to be read from
getPinValue() {
echo $(cat $BASE_GPIO_PATH/gpio$1/value)
}
# ---------------- LOGGING FUNCTIONALITY ---------------
# If the logger is enabled ($DO_LOGGING != 0), log events are written
# into syslog at /var/log/syslog. NOt working per default in Libreelec
write_log()
{
if [[ $DO_LOGGING != 0 ]]; then
while read text
do
logger -t powerblockservice $text
done
fi
}
# ---------------- BEGIN OF MAIN PART ------------------
echo "Starting PowerBlock driver, version $VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
if [[ $IS_ACTIVATED == 0 ]]; then
echo "Shutdown is DEACTIVATED"
else
echo "Shutdown is ACTIVATED"
fi
echo "Shutdown Pin is $SHUTDOWN_PIN"
echo "Status Pin is $STATUS_PIN"
exportPin $STATUS_PIN
exportPin $SHUTDOWN_PIN
setDirectionOutput $STATUS_PIN
setDirectionInput $SHUTDOWN_PIN
echo "Setting RPi status signal to HIGH"
setPinValue $STATUS_PIN $STATE_ON
stopRunning() {
echo "Exiting PowerBlock driver."
exit
}
# Ctrl-C handler for clean shutdown
trap stopRunning SIGINT
trap stopRunning SIGQUIT
trap stopRunning SIGABRT
trap stopRunning SIGTERM
isShutdownRunning=0
while [ 1 ]
do
sleep 1
if [[ $IS_ACTIVATED != 0 ]]; then
currentValue=$(getPinValue $SHUTDOWN_PIN)
if [ $currentValue -eq $STATE_ON ]; then
if [ $isShutdownRunning -eq 0 ]; then
echo "Shutdown signal observed. Executing shutdownscript $SHUTDOWNSCRIPT and initiating shutdown."
shutdown -h now &
isShutdownRunning=1
fi
fi
fi
done