diff options
author | Daniel F. Dickinson <cshored@thecshore.com> | 2018-08-03 12:36:51 -0400 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-09-19 20:08:19 +0200 |
commit | 58d97b5e271bc0d7507eab5b9bd2902181864e02 (patch) | |
tree | 80e250346ad33c79b3f821daf7b7d9be90d99240 /modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua | |
parent | 6ec0353201435e0d0d7d32820d8ba600b4ca7b5b (diff) |
modules: Split luci-mod-full
Move some common elements to luci-base, and otherwise make three
packages out of status, system, and network. They were mostly
separated already, but there were some shared elements between
status and network that are now in luci-base.
Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
Diffstat (limited to 'modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua')
-rw-r--r-- | modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua b/modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua new file mode 100644 index 0000000000..2ea044e16a --- /dev/null +++ b/modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua @@ -0,0 +1,158 @@ +-- Copyright 2008 Steven Barth <steven@midlink.org> +-- Licensed to the public under the Apache License 2.0. + +m = Map("system", translate("<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"), translate("Customizes the behaviour of the device <abbr title=\"Light Emitting Diode\">LED</abbr>s if possible.")) + +local sysfs_path = "/sys/class/leds/" +local leds = {} + +local fs = require "nixio.fs" +local nu = require "nixio.util" +local util = require "luci.util" + +if fs.access(sysfs_path) then + leds = nu.consume((fs.dir(sysfs_path))) +end + +if #leds == 0 then + return m +end + + +s = m:section(TypedSection, "led", "") +s.anonymous = true +s.addremove = true + +function s.parse(self, ...) + TypedSection.parse(self, ...) + os.execute("/etc/init.d/led enable") +end + + +s:option(Value, "name", translate("Name")) + + +sysfs = s:option(ListValue, "sysfs", translate("<abbr title=\"Light Emitting Diode\">LED</abbr> Name")) +for k, v in ipairs(leds) do + sysfs:value(v) +end + +s:option(Flag, "default", translate("Default state")).rmempty = false + + +trigger = s:option(ListValue, "trigger", translate("Trigger")) + +local triggers = fs.readfile(sysfs_path .. leds[1] .. "/trigger") +for t in triggers:gmatch("[%w-]+") do + trigger:value(t, translate(t:gsub("-", ""))) +end + + +delayon = s:option(Value, "delayon", translate ("On-State Delay")) +delayon:depends("trigger", "timer") + +delayoff = s:option(Value, "delayoff", translate ("Off-State Delay")) +delayoff:depends("trigger", "timer") + + +dev = s:option(ListValue, "_net_dev", translate("Device")) +dev.rmempty = true +dev:value("") +dev:depends("trigger", "netdev") + +function dev.cfgvalue(self, section) + return m.uci:get("system", section, "dev") +end + +function dev.write(self, section, value) + m.uci:set("system", section, "dev", value) +end + +function dev.remove(self, section) + local t = trigger:formvalue(section) + if t ~= "netdev" and t ~= "usbdev" then + m.uci:delete("system", section, "dev") + end +end + +for k, v in pairs(luci.sys.net.devices()) do + if v ~= "lo" then + dev:value(v) + end +end + + +mode = s:option(MultiValue, "mode", translate("Trigger Mode")) +mode.rmempty = true +mode:depends("trigger", "netdev") +mode:value("link", translate("Link On")) +mode:value("tx", translate("Transmit")) +mode:value("rx", translate("Receive")) + + +usbdev = s:option(ListValue, "_usb_dev", translate("USB Device")) +usbdev:depends("trigger", "usbdev") +usbdev.rmempty = true +usbdev:value("") + +function usbdev.cfgvalue(self, section) + return m.uci:get("system", section, "dev") +end + +function usbdev.write(self, section, value) + m.uci:set("system", section, "dev", value) +end + +function usbdev.remove(self, section) + local t = trigger:formvalue(section) + if t ~= "netdev" and t ~= "usbdev" then + m.uci:delete("system", section, "dev") + end +end + + +usbport = s:option(MultiValue, "port", translate("USB Ports")) +usbport:depends("trigger", "usbport") +usbport.rmempty = true +usbport.widget = "checkbox" +usbport.cast = "table" +usbport.size = 1 + +function usbport.valuelist(self, section) + local port, ports = nil, {} + for port in util.imatch(m.uci:get("system", section, "port")) do + local b, n = port:match("^usb(%d+)-port(%d+)$") + if not (b and n) then + b, n = port:match("^(%d+)-(%d+)$") + end + if b and n then + ports[#ports+1] = "usb%u-port%u" %{ tonumber(b), tonumber(n) } + end + end + return ports +end + +function usbport.validate(self, value) + return type(value) == "string" and { value } or value +end + + +for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do + local id = p:match("%d+-%d+") + local mf = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/manufacturer") or "?" + local pr = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/product") or "?" + usbdev:value(id, "%s (%s - %s)" %{ id, mf, pr }) +end + +for p in nixio.fs.glob("/sys/bus/usb/devices/*/usb[0-9]*-port[0-9]*") do + local bus, port = p:match("usb(%d+)-port(%d+)") + if bus and port then + usbport:value("usb%u-port%u" %{ tonumber(bus), tonumber(port) }, + "Hub %u, Port %u" %{ tonumber(bus), tonumber(port) }) + end +end + +port_mask = s:option(Value, "port_mask", translate ("Switch Port Mask")) +port_mask:depends("trigger", "switch0") + +return m |