|
@@ -0,0 +1,850 @@
|
|
|
+
|
|
|
+<%+header%>
|
|
|
+<!--
|
|
|
+ This module is a demo to configure MTK' proprietary WiFi driver.
|
|
|
+ Basic idea is to bypass uci and edit wireless profile (mt76xx.dat) directly.
|
|
|
+ LuCI's WiFi configuration is more logical and elegent, but it's quite tricky to
|
|
|
+ translate uci into MTK's WiFi profile (like we did in "uci2dat").
|
|
|
+ Hua Shao <[email protected]>
|
|
|
+-->
|
|
|
+
|
|
|
+<%
|
|
|
+local disp = require "luci.dispatcher"
|
|
|
+-- local request = disp.context.path
|
|
|
+local request = disp.context.request
|
|
|
+local mtkwifi = require("mtkwifi")
|
|
|
+local devname = request[5]
|
|
|
+local devs = mtkwifi.get_all_devs()
|
|
|
+local dev = {}
|
|
|
+for _,v in ipairs(devs) do
|
|
|
+ if v.devname == devname then
|
|
|
+ dev = v
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+local cfgs = mtkwifi.load_profile(dev.profile)
|
|
|
+
|
|
|
+%>
|
|
|
+
|
|
|
+
|
|
|
+<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-17.250.41546-90ac861"></script>
|
|
|
+
|
|
|
+<div id="loading" style="margin-top: 1em; display: none;">
|
|
|
+<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:e;" />
|
|
|
+ Please waiting while the page is loading......
|
|
|
+</div>
|
|
|
+
|
|
|
+<form method="post" name="cbi" action="<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg", devname)%>" enctype="multipart/form-data" onreset="return cbi_validate_reset(this)" onsubmit="return cbi_validate_form(this, 'Some fields are invalid, cannot save values!')" autocomplete="false">
|
|
|
+ <fieldset class="cbi-section">
|
|
|
+ <legend> 无线高级设置 - <%=devname%>
|
|
|
+<%
|
|
|
+local diff = mtkwifi.diff_profile(dev.profile)
|
|
|
+if next(diff) ~= nil then
|
|
|
+%>
|
|
|
+ <span style="color:red;">(<a href="javascript:location.href='<%=luci.dispatcher.build_url("admin", "network", "wifi", "reload", dev.devname)%>'">reload</a> to apply changes)</span>
|
|
|
+<%
|
|
|
+ end
|
|
|
+%>
|
|
|
+ </legend>
|
|
|
+ <table id="dev-cfg-basic" class="cbi-section-table">
|
|
|
+ <tr><th></th><td></td><td></td></tr>
|
|
|
+ <tr>
|
|
|
+ <td>模式</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto" name="WirelessMode" id="WirelessMode" onchange="WirelessMode_onchange(this.options[this.options.selectedIndex].value)">
|
|
|
+ <% for k,v in pairs(dev.WirelessModeList) do %>
|
|
|
+ <option value="<%=k%>" <% if tonumber(dev.WirelessMode) == tonumber(k) then%> selected="selected"<% end %>><%=k%> - <%=v%></option>
|
|
|
+ <% end %>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>信道</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto; min-width:180px;" name="Channel" id="Channel" onchange="Channel_onchange(this.value)" <% if cfgs.ApCliEnable == "1" then %> disabled="disabled" <% end %>>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td><% if cfgs.ApCliEnable == "1" then %> APClient/Repeater Mode. <% end %></td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>区域代码</td>
|
|
|
+ <td>
|
|
|
+ <select name="CountryCode" style="width:auto">
|
|
|
+ <option value="US" id="advCountryCodeUS" <% if cfgs.CountryCode == "US" then %> selected="selected"<% end %>>US (United States)</option>
|
|
|
+ <option value="JP" id="advCountryCodeJP" <% if cfgs.CountryCode == "JP" then %> selected="selected"<% end %>>JP (Japan)</option>
|
|
|
+ <option value="FR" id="advCountryCodeFR" <% if cfgs.CountryCode == "FR" then %> selected="selected"<% end %>>FR (France)</option>
|
|
|
+ <option value="TW" id="advCountryCodeTW" <% if cfgs.CountryCode == "TW" then %> selected="selected"<% end %>>TW (Taiwan)</option>
|
|
|
+ <option value="IE" id="advCountryCodeIE" <% if cfgs.CountryCode == "IE" then %> selected="selected"<% end %>>IE (Ireland)</option>
|
|
|
+ <option value="HK" id="advCountryCodeHK" <% if cfgs.CountryCode == "HK" then %> selected="selected"<% end %>>HK (Hong Kong)</option>
|
|
|
+ <option value="NONE" id="advCountryCodeNONE"<% if cfgs.CountryCode == "NONE" then %> checked="checked"<% end %>>NONE</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>Country Region</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto; min-width:180px;" name="__cr" id="__cr" onchange="CountryRegion_onchange(this.value)">
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% if cfgs.HT_OpMode then %>
|
|
|
+ <tr>
|
|
|
+ <td>无线模式</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto" name="HT_OpMode">
|
|
|
+ <option value="0" <% if cfgs.HT_OpMode == "0" then %> selected="selected"<% end%>>正常模式</option>
|
|
|
+ <option value="1" <% if cfgs.HT_OpMode == "1" then %> selected="selected"<% end%>>绿色模式</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_GI then %>
|
|
|
+ <tr>
|
|
|
+ <td>HT Guard Interval</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto" name="HT_GI">
|
|
|
+ <option value="0" <% if cfgs.HT_GI == "0" then %> selected="selected"<% end%>>Long</option>
|
|
|
+ <option value="1" <% if cfgs.HT_GI == "1" then %> selected="selected"<% end%>>Short</option>
|
|
|
+ <option value="2" <% if cfgs.HT_GI == "2" then %> selected="selected"<% end%>>Auto</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <tr>
|
|
|
+ <td>信道带宽</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto" name="__bw" id="__bw" onchange="Bw_onchange(this.options[this.options.selectedIndex].value)">
|
|
|
+ <option value="20" <% if dev.__bw == "20" then %> selected="selected"<% end%>>20 MHz</option>
|
|
|
+ <option value="40" <% if dev.__bw == "40" then %> selected="selected"<% end%>>40 MHz</option>
|
|
|
+ <option value="60" <% if dev.__bw == "60" then %> selected="selected"<% end%>>20/40 MHz</option>
|
|
|
+ <option value="80" <% if dev.__bw == "80" then %> selected="selected"<% end%>>80 MHz</option>
|
|
|
+ <option value="160" <% if dev.__bw == "160" then %> selected="selected"<% end%>>160 MHz</option>
|
|
|
+ <option value="161" <% if dev.__bw == "161" then %> selected="selected"<% end%>>80+80 MHz</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% if cfgs.VHT_BW then %>
|
|
|
+ <tr>
|
|
|
+ <td>2G 40MHZ模式辅助信道</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto; min-width:180px;" name="HT_EXTCHA" id="HT_EXTCHA" <% if cfgs.ApCliEnable == "1" or dev.__bw ~= "40" or dev.__bw ~= "60" then %> disabled="disabled" <% end %>>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td><% if cfgs.ApCliEnable == "1" then %> APClient/Repeater Mode. <% end %></td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>5G 2nd 80Mhz Channel</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto; min-width:180px;" name="VHT_Sec80_Channel" id="VHT_Sec80_Channel" <% if cfgs.ApCliEnable == "1" or dev.__bw ~= "180" then %> disabled="disabled" <% end %>>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td><% if cfgs.ApCliEnable == "1" then %> APClient/Repeater Mode. <% end %></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_STBC then %>
|
|
|
+ <tr>
|
|
|
+ <td>STBC</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_STBC" value="1" <% if cfgs.HT_STBC == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_STBC" value="0" <% if cfgs.HT_STBC == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_AMSDU then %>
|
|
|
+ <tr>
|
|
|
+ <td>A-MSDU</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_AMSDU" value="1" <% if cfgs.HT_AMSDU == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_AMSDU" value="0" <% if cfgs.HT_AMSDU == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_AutoBA then %>
|
|
|
+ <tr>
|
|
|
+ <td>Auto Block ACK</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_AutoBA" value="1" <% if cfgs.HT_AutoBA == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_AutoBA" value="0" <% if cfgs.HT_AutoBA == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_BADecline then %>
|
|
|
+ <tr>
|
|
|
+ <td>Decline BA Request</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_BADecline" value="1" <% if cfgs.HT_BADecline == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_BADecline" value="0" <% if cfgs.HT_BADecline == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_DisallowTKIP then %>
|
|
|
+ <tr>
|
|
|
+ <td>HT Disallow TKIP</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_DisallowTKIP" value="1" <% if cfgs.HT_DisallowTKIP == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_DisallowTKIP" value="0" <% if cfgs.HT_DisallowTKIP == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.HT_LDPC then %>
|
|
|
+ <tr>
|
|
|
+ <td>HT LDPC</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_LDPC" value="1" <% if cfgs.HT_LDPC == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_LDPC" value="0" <% if cfgs.HT_LDPC == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.VHT_SGI then %>
|
|
|
+ <tr>
|
|
|
+ <td>VHT Short GI</td>
|
|
|
+ <td>
|
|
|
+ <select style="width:auto" name="VHT_SGI">
|
|
|
+ <option value="0" <% if cfgs.VHT_SGI == "0" then %> selected="selected"<% end%>>Long</option>
|
|
|
+ <option value="1" <% if cfgs.VHT_SGI == "1" then %> selected="selected"<% end%>>Short</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.VHT_STBC then %>
|
|
|
+ <tr>
|
|
|
+ <td>VHT STBC</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="VHT_STBC" value="1" <% if cfgs.VHT_STBC == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="VHT_STBC" value="0" <% if cfgs.VHT_STBC == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.VHT_BW_SIGNAL then %>
|
|
|
+ <tr>
|
|
|
+ <td>VHT BW Signaling</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="VHT_BW_SIGNAL" value="1" <% if cfgs.VHT_BW_SIGNAL == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="VHT_BW_SIGNAL" value="0" <% if cfgs.VHT_BW_SIGNAL == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ <input type="radio" name="VHT_BW_SIGNAL" value="0" <% if cfgs.VHT_BW_SIGNAL == "2" then %> checked="checked"<% end %>/> Dynamic
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.VHT_LDPC then %>
|
|
|
+ <tr>
|
|
|
+ <td>VHT LDPC</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="VHT_LDPC" value="1" <% if cfgs.VHT_LDPC == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="VHT_LDPC" value="0" <% if cfgs.VHT_LDPC == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.BGProtection then %>
|
|
|
+ <tr>
|
|
|
+ <td>BG Protection Mode</td>
|
|
|
+ <td>
|
|
|
+ <select name="BGProtection" style="width:auto">
|
|
|
+ <option value="0" <% if cfgs.BGProtection == "0" then %>selected="selected"<% end %>>Auto</option>
|
|
|
+ <option value="1" <% if cfgs.BGProtection == "1" then %>selected="selected"<% end %>>Always On</option>
|
|
|
+ <option value="2" <% if cfgs.BGProtection == "2" then %>selected="selected"<% end %>>Always Off</option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.VHT_BW then %>
|
|
|
+ <tr>
|
|
|
+ <td>HT Protection</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="HT_PROTECT" value="1" <% if cfgs.HT_PROTECT == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="HT_PROTECT" value="0" <% if cfgs.HT_PROTECT == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.BeaconPeriod then %>
|
|
|
+ <tr>
|
|
|
+ <td>Beacon Interval</td>
|
|
|
+ <td>
|
|
|
+ <input name="BeaconPeriod" value="<%=cfgs.BeaconPeriod%>" />ms(范围 20-999, 默认值 100)
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.DtimPeriod then %>
|
|
|
+ <tr>
|
|
|
+ <td>Data Beacon Rate (DTIM)</td>
|
|
|
+ <td>
|
|
|
+ <input name="DtimPeriod" value="<%=cfgs.DtimPeriod%>" />ms(范围 1-255, 默认值 1)
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.FragThreshold then %>
|
|
|
+ <tr>
|
|
|
+ <td>Fragment Threshold</td>
|
|
|
+ <td>
|
|
|
+ <input name="FragThreshold" value="<%=cfgs.FragThreshold%>" />(范围 256-2346, 默认值 2346)
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.RTSThreshold then %>
|
|
|
+ <tr>
|
|
|
+ <td>RTS Threshold</td>
|
|
|
+ <td>
|
|
|
+ <input name="RTSThreshold" value="<%=cfgs.RTSThreshold%>" />(范围 256-2347, 默认值 2347)
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.TxPower then %>
|
|
|
+ <tr>
|
|
|
+ <td>TX Power</td>
|
|
|
+ <td>
|
|
|
+ <input name="TxPower" value="<%=cfgs.TxPower%>" />dbm(范围 1-100, 默认值 100)
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.TxPreamble then %>
|
|
|
+ <tr>
|
|
|
+ <td>Short Preamble</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="TxPreamble" value="1" <% if cfgs.TxPreamble == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="TxPreamble" value="0" <% if cfgs.TxPreamble == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.ShortSlot then %>
|
|
|
+ <tr>
|
|
|
+ <td>Short Slot</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="ShortSlot" value="1" <% if cfgs.ShortSlot == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="ShortSlot" value="0" <% if cfgs.ShortSlot == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.TxBurst then %>
|
|
|
+ <tr>
|
|
|
+ <td>TX Burst</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="TxBurst" value="1" <% if cfgs.TxBurst == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="TxBurst" value="0" <% if cfgs.TxBurst == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.PktAggregate then %>
|
|
|
+ <tr>
|
|
|
+ <td>Packet Aggregate</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="PktAggregate" value="1" <% if cfgs.PktAggregate == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="PktAggregate" value="0" <% if cfgs.PktAggregate == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ <% if cfgs.IEEE80211H then %>
|
|
|
+ <tr>
|
|
|
+ <td>802.11H</td>
|
|
|
+ <td>
|
|
|
+ <input type="radio" name="IEEE80211H" value="1" <% if cfgs.IEEE80211H == "1" then %> checked="checked"<% end %>/> 启用
|
|
|
+ <input type="radio" name="IEEE80211H" value="0" <% if cfgs.IEEE80211H == "0" then %> checked="checked"<% end %>/> 禁用
|
|
|
+ </td>
|
|
|
+ <td></td>
|
|
|
+ </tr>
|
|
|
+ <% end %>
|
|
|
+ </table>
|
|
|
+
|
|
|
+
|
|
|
+ </fieldset>
|
|
|
+ <div class="cbi-page-actions">
|
|
|
+ <input class="cbi-button cbi-button-apply" value="重启无线" type="button" onclick='wifi_reload("<%=luci.dispatcher.build_url("admin", "network", "wifi", "reload", devname)%>");' />
|
|
|
+ <input class="cbi-button cbi-button-apply" value="保存设置" type="submit" />
|
|
|
+ <input class="cbi-button cbi-button-apply" name="__apply" value="保存&应用" type="submit" />
|
|
|
+ <input class="cbi-button cbi-button-reset" value="重置" type="reset" />
|
|
|
+ </div>
|
|
|
+</form>
|
|
|
+
|
|
|
+
|
|
|
+<form method="post" name="cbi2" action="<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg_raw", devname)%>" enctype="multipart/form-data" onreset="return cbi_validate_reset(this)" onsubmit="return cbi_validate_form(this, 'Some fields are invalid, cannot save values!')" autocomplete="off">
|
|
|
+ <fieldset class="cbi-section">
|
|
|
+ <legend> 无线参数(直接修改无线配置)</legend>
|
|
|
+ <p> <span style="color: red"><b>警告</b></span> : 如果你不了解请不要修改!</p>
|
|
|
+ <textarea name="raw" id="raw" style="width:98%; height: 200px;"><%
|
|
|
+ local fd = io.open(dev.profile)
|
|
|
+ for line in fd:lines() do
|
|
|
+ print(line)
|
|
|
+ end
|
|
|
+ %></textarea>
|
|
|
+ </fieldset>
|
|
|
+ <div class="cbi-page-actions">
|
|
|
+ <input class="cbi-button cbi-button-reset" value="重置" onclick="location.href='<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg_view", devname)%>'" type="button" />
|
|
|
+ <input class="cbi-button cbi-button-apply" id="save" value="保存" type="submit" onclick="if (confirm('你将修改无线参数,确认要修改?')) return true; else return false;" />
|
|
|
+ <input class="cbi-button cbi-button-apply" id="reset" value="恢复出厂设置" type="button" onclick="if (confirm(' 确认恢复<%=devname%> 至出厂设置?')) location.href='<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg_reset", devname)%>'" />
|
|
|
+ </div>
|
|
|
+</form>
|
|
|
+
|
|
|
+
|
|
|
+<script type="text/javascript">
|
|
|
+ function wifi_reload(url) {
|
|
|
+ window.scrollTo(0, 0);
|
|
|
+ document.getElementById('loading').style.display="";
|
|
|
+ XHR.get(url, null,
|
|
|
+ function(x)
|
|
|
+ {
|
|
|
+ console.log(x);
|
|
|
+ document.getElementById("loading").style.display="none";
|
|
|
+ window.location.reload();
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function WirelessMode_onchange (mode) {
|
|
|
+ var cr = GetCountryRegion(mode);
|
|
|
+
|
|
|
+ getCountryRegionList(mode, cr);
|
|
|
+ }
|
|
|
+
|
|
|
+ function CountryRegion_onchange(country_region) {
|
|
|
+ var wmode_o = document.getElementById('WirelessMode');
|
|
|
+ var wmode;
|
|
|
+
|
|
|
+ if (wmode_o)
|
|
|
+ wmode = wmode_o.value;
|
|
|
+
|
|
|
+ if (wmode == "")
|
|
|
+ wmode = "<%=cfgs.WirelessMode%>";
|
|
|
+
|
|
|
+ getChannelList(wmode, country_region);
|
|
|
+ }
|
|
|
+
|
|
|
+ function Channel_onchange (ch) {
|
|
|
+ getBw(null, ch);
|
|
|
+ }
|
|
|
+
|
|
|
+ function Bw_onchange(bw, ch) {
|
|
|
+ var ch_val;
|
|
|
+
|
|
|
+ if (!ch){
|
|
|
+ var ch_o = document.getElementById('Channel');
|
|
|
+
|
|
|
+ if (ch_o)
|
|
|
+ ch_val = ch_o.value;
|
|
|
+
|
|
|
+ if (ch_val == "")
|
|
|
+ ch_val = "<%=cfgs.Channel%>";
|
|
|
+ } else {
|
|
|
+ ch_val = ch
|
|
|
+ }
|
|
|
+
|
|
|
+ get5G2nd80MhzChannelList(bw, ch_val);
|
|
|
+ getHTExtChannel(bw, ch_val);
|
|
|
+ }
|
|
|
+
|
|
|
+ function initCountryRegionList(list, mode){
|
|
|
+ var select = document.getElementById('__cr');
|
|
|
+ var cr = {};
|
|
|
+
|
|
|
+ if (is_mode_gband(mode))
|
|
|
+ cr = "<%=cfgs.CountryRegion%>";
|
|
|
+ else if (is_mode_aband(mode))
|
|
|
+ cr = "<%=cfgs.CountryRegionABand%>";
|
|
|
+
|
|
|
+ var new_cr = initList(select, list, cr, "region");
|
|
|
+
|
|
|
+ CountryRegion_onchange(new_cr);
|
|
|
+ }
|
|
|
+
|
|
|
+ function getCountryRegionList(mode) {
|
|
|
+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_country_region_list")%>', { "mode" : mode },
|
|
|
+ function(x)
|
|
|
+ {
|
|
|
+ //console.log(x);
|
|
|
+ //console.log(x.response);
|
|
|
+ var json = eval(x.response);
|
|
|
+ initCountryRegionList(json, mode);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function initChannelList(list) {
|
|
|
+ /* choose auto select when no matching item in the lis */
|
|
|
+ var select = document.getElementById('Channel');
|
|
|
+ var ch = {};
|
|
|
+ var new_ch = null;
|
|
|
+
|
|
|
+ ch.cval = select.value;
|
|
|
+ ch.oval = "<%=dev.Channel%>";
|
|
|
+
|
|
|
+ var new_ch = initList(select, list, ch, "channel");
|
|
|
+ Channel_onchange(new_ch);
|
|
|
+ }
|
|
|
+
|
|
|
+ function getChannelList(mode, country_region) {
|
|
|
+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_channel_list")%>', { "mode" : mode, "country_region" : country_region },
|
|
|
+ function(x)
|
|
|
+ {
|
|
|
+ console.log(x);
|
|
|
+ console.log(x.response);
|
|
|
+ var json = eval(x.response);
|
|
|
+ initChannelList(json);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function GetCountryRegion(mode) {
|
|
|
+ var cr_o = document.getElementById('__cr');
|
|
|
+ var cr = "";
|
|
|
+
|
|
|
+ if (cr_o) {
|
|
|
+ cr = cr_o.value;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cr == "") {
|
|
|
+ if (is_mode_gband(mode)) {
|
|
|
+ cr = "<%=cfgs.CountryRegion%>";
|
|
|
+ } else if (is_mode_aband(mode)) {
|
|
|
+ cr = "<%=cfgs.CountryRegionABand%>";
|
|
|
+ } else {
|
|
|
+ alert("Cannot get valid CountryRegion from invalid WireleeMode");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return cr;
|
|
|
+ }
|
|
|
+
|
|
|
+ function getBw(mode, ch) {
|
|
|
+ /* choose bw as wide as possible if modification is needed */
|
|
|
+ var bw_sel = document.getElementById('__bw');
|
|
|
+ var wmode;
|
|
|
+
|
|
|
+ if (!mode) {
|
|
|
+ wmode = document.getElementById('WirelessMode');
|
|
|
+ wmode = wmode.value*1;
|
|
|
+ } else {
|
|
|
+ wmode = mode*1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (is_mode_legacy_only(wmode)) {
|
|
|
+ for (var idx in bw_sel.options) {
|
|
|
+ bw_sel.options[idx].disabled = false;
|
|
|
+
|
|
|
+ if (bw_sel.options[idx].value == 20)
|
|
|
+ bw_sel.options[idx].selected = true;
|
|
|
+
|
|
|
+ if (bw_sel.options[idx].value > 20)
|
|
|
+ bw_sel.options[idx].disabled = true;
|
|
|
+ }
|
|
|
+ } else if (is_ch_gband(ch)) {
|
|
|
+ for (var idx in bw_sel.options) {
|
|
|
+ bw_sel.options[idx].disabled = false;
|
|
|
+
|
|
|
+ if ((bw_sel.options[idx].value == 60) && (bw_sel.selectedIndex > idx))
|
|
|
+ bw_sel.options[idx].selected = true;
|
|
|
+
|
|
|
+ if (bw_sel.options[idx].value > 60)
|
|
|
+ bw_sel.options[idx].disabled = true;
|
|
|
+ }
|
|
|
+ } else if (is_ch_aband(ch)) {
|
|
|
+ var chosen60 = false;
|
|
|
+ var bw160 = "<%=cfgs.VHT_BW%>"*1;
|
|
|
+
|
|
|
+ if (bw_sel.value == 60)
|
|
|
+ chosen60 = 1;
|
|
|
+
|
|
|
+ for (var idx in bw_sel.options) {
|
|
|
+ bw_sel.options[idx].disabled = false;
|
|
|
+
|
|
|
+ if (bw_sel.options[idx].value == 40 && chosen60 && bw160 == 0) {
|
|
|
+ bw_sel.options[idx].selected = true;
|
|
|
+ } else if (bw_sel.options[idx].value == 60) {
|
|
|
+ bw_sel.options[idx].disabled = true;
|
|
|
+ bw_sel.options[idx].selected = false;
|
|
|
+ } else if (bw_sel.options[idx].value == 160 && chosen60 && bw160 == 1) {
|
|
|
+ bw_sel.options[idx].selected = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Bw_onchange(bw_sel.value, ch);
|
|
|
+ }
|
|
|
+
|
|
|
+ function init5G2nd80MhzChannelList(list) {
|
|
|
+ var select = document.getElementById('VHT_Sec80_Channel');
|
|
|
+ var ch2 = {};
|
|
|
+ var new_ch2 = null;
|
|
|
+
|
|
|
+ ch2.cval = select.value;
|
|
|
+ ch2.oval = "<%=cfgs.VHT_Sec80_Channel%>";
|
|
|
+
|
|
|
+ initList(select, list, ch2, "channel");
|
|
|
+
|
|
|
+ if (select.length > 0)
|
|
|
+ select.disabled = false;
|
|
|
+ else
|
|
|
+ alert("[Warning] 5G 2nd 80Mhz Channel is not available. Please Check CountryRegion.");
|
|
|
+ }
|
|
|
+
|
|
|
+ function get5G2nd80MhzChannelList(bw, ch) {
|
|
|
+ var ch_5g_2nd = document.getElementById('VHT_Sec80_Channel');
|
|
|
+
|
|
|
+ ch_5g_2nd.disabled = true;
|
|
|
+
|
|
|
+ if (ch == "0")
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (bw != "161" || ch == "0")
|
|
|
+ return;
|
|
|
+
|
|
|
+ var mode = document.getElementById('WirelessMode');
|
|
|
+ mode = mode.value*1;
|
|
|
+
|
|
|
+ var cr = GetCountryRegion(mode);
|
|
|
+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_5G_2nd_80Mhz_channel_list")%>', { "ch_cur" : ch, "country_region" : cr },
|
|
|
+ function(x)
|
|
|
+ {
|
|
|
+ //console.log(x);
|
|
|
+ //console.log(x.response);
|
|
|
+ var json = eval(x.response);
|
|
|
+ init5G2nd80MhzChannelList(json);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function initHTExtChannelList(list) {
|
|
|
+ var select = document.getElementById('HT_EXTCHA');
|
|
|
+ var ch2 = {};
|
|
|
+ var new_ch2 = null;
|
|
|
+
|
|
|
+ ch2.cval = select.value;
|
|
|
+ ch2.oval = "<%=cfgs.HT_EXTCHA%>";
|
|
|
+
|
|
|
+ initList(select, list, ch2, "val");
|
|
|
+
|
|
|
+ if (select.length > 0)
|
|
|
+ select.disabled = false;
|
|
|
+ else
|
|
|
+ alert("[Warning] 2G 40Mhz Ext Channel is not avalable. Please Check CountryRegion.");
|
|
|
+ }
|
|
|
+
|
|
|
+ function getHTExtChannel(bw, ch) {
|
|
|
+ var ch_2g_ext = document.getElementById('HT_EXTCHA');
|
|
|
+
|
|
|
+ ch_2g_ext.disabled = true;
|
|
|
+
|
|
|
+ if (ch == "0")
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (bw != "40" && bw != "60")
|
|
|
+ return;
|
|
|
+
|
|
|
+ var mode = document.getElementById('WirelessMode');
|
|
|
+ mode = mode.value*1;
|
|
|
+
|
|
|
+ var cr = GetCountryRegion(mode);
|
|
|
+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_HT_ext_channel_list")%>', { "ch_cur" : ch, "country_region" : cr },
|
|
|
+ function(x)
|
|
|
+ {
|
|
|
+ console.log(x);
|
|
|
+ console.log(x.response);
|
|
|
+ var json = eval(x.response);
|
|
|
+ initHTExtChannelList(json);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function toggle_apcli (show) {
|
|
|
+ if (show) {
|
|
|
+ document.getElementById('apcli_cfg').style.display = "";
|
|
|
+
|
|
|
+ var a = document.getElementById('ApCliAuthMode')
|
|
|
+ var to = a.options[a.options.selectedIndex].value
|
|
|
+ if (to == "WPA2PSK") {
|
|
|
+ document.getElementById("apcli_wpa").style.display="";
|
|
|
+ document.getElementById("apcli_wep").style.display="none";
|
|
|
+ } else if (to == "WEP") {
|
|
|
+ document.getElementById("apcli_wpa").style.display="none";
|
|
|
+ document.getElementById("apcli_wep").style.display="";
|
|
|
+ } else {
|
|
|
+ document.getElementById("apcli_wpa").style.display="none";
|
|
|
+ document.getElementById("apcli_wep").style.display="none";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ document.getElementById('apcli_cfg').style.display = "none";
|
|
|
+ document.getElementById('apcli_wpa').style.display = "none";
|
|
|
+ document.getElementById('apcli_wep').style.display = "none";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function ApCliAuthMode_onchange (to) {
|
|
|
+ if (to == "WPA2PSK") {
|
|
|
+ document.getElementById("apcli_wpa").style.display="";
|
|
|
+ document.getElementById("apcli_wep").style.display="none";
|
|
|
+ } else if (to == "WEP") {
|
|
|
+ document.getElementById("apcli_wpa").style.display="none";
|
|
|
+ document.getElementById("apcli_wep").style.display="";
|
|
|
+ } else {
|
|
|
+ document.getElementById("apcli_wpa").style.display="none";
|
|
|
+ document.getElementById("apcli_wep").style.display="none";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function toggle_atf(o) {
|
|
|
+ if (o.getAttribute("value") == "1") {
|
|
|
+ document.getElementById("VOW_Airtime_Fairness_En").value = "0";
|
|
|
+ o.setAttribute("value", "0");
|
|
|
+ o.className = "cbi-button cbi-button-add";
|
|
|
+ o.innerHTML = "Enable ATC";
|
|
|
+ } else {
|
|
|
+ document.getElementById("VOW_Airtime_Fairness_En").value = "1";
|
|
|
+ o.setAttribute("value", "1");
|
|
|
+ o.className = "cbi-button cbi-button-remove";
|
|
|
+ o.innerHTML = "Disable ATC";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function toggle_atc(o) {
|
|
|
+ if (o.getAttribute("value") == "1") {
|
|
|
+ document.getElementById("VOW_BW_Ctrl").value = "0";
|
|
|
+ o.setAttribute("value", "0");
|
|
|
+ o.className = "cbi-button cbi-button-add";
|
|
|
+ o.innerHTML = "Enable ATC";
|
|
|
+ document.getElementById("atc-table").style.display = "none";
|
|
|
+ } else {
|
|
|
+ document.getElementById("VOW_BW_Ctrl").value = "1";
|
|
|
+ o.setAttribute("value", "1");
|
|
|
+ o.className = "cbi-button cbi-button-remove";
|
|
|
+ o.innerHTML = "Disable ATC";
|
|
|
+ document.getElementById("atc-table").style.display = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function is_mode_legacy_only(mode) {
|
|
|
+ var imode = mode*1;
|
|
|
+
|
|
|
+ return ((imode >= 0) && (imode <= 4));
|
|
|
+ }
|
|
|
+
|
|
|
+ function is_mode_gband(mode) {
|
|
|
+ var imode = mode*1;
|
|
|
+ var gband_mode_list = [0,1,4,6,7,9];
|
|
|
+ var i;
|
|
|
+
|
|
|
+ for (i = 0; i < gband_mode_list.length; i++){
|
|
|
+ if( gband_mode_list[i] == imode )
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ function is_mode_aband(mode) {
|
|
|
+ var imode = mode*1;
|
|
|
+ var aband_mode_list = [2,8,11,14,15];
|
|
|
+ var i;
|
|
|
+
|
|
|
+ for (i = 0; i < aband_mode_list.length; i++){
|
|
|
+ if( aband_mode_list[i] == imode )
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ function is_ch_gband(ch) {
|
|
|
+ ch = ch*1;
|
|
|
+
|
|
|
+ if (ch == 0) {
|
|
|
+ var wmode = document.getElementById('WirelessMode');
|
|
|
+
|
|
|
+ return is_mode_gband(wmode.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ((ch > 0) && (ch <= 14));
|
|
|
+ }
|
|
|
+
|
|
|
+ function is_ch_aband(ch) {
|
|
|
+ ch = ch*1;
|
|
|
+
|
|
|
+ if (ch == 0) {
|
|
|
+ var wmode = document.getElementById('WirelessMode');
|
|
|
+
|
|
|
+ return is_mode_aband(wmode.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ((ch >= 36 ) && (ch <= 165));
|
|
|
+ }
|
|
|
+
|
|
|
+ function initList(selobj, list, selvals, value, text){
|
|
|
+ var sel = {};
|
|
|
+ var id = selobj.id;
|
|
|
+
|
|
|
+ if (typeof(selvals) != "object")
|
|
|
+ sel[0] = selvals;
|
|
|
+ else
|
|
|
+ sel = selvals;
|
|
|
+
|
|
|
+ selobj.innerHTML = "";
|
|
|
+ for (var i in list) {
|
|
|
+ var opt = document.createElement('option');
|
|
|
+
|
|
|
+ if(value)
|
|
|
+ opt.value = list[i][value];
|
|
|
+ else
|
|
|
+ opt.value = list[i].value;
|
|
|
+
|
|
|
+ if(text)
|
|
|
+ opt.text = list[i][text];
|
|
|
+ else
|
|
|
+ opt.text = list[i].text;
|
|
|
+
|
|
|
+ selobj.appendChild(opt);
|
|
|
+ }
|
|
|
+
|
|
|
+ var selv = null;
|
|
|
+ for (var k in sel) {
|
|
|
+ //console.log("[initList][" + id + "] sel[" + k + "]=" + sel[k]);
|
|
|
+ for (var i in selobj.options){
|
|
|
+ if (selobj.options[i].value == sel[k]){
|
|
|
+ selobj.options[i].selected = true;
|
|
|
+ selv = sel[k];
|
|
|
+ //console.log("[initList][" + id + "] found selv=" + selv);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (selv) break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!selv) {
|
|
|
+ selv = selobj.value;
|
|
|
+ //console.log("[initList][" + id + "] !selv, selv=" + selv);
|
|
|
+ }
|
|
|
+
|
|
|
+ return selv;
|
|
|
+ }
|
|
|
+
|
|
|
+ window.onload = function() {
|
|
|
+ WirelessMode_onchange('<%=dev.WirelessMode%>');
|
|
|
+ ApCliAuthMode_onchange('<%=cfgs.ApCliAuthMode%>');
|
|
|
+ }
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<%+footer%>
|