luci-0.10: merge r8046-r8051
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Dec 2011 19:44:20 +0000 (19:44 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Dec 2011 19:44:20 +0000 (19:44 +0000)
libs/core/luasrc/model/network.lua
modules/admin-core/luasrc/tools/status.lua
modules/admin-full/luasrc/controller/admin/network.lua
modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua

index 61da9df..d682aa9 100644 (file)
@@ -17,8 +17,11 @@ limitations under the License.
 
 ]]--
 
-local type, next, pairs, ipairs, loadfile, table, tonumber, math, i18n
-       = type, next, pairs, ipairs, loadfile, table, tonumber, math, luci.i18n
+local type, next, pairs, ipairs, loadfile, table
+       = type, next, pairs, ipairs, loadfile, table
+
+local tonumber, tostring, math, i18n
+       = tonumber, tostring, math, luci.i18n
 
 local require = require
 
@@ -1360,7 +1363,12 @@ function wifinet.country(self)
 end
 
 function wifinet.txpower(self)
-       return self.iwinfo.txpower or 0
+       local pwr = (self.iwinfo.txpower or 0)
+       return pwr + self:txpower_offset()
+end
+
+function wifinet.txpower_offset(self)
+       return self.iwinfo.txpower_offset or 0
 end
 
 function wifinet.signal_level(self, s, n)
index ff98d45..2eef3e0 100644 (file)
@@ -85,7 +85,8 @@ function wifi_networks()
                                ifname     = net:ifname(),
                                assoclist  = net:assoclist(),
                                country    = net:country(),
-                               txpower    = net:txpower()
+                               txpower    = net:txpower(),
+                               txpoweroff = net:txpower_offset()
                        }
                end
 
@@ -120,6 +121,7 @@ function wifi_network(id)
                                assoclist  = net:assoclist(),
                                country    = net:country(),
                                txpower    = net:txpower(),
+                               txpoweroff = net:txpower_offset(),
                                device     = {
                                        up     = dev:is_up(),
                                        device = dev:name(),
index a79d080..b02cfd5 100644 (file)
@@ -203,14 +203,14 @@ function wifi_delete(network)
                local dev = wnet:get_device()
                local net = wnet:get_network()
                if dev then
-                       luci.sys.call("env -i /sbin/wifi down %q" % dev:name())
+                       luci.sys.call("env -i /sbin/wifi down %q >/dev/null" % dev:name())
                        ntm:del_wifinet(network)
                        ntm:commit("wireless")
                        if net:is_empty() then
                                ntm:del_network(net:name())
                                ntm:commit("network")
                        end
-                       luci.sys.call("env -i /sbin/wifi up %q" % dev:name())
+                       luci.sys.call("env -i /sbin/wifi up %q >/dev/null" % dev:name())
                end
        end
 
index 77e68d5..b7cfec4 100644 (file)
@@ -70,13 +70,45 @@ end
 m.title = luci.util.pcdata(wnet:get_i18n())
 
 
+local function txpower_list(iw)
+       local list = iw.txpwrlist or { }
+       local off  = tonumber(iw.txpower_offset) or 0
+       local new  = { }
+       local prev = -1
+       local _, val
+       for _, val in ipairs(list) do
+               local dbm = val.dbm + off
+               local mw  = math.floor(10 ^ (dbm / 10))
+               if mw ~= prev then
+                       prev = mw
+                       new[#new+1] = {
+                               display_dbm = dbm,
+                               display_mw  = mw,
+                               driver_dbm  = val.dbm,
+                               driver_mw   = val.mw
+                       }
+               end
+       end
+       return new
+end
+
+local function txpower_current(pwr, list)
+       pwr = tonumber(pwr)
+       if pwr ~= nil then
+               local _, item
+               for _, item in ipairs(list) do
+                       if item.driver_dbm >= pwr then
+                               return item.driver_dbm
+                       end
+               end
+       end
+       return (list[#list] and list[#list].driver_dbm) or pwr or 0
+end
+
 local iw = luci.sys.wifi.getiwinfo(arg[1])
-local hw_modes  = iw.hwmodelist or { }
-local tx_powers = iw.txpwrlist  or { }
-local tx_power  = tostring(
-       (iw.txpower and iw.txpower > 0 and iw.txpower) or
-       (#tx_powers > 0 and tx_powers[#tx_powers].dbm)
-)
+local hw_modes      = iw.hwmodelist or { }
+local tx_power_list = txpower_list(iw)
+local tx_power_cur  = txpower_current(wdev:get("txpower"), tx_power_list)
 
 s = m:section(NamedSection, wdev:name(), "wifi-device", translate("Device Configuration"))
 s.addremove = false
@@ -143,13 +175,19 @@ end
 
 if hwtype == "mac80211" then
        tp = s:taboption("general",
-               (tx_powers and #tx_powers > 0) and ListValue or Value,
+               (#tx_power_list > 0) and ListValue or Value,
                "txpower", translate("Transmit Power"), "dBm")
 
        tp.rmempty = true
-       tp.default = tx_power
-       for _, p in ipairs(tx_powers or {}) do
-               tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
+       tp.default = tx_power_cur
+
+       function tp.cfgvalue(...)
+               return txpower_current(Value.cfgvalue(...), tx_power_list)
+       end
+
+       for _, p in ipairs(tx_power_list) do
+               tp:value(p.driver_dbm, "%i dBm (%i mW)"
+                       %{ p.display_dbm, p.display_mw })
        end
 
        mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))
@@ -197,13 +235,19 @@ end
 
 if hwtype == "atheros" then
        tp = s:taboption("general",
-               (#tx_powers > 0) and ListValue or Value,
+               (#tx_power_list > 0) and ListValue or Value,
                "txpower", translate("Transmit Power"), "dBm")
 
        tp.rmempty = true
-       tp.default = tx_power
-       for _, p in ipairs(tx_powers or {}) do
-               tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
+       tp.default = tx_power_cur
+
+       function tp.cfgvalue(...)
+               return txpower_current(Value.cfgvalue(...), tx_power_list)
+       end
+
+       for _, p in ipairs(tx_power_list) do
+               tp:value(p.driver_dbm, "%i dBm (%i mW)"
+                       %{ p.display_dbm, p.display_mw })
        end
 
        mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))
@@ -258,13 +302,19 @@ end
 
 if hwtype == "broadcom" then
        tp = s:taboption("general",
-               (#tx_powers > 0) and ListValue or Value,
+               (#tx_power_list > 0) and ListValue or Value,
                "txpower", translate("Transmit Power"), "dBm")
 
        tp.rmempty = true
-       tp.default = tx_power
-       for _, p in ipairs(tx_powers or {}) do
-               tp:value(p.dbm, "%i dBm (%i mW)" %{ p.dbm, p.mw })
+       tp.default = tx_power_cur
+
+       function tp.cfgvalue(...)
+               return txpower_current(Value.cfgvalue(...), tx_power_list)
+       end
+
+       for _, p in ipairs(tx_power_list) do
+               tp:value(p.driver_dbm, "%i dBm (%i mW)"
+                       %{ p.display_dbm, p.display_mw })
        end
 
        mode = s:taboption("advanced", ListValue, "hwmode", translate("Mode"))