base-files: implemented basic GPIO control
[openwrt.git] / package / base-files / files / etc / init.d / gpio_switch
diff --git a/package/base-files/files/etc/init.d/gpio_switch b/package/base-files/files/etc/init.d/gpio_switch
new file mode 100755 (executable)
index 0000000..1f1b44b
--- /dev/null
@@ -0,0 +1,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
+       }
+}