summaryrefslogtreecommitdiff
path: root/package/base-files/files/etc/init.d/gpio_switch
blob: 1f1b44b2129ce2315943f6a10508eefb66412c48 (plain)
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
#!/bin/sh /etc/rc.common
# Copyright (C) 2015 OpenWrt.org

START=98
STOP=10
USE_PROCD=1


load_gpio_switch()
{
	local name
	local gpio_pin
	local value

	config_get gpio_pin "$1" gpio_pin
	config_get name "$1" name
	config_get value "$1" value 0

	local gpio_path="/sys/class/gpio/gpio${gpio_pin}"
	# export GPIO pin for access
	[ -d "$gpio_path" ] || {
		echo "$gpio_pin" >/sys/class/gpio/export
		# we need to wait a bit until the GPIO appears
		[ -d "$gpio_path" ] || sleep 1
		echo out >"$gpio_path/direction"
	}
	# write 0 or 1 to the "value" field
	{ [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
}

service_triggers()
{
	procd_add_reload_trigger "system"
}

start_service()
{
	[ -e /sys/class/gpio/ ] && {
		config_load system
		config_foreach load_gpio_switch gpio_switch
	}
}