Merge pull request #1671 from dibdot/travelmate
[project/luci.git] / modules / luci-mod-admin-full / luasrc / model / cbi / admin_system / leds.lua
index b912f5e..2ea044e 100644 (file)
@@ -1,26 +1,17 @@
---[[
-LuCI - Lua Configuration Interface
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Licensed to the public under the Apache License 2.0.
 
-Copyright 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-]]--
 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 util = require "nixio.util"
+local nu   = require "nixio.util"
+local util = require "luci.util"
 
 if fs.access(sysfs_path) then
-       leds = util.consume((fs.dir(sysfs_path)))
+       leds = nu.consume((fs.dir(sysfs_path)))
 end
 
 if #leds == 0 then
@@ -119,6 +110,33 @@ function usbdev.remove(self, section)
        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 "?"
@@ -126,4 +144,15 @@ for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do
        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