blob: 24d790b065c1656bbd03ca34d963b4dda1990d63 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2015 OpenWrt.org
3
4START=94
5STOP=10
6USE_PROCD=1
7
8
9load_gpio_switch()
10{
11 local name
12 local gpio_pin
13 local value
14
15 config_get gpio_pin "$1" gpio_pin
16 config_get name "$1" name
17 config_get value "$1" value 0
18
19 [ -z "$gpio_pin" ] && {
20 echo >&2 "Skipping gpio_switch '$name' due to missing gpio_pin"
21 return 1
22 }
23
24 local gpio_path
25 if [ -n "$(echo "$gpio_pin" | grep -E "^[0-9]+$")" ]; then
26 gpio_path="/sys/class/gpio/gpio${gpio_pin}"
27
28 # export GPIO pin for access
29 [ -d "$gpio_path" ] || {
30 echo "$gpio_pin" >/sys/class/gpio/export
31 # we need to wait a bit until the GPIO appears
32 [ -d "$gpio_path" ] || sleep 1
33 }
34
35 # direction attribute only exists if the kernel supports changing the
36 # direction of a GPIO
37 if [ -e "${gpio_path}/direction" ]; then
38 # set the pin to output with high or low pin value
39 { [ "$value" = "0" ] && echo "low" || echo "high"; } \
40 >"$gpio_path/direction"
41 else
42 { [ "$value" = "0" ] && echo "0" || echo "1"; } \
43 >"$gpio_path/value"
44 fi
45 else
46 gpio_path="/sys/class/gpio/${gpio_pin}"
47
48 [ -d "$gpio_path" ] && {
49 { [ "$value" = "0" ] && echo "0" || echo "1"; } \
50 >"$gpio_path/value"
51 }
52 fi
53}
54
55service_triggers()
56{
57 procd_add_reload_trigger "system"
58}
59
60start_service()
61{
62 [ -e /sys/class/gpio/ ] && {
63 config_load system
64 config_foreach load_gpio_switch gpio_switch
65 }
66}