From: Jo-Philipp Wich Date: Mon, 5 Dec 2011 19:44:20 +0000 (+0000) Subject: luci-0.10: merge r8046-r8051 X-Git-Tag: 0.10.0~21 X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=5e3c4fbeac9e5fd09d7e07f335230027c58ff42f;p=project%2Fluci.git luci-0.10: merge r8046-r8051 --- diff --git a/libs/core/luasrc/model/network.lua b/libs/core/luasrc/model/network.lua index 61da9dfd04..d682aa954f 100644 --- a/libs/core/luasrc/model/network.lua +++ b/libs/core/luasrc/model/network.lua @@ -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) diff --git a/modules/admin-core/luasrc/tools/status.lua b/modules/admin-core/luasrc/tools/status.lua index ff98d459ba..2eef3e0e1c 100644 --- a/modules/admin-core/luasrc/tools/status.lua +++ b/modules/admin-core/luasrc/tools/status.lua @@ -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(), diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index a79d080a7c..b02cfd5766 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -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 diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua index 77e68d5a03..b7cfec44d9 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -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"))