1484 lines
46 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%+header%>
<script type="text/javascript" src="<%=resource%>/xhr.js"></script>
<script type="text/javascript">//<![CDATA[
window.onload = function () {
//获取模组选择框元素
var modem_select = document.getElementById('modem_select');
//更换模组AT串口时触发
modem_select.addEventListener('change', function () {
//获取快捷命令
get_quick_commands();
//获取模组调试信息
var debug_params = { first_cache: true };
get_modem_debug_info(debug_params);
});
//获取标签菜单
var tab_menu = document.getElementById("tab_menu");
set_tab_event(tab_menu);
//获取快捷选项父元素
var quick_option_element = document.getElementById('quick_option_td');
//更换快捷选项时触发
quick_option_element.addEventListener('change', function (event) {
var target = event.target;
if (target.matches('input[type="radio"]')) {
//获取快捷命令
get_quick_commands();
}
});
//获取快捷AT命令选择框元素
var command_select = document.getElementById('command_select');
//更换快捷AT命令时触发
command_select.addEventListener("change", function () {
//自动填写到命令输入框
copy_to_input();
});
//获取快捷AT命令选择框元素
command_select = document.getElementById('command_select');
//点击快捷AT命令时触发解决情况再选的问题
command_select.addEventListener("click", function () {
//自动填写到命令输入框
copy_to_input();
});
}
//设置标签菜单事件
function set_tab_event(parent_element) {
//获取子元素
var childElements = parent_element.children;
//获取需要禁用的元素
for (var i = 0; i < childElements.length; i++) {
childElements[i].addEventListener('click', function (event) {
tab_event(this);
var debug_params = { first_cache: true };
get_modem_debug_info(debug_params);
});
}
}
// 自动填写到快捷AT命令到输入框
function copy_to_input() {
var command_select = document.getElementById("command_select").value;
document.getElementById("at_command").value = command_select;
}
// 发送AT命令
function send(at_port, at_command) {
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "send_at_command")%>', { "port": at_port, "command": at_command },
function (x, data) {
responseElement = document.getElementById("response");
if ("response" in data) {
//显示当前时间
responseElement.value += data["time"] + " ";
//显示返回值
responseElement.value += data["response"];
//滚动到底部
responseElement.scrollTop = responseElement.scrollHeight;
}
}
);
}
// 发送AT命令前处理
function send_at_command(event) {
//获取选中的模组选中的AT串口
var at_port = document.getElementById("modem_select").value;
if (at_port.length == 0) {
alert("<%:Please choose a Modem%>");
return false;
}
//获取AT命令
var at_command = document.getElementById("at_command").value;
if (at_command.length == 0) {
alert("<%:Please enter a AT Command%>");
return false;
}
//对双引号进行特殊处理
at_command = at_command.replaceAll("\"", "\\\"");
//发送AT命令
send(at_port, at_command);
return true;
}
// 清除AT命令
function clean_at_command(event) {
document.getElementById("at_command").value = '';
}
// 清除AT响应
function clean_response(event) {
document.getElementById("response").value = '';
}
// 设置AT串口选项
function set_at_port(at_ports, translation) {
// 获取模组选择框元素
var modem_select = document.getElementById('modem_select');
// 记录所选
var selected = modem_select.value;
// 删除原来的选项
modem_select.options.length = 0;
//遍历每一个AT串口
for (var port of at_ports) {
//更新keyAT串口value模块名称
for (var key in port) {
var option = document.createElement('option');
option.value = key;
var language = navigator.language;
if (port[key].includes("unknown")) {
option.text = port[key].replace("unknown", key);
}
else {
option.text = port[key];
}
modem_select.appendChild(option);
}
}
// 恢复原来的选择
for (let i = 0; i < modem_select.options.length; i++) {
if (modem_select.options[i].value == selected) {
modem_select.selectedIndex = i;
break;
}
}
}
//获取当前启用的元素
function get_tab_enable_element(parent_element) {
var disenable_element;
//获取子元素
var childElements = parent_element.children;
//获取需要禁用的元素
for (var i = 0; i < childElements.length; i++) {
// 检查当前子元素的class属性是否为cbi-tab
if (childElements[i].classList.contains('cbi-tab')) {
disenable_element = childElements[i];
break;
}
}
return disenable_element;
}
//获取需要禁用的元素
function get_enable_element(parent_element) {
var enable_element;
//获取子元素
var childElements = parent_element.children;
//获取已启用的元素
for (var i = 0; i < childElements.length; i++) {
// 检查当前子元素的class属性是否为cbi-tab
if (childElements[i].classList.contains('cbi-tab')) {
enable_element = childElements[i];
break;
}
}
return enable_element;
}
// 设置标签显示
function set_tab_view(disenable_element, enable_element) {
//获取tab内容父元素
var tab_context = document.getElementById('tab_context');
//禁用tab
disenable_element.classList.remove('cbi-tab');
disenable_element.classList.add('cbi-tab-disabled');
//禁用tab内容
var data_tab_disenable = disenable_element.getAttribute('data-tab');
var tab_context_disenable_element = tab_context.querySelector('div[data-tab="' + data_tab_disenable + '"]');
tab_context_disenable_element.setAttribute('data-tab-active', 'false');
tab_context_disenable_element.style.display = "none";
//启用tab
enable_element.classList.remove('cbi-tab-disabled');
enable_element.classList.add('cbi-tab');
//启用tab内容
var data_tab_enable = enable_element.getAttribute('data-tab');
var tab_context_enable_element = tab_context.querySelector('div[data-tab="' + data_tab_enable + '"]');
tab_context_enable_element.setAttribute('data-tab-active', 'true');
tab_context_enable_element.style.display = "block";
}
// 标签事件(更新选中的标签及标签内容)
function tab_event(tab_element) {
//获取需要禁用的tab元素
// var tab_menu = document.getElementsByClassName("cbi-tabmenu")[0];
var tab_menu = document.getElementById("tab_menu");
var disenable_element = get_tab_enable_element(tab_menu);
if (tab_element != disenable_element) {
set_tab_view(disenable_element, tab_element);
}
}
// 无模组界面
function no_modems_view() {
//更新提示信息
document.getElementById("info_message").innerHTML = "<strong><%:No modems found%></strong>";
//显示提示信息
document.getElementById("cbi-info").style.display = "block";
//隐藏模组选择界面
document.getElementById("cbi-modem").style.display = "none";
//隐藏tab菜单界面
document.getElementById("tab_menu").style.display = "none";
//隐藏tab内容界面
document.getElementById("tab_context").style.display = "none";
}
// 未适配模组界面
function not_adapted_modems_view() {
//更新提示信息
document.getElementById("info_message").innerHTML = "<strong><%:Not adapted to this modem%></strong>";
//显示提示信息
document.getElementById("cbi-info").style.display = "block";
//显示模组选择界面
document.getElementById("cbi-modem").style.display = "block";
//显示标签内容界面
document.getElementById("tab_context").style.display = "block";
//显示AT命令标题
document.getElementById("at_command_title").style.display = "block";
//隐藏标签菜单界面
document.getElementById("tab_menu").style.display = "none";
//在标签菜单选中AT命令
var data_tab = "at_command_tab"
var at_command_tab_element = document.querySelector('li[data-tab="' + data_tab + '"]');
tab_event(at_command_tab_element);
}
// 全功能界面
function all_function_view() {
//更新提示信息
document.getElementById("info_message").innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle"/><%:Loading modem%>...';
//显示模组选择界面
document.getElementById("cbi-modem").style.display = "block";
//显示标签菜单界面
document.getElementById("tab_menu").style.display = "block";
//显示标签内容界面
document.getElementById("tab_context").style.display = "block";
//隐藏AT命令标题
document.getElementById("at_command_title").style.display = "none";
//隐藏提示信息
document.getElementById("cbi-info").style.display = "none";
}
// 更新选项
function update_option(select_element, data, order) {
//记录所选
var selected = select_element.value;
//删除原来的选项
select_element.options.length = 0;
//是否有顺序
if (order) {
//遍历每一条信息
for (var info of data) {
//遍历每一条信息里的键
for (var key in info) {
var option = document.createElement('option');
option.text = key;
option.value = info[key];
select_element.appendChild(option);
}
}
}
else {
//遍历每一条信息里的键
for (var key of data) {
var option = document.createElement('option');
option.text = key;
option.value = info[key];
select_element.appendChild(option);
}
}
//恢复原来的选择
for (let i = 0; i < select_element.options.length; i++) {
if (select_element.options[i].value == selected) {
select_element.selectedIndex = i;
break;
}
}
}
// 获取快捷命令
function get_quick_commands() {
//获取快捷选项
var quick_option = document.querySelector('input[name="quick_option"]:checked').value;
//获取选中的模组
var at_port = document.getElementById("modem_select").value;
//获取AT命令
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_quick_commands")%>', { "option": quick_option, "port": at_port },
function (x, data) {
//获取模组选择框元素
var command_select = document.getElementById('command_select');
//更新选项
update_option(command_select, data["quick_commands"], true);
}
);
}
// 全选网络偏好复选框
function all_choose_prefer_custom_config(status) {
var checkboxes = document.getElementById('prefer_custom_config').querySelectorAll('input[type="checkbox"]');
for (checkbox of checkboxes) {
//设置网络偏好复选框状态
checkbox.checked = status;
}
}
// 禁用网络偏好复选框
function disabled_prefer_custom_config(status) {
var checkboxes = document.getElementById('prefer_custom_config').querySelectorAll('input[type="checkbox"]');
for (checkbox of checkboxes) {
//禁用
checkbox.disabled = status;
}
}
// 全选锁频复选框
function all_choose_lockband_custom_config() {
var checkboxes = document.getElementById('lockband_custom_config').querySelectorAll('input[type="checkbox"]');
has_checked = false;
for (checkbox of checkboxes) {
//设置网络偏好复选框状态
checkbox.checked = checkbox.checked ? false : true;
if (checkbox.checked) {
has_checked = true;
}
}
for (checkbox of checkboxes) {
//设置网络偏好复选框状态
checkbox.checked = has_checked ? has_checked : false;
}
}
// 禁用功能
function disabled_function(function_name, status) {
//拨号模式
if (function_name == "mode") {
modes = ["qmi", "ecm", "mbim", "rndis", "ncm"]
for (mode of modes) {
mode_element = document.getElementById('mode_option_' + mode)
if (mode_element != null) {
mode_element.disabled = status;
}
}
//模式按钮
document.getElementById('mode_button').disabled = status;
}
//网络偏好
else if (function_name == "network_prefer") {
//pass
}
}
// 设置拨号模式信息
function set_mode_info(mode_info, first_cache) {
//获取当前拨号模式
var current_mode = mode_info["mode"];
if (current_mode == "unknown") {
return
}
//获取支持的拨号模式
var modes = mode_info["modes"];
//获取模式视图
var current_mode_view = current_mode.toUpperCase();
//设置当前拨号模式
document.getElementById('current_mode').innerHTML = current_mode_view;
if (first_cache) {
//设置支持的拨号模式
var mode_option_view = '';
for (mode of modes) {
if (mode == "gobinet") {
mode_option_view = mode_option_view.replace("QMI", "QMI/GobiNet");
}
else {
mode_option_view += '<span class="cbi-radio"><input type="radio" name="mode_option" id="mode_option_' + mode + '" value="' + mode + '"><span>' + mode.toUpperCase() + '</span></span>&nbsp;&nbsp;';
}
}
document.getElementById('mode_option').innerHTML = mode_option_view;
//设置拨号模式选项
element = document.getElementById('mode_option_' + current_mode).checked = true;
//设置第一次获取数据标志
first_cache = false;
}
}
// 设置拨号模式
function set_mode() {
//禁用功能
disabled_function("mode", true);
//获取模式选项
var mode_config = document.querySelector('input[name="mode_option"]:checked').value;
//获取选中的模组
var at_port = document.getElementById("modem_select").value;
//设置偏好
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_mode")%>', { "port": at_port, "mode_config": mode_config },
function (x, data) {
//获取模组拨号模式
var current_mode = data;
//获取模式视图
var current_mode_view = current_mode.toUpperCase();
//设置当前拨号模式
document.getElementById('current_mode').innerHTML = current_mode_view;
//启用功能
disabled_function("mode", false);
}
);
}
// 获取当前网络视图
function get_current_prefer_view(network_prefer) {
var current_prefer_view = "";
for (key in network_prefer) {
if (network_prefer[key]) {
current_prefer_view += key + " ";
}
}
return current_prefer_view;
}
// 设置网络偏好信息
function set_network_prefer_info(network_prefer_info, first_cache) {
//获取模组网络偏好
var network_prefer = network_prefer_info["network_prefer"];
//获取偏好视图
var current_prefer_view = get_current_prefer_view(network_prefer);
//设置偏好选项和复选框
if (first_cache) {
//更新偏好配置
for (key in network_prefer) {
//设置偏好配置
var prefer_config_element = document.getElementById('prefer_config_' + key.toLowerCase());
if (prefer_config_element != null) {
prefer_config_element.checked = network_prefer[key];
}
}
}
//设置第一次获取数据标志
first_cache = false;
}
function set_lockband_info(lockband_info, first_cache) {
//获取锁频
var current_lockband = lockband_info["lock_band"];
var avalible_lockband = lockband_info["available_band"];
//可选锁频配置td
var avalible_lockband_td = document.getElementById('lockband_custom_config_values');
//设置偏好选项和复选框
if (first_cache) {
for (key in avalible_lockband) {
id = "lockband_config_" + key;
checkbox_get = document.getElementById(id);
if (checkbox_get == null) {
checkbox_span = document.createElement('span');
checkbox_span.className = "cbi-checkbox";
checkbox = document.createElement('input');
checkbox.id = "lockband_config_" + key;
checkbox.name = "lockband_option";
checkbox.type = "checkbox";
checkbox.className = "cbi-input-checkbox";
checkbox.value = key;
checkbox_span.appendChild(checkbox);
span = document.createElement('span');
span.innerHTML = avalible_lockband[key];
checkbox_span.appendChild(span);
if (current_lockband.includes(key)) {
checkbox.checked = true;
}
avalible_lockband_td.appendChild(checkbox_span);
}
}
//设置第一次获取数据标志
}
}
// 设置模组自检信息
function set_modem_self_test_info(self_test_info) {
//获取电压
var voltage = self_test_info["voltage"];
//获取温度
var temperature = self_test_info["temperature"];
//设置当前电压
document.getElementById('current_voltage').innerHTML = voltage / 1000 + " V";
//设置当前温度
document.getElementById('current_temperature').innerHTML = temperature * 1 + " °C";
//设置电压状态
var state = '';
var css = '';
if (voltage < 3135) {
state = "<%:Abnormal%>";
color = "red";
}
else if (voltage >= 3135 && voltage < 3700) {
state = "<%:Low%>";
color = "goldenrod";
}
else if (voltage >= 3700 && voltage < 4400) {
state = "<%:Normal%>";
color = "green";
}
else if (voltage >= 4400) {
state = "<%:Abnormal%>";
color = "red";
}
else {
state = "<%:Unknown%>";
color = "goldenrod";
}
var voltage_status = document.getElementById('voltage_status');
voltage_status.innerHTML = state;
voltage_status.style.color = color
//设置温度状态
state = '';
css = '';
if (temperature < 45) {
state = "<%:Normal%>";
color = "green";
}
else if (temperature >= 45 && temperature < 75) {
state = "<%:Somewhat High%>";
color = "goldenrod";
}
else if (temperature >= 75 && temperature < 105) {
state = "<%:Excessively High%>";
color = "red";
}
else if (temperature >= 105) {
state = "<%:Abnormal%>";
color = "red";
}
else {
state = "<%:Unknown%>";
color = "goldenrod";
}
var temperature_status = document.getElementById('temperature_status');
temperature_status.innerHTML = state;
temperature_status.style.color = color
}
// 设置网络偏好
function set_network_prefer() {
//禁用功能
disabled_function("network_prefer", true);
//获取选中的模组
var at_port = document.getElementById("modem_select").value;
//获取偏好配置
var network_prefer_config = {};
var checkboxes = document.getElementById('prefer_custom_config').querySelectorAll('input[type="checkbox"]');
for (checkbox of checkboxes) {
network_prefer_config[checkbox.value.toUpperCase()] = Number(checkbox.checked);
}
//设置偏好
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_network_prefer")%>', { "port": at_port, "prefer_config": network_prefer_config },
function (x, data) {
//获取模组网络偏好
var network_prefer = data["network_prefer"];
//获取当前偏好视图
var current_prefer_view = get_current_prefer_view(network_prefer);
//启用功能
disabled_function("network_prefer", false);
}
);
}
function set_lockband() {
console.log("set_lockband")
//禁用功能
disabled_function("lockband", true);
//获取选中的模组
var at_port = document.getElementById("modem_select").value;
//获取偏好配置
var network_prefer_config = {};
lockband_config = ""
var checkboxes = document.querySelectorAll('input[name="lockband_option"]:checked');
for (checkbox of checkboxes) {
lockband_config = checkbox.value + "," + lockband_config;
}
//去掉最后一个逗号
lockband_config = lockband_config.substring(0, lockband_config.length - 1);
//设置锁频
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_lockband")%>', { "port": at_port, "lock_band_config": lockband_config },
function (x, data) {
var current_lockband = data["lock_band"];
var avalible_lockband = data["available_band"];
var avalible_lockband_td = document.getElementById('lockband_custom_config_values');
for (key in avalible_lockband) {
id = "lockband_config_" + key;
checkbox_get = document.getElementById(id);
if (checkbox_get == null) {
checkbox_span = document.createElement('span');
checkbox_span.className = "cbi-checkbox";
checkbox = document.createElement('input');
checkbox.id = "lockband_config_" + key;
checkbox.name = "lockband_option";
checkbox.type = "checkbox";
checkbox.className = "cbi-input-checkbox";
checkbox.value = key;
checkbox_span.appendChild(checkbox);
span = document.createElement('span');
span.innerHTML = avalible_lockband[key];
checkbox_span.appendChild(span);
if (current_lockband.includes(key)) {
checkbox.checked = true;
}
avalible_lockband_td.appendChild(checkbox_span);
}
else {
checkbox_get.checked = current_lockband.includes(key);
}
}
//启用功能
disabled_function("lockband", false);
}
);
}
// 获取模组调试信息
function get_modem_debug_info(debug_params) {
//获取选中的模组
var at_port = document.getElementById("modem_select").value;
//获取当前启用的tab元素
var tab_menu = document.getElementById("tab_menu");
var tab_enable_element = get_tab_enable_element(tab_menu);
//获取当前选中的tab元素
var data_tab = tab_enable_element.getAttribute("data-tab").replace("_tab", "");
if (data_tab == "mode") {
//获取拨号模式信息
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_mode_info")%>', { "port": at_port },
function (x, data) {
var mode_info = data["mode_info"];
if (Object.keys(mode_info).length == 0) {
return false
}
//设置模式信息
set_mode_info(mode_info, debug_params.first_cache);
}
);
}
else if (data_tab == "network_prefer") {
//获取网络偏好信息
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_network_prefer_info")%>', { "port": at_port },
function (x, data) {
var network_prefer_info = data["network_prefer_info"];
if (Object.keys(network_prefer_info).length == 0) {
return false
}
//设置网络偏好信息
set_network_prefer_info(network_prefer_info, debug_params.first_cache);
}
);
}
else if (data_tab == "lockband") {
//获取网络偏好信息
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_lockband")%>', { "port": at_port },
function (x, data) {
set_lockband_info(data, debug_params.first_cache);
}
);
}
else if (data_tab == "lockcell") {
update_cell_config();
}
else if (data_tab == "lock") {
//获取自检信息
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_self_test_info")%>', { "port": at_port },
function (x, data) {
var self_test_info = data["self_test_info"];
if (Object.keys(self_test_info).length == 0) {
return false
}
//设置模组自检信息
set_modem_self_test_info(self_test_info);
}
);
}
}
function unlock_cell() {
var at_port = document.getElementById("modem_select").value;
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_lock_cell")%>', { "port": at_port, "lock": "0" },
function (x, data) {
console.log(data["response"]);
update_cell_config();
}
);
}
function lock_current_cell() {
var at_port = document.getElementById("modem_select").value;
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_lock_cell")%>', { "port": at_port, "lock": "3" },
function (x, data) {
console.log(data["response"]);
update_cell_config();
}
);
}
function lock_pci() {
var at_port = document.getElementById("modem_select").value;
var pci = document.getElementById("pci_input").value;
var arfcn = document.getElementById("arfcn_input").value;
var rat = document.getElementById("rat_select").value;
var scs = document.getElementById("scs_select").value;
var nrband = document.getElementById("nrband_input").value;
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_lock_cell")%>', { "port": at_port, "lock": "1", "pci": pci, "arfcn": arfcn, "celltype": rat , "scs": scs, "nrband": nrband},
function (x, data) {
console.log(data["response"]);
update_cell_config();
}
);
}
function lock_arfcn() {
var at_port = document.getElementById("modem_select").value;
var arfcn = document.getElementById("arfcn_input").value;
var rat = document.getElementById("rat_select").value;
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "set_lock_cell")%>', { "port": at_port, "lock": "2", "arfcn": arfcn, "celltype": rat },
function (x, data) {
console.log(data["response"]);
update_cell_config();
}
);
}
// 更新neighbor cell信息
function update_cell_config() {
function onclick_copy_fun_gen(cellinfo) {
var arfcn = cellinfo["arfcn"];
var pci = cellinfo["pci"];
var rat = cellinfo["rat"];
return function () {
arfcn_input = document.getElementById('arfcn_input');
arfcn_input.value = arfcn;
pci_input = document.getElementById('pci_input');
pci_input.value = pci;
rat_select = document.getElementById('rat_select');
rat_select.value = rat;
};
}
var at_port = document.getElementById("modem_select").value;
neighbor_cell_info = document.getElementById('neighbor_cell_info');
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_neighbor_cellinfo")%>', { "port": at_port },
function (x, data) {
//remove all child nodes
while (neighbor_cell_info.firstChild) {
neighbor_cell_info.removeChild(neighbor_cell_info.firstChild);
}
//add new child nodes
lte_cell = data["LTE"];
nr_cell = data["NR"];
lockcell_status = data["lockcell_status"];
for (cell of lte_cell) {
cell['rat'] = "0";
cell_tr = document.createElement('tr');
cell_tr.className = "tr";
cell_td_left = document.createElement('td');
cell_td_left.className = "td";
cell_td_left.innerHTML = `RAT: LTE PCI:${cell['pci']} ARFCN:${cell['arfcn']} RSRP:${cell['rsrp']} RSRQ:${cell['rsrq']} `;
cell_td_right = document.createElement('td');
cell_td_right.className = "td";
copy_botton = document.createElement('input');
copy_botton.type = "button";
copy_botton.innerHTML = "Copy";
copy_botton.className = "cbi-button";
copy_botton.value = "Copy";
copy_botton.onclick = onclick_copy_fun_gen(cell);
cell_td_right.appendChild(copy_botton);
cell_tr.appendChild(cell_td_left);
cell_tr.appendChild(cell_td_right);
neighbor_cell_info.appendChild(cell_tr);
}
for (cell of nr_cell) {
cell['rat'] = "1";
cell_tr = document.createElement('tr');
cell_tr.className = "tr";
cell_td_left = document.createElement('td');
cell_td_left.className = "td";
cell_td_left.innerHTML = `RAT: LTE PCI:${cell['pci']} ARFCN:${cell['arfcn']} RSRP:${cell['rsrp']} RSRQ:${cell['rsrq']} `;
cell_td_right = document.createElement('td');
cell_td_right.className = "td";
copy_botton = document.createElement('input');
copy_botton.type = "button";
copy_botton.innerHTML = "Copy";
copy_botton.className = "cbi-button";
copy_botton.value = "Copy";
copy_botton.onclick = onclick_fun_gen(cell);
cell_td_right.appendChild(copy_botton);
cell_tr.appendChild(cell_td_left);
cell_tr.appendChild(cell_td_right);
neighbor_cell_info.appendChild(cell_tr);
}
lockcell_status_div = document.getElementById('current_cell_status');
childElements = lockcell_status_div.childNodes;
keys = Object.keys(lockcell_status);
eleids = [];
for (childElement of childElements) {
eleid = childElement.id;
if (eleid != undefined) {
eleids.push(eleid.replace("lockcell_", ""));
}
}
for (key of keys) {
if (lockcell_status[key] == "") {
if (eleids.includes(key)) {
lockcell_status_div.removeChild(document.getElementById("lockcell_" + key));
}
continue
}
id = "lockcell_" + key;
tr = document.getElementById(id);
td_left = document.getElementById(id + "_left");
td_right = document.getElementById(id + "_right");
if (tr == null) {
tr = document.createElement('tr');
tr.className = "tr";
tr.id = id;
td_left = document.createElement('td');
td_left.className = "td";
td_left.id = id + "_left";
td_right = document.createElement('td');
td_right.className = "td";
td_right.id = id + "_right";
lockcell_status_div.appendChild(tr);
tr.appendChild(td_left);
tr.appendChild(td_right);
}
td_left.innerHTML = key.toUpperCase();
td_right.innerHTML = lockcell_status[key].toUpperCase();
}
}
);
}
function lockcell_rat_onchange() {
if (document.getElementById("rat_select").value == "1") {
document.getElementById("nr_input_tr").style.display = "table-row";
document.getElementById("scs_input_tr").style.display = "table-row";
}
else {
document.getElementById("scs_input_tr").style.display = "none";
document.getElementById("nr_input_tr").style.display = "none";
}
}
// 定时触发更新AT串口
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "modem", "get_at_port")%>', null,
(function () {
//缓存当前选择的模组
var modem_select_cache = "";
var debug_params = { first_cache: true, view: 0 };
return function (x, data) {
var at_ports = data["at_ports"];
var translation = data["translation"];
//设置AT串口选项
set_at_port(at_ports, translation);
//获取快捷命令
if (Object.keys(at_ports).length == 0) {
debug_params.view = 0;
}
else {
//获取当前的选择的模组名称
var modem_select_element = document.getElementById('modem_select');
var select_modem_name = modem_select_element.options[modem_select_element.selectedIndex].text;
if (select_modem_name.includes("ttyUSB") || select_modem_name.includes("at") || select_modem_name.includes("DUN")) {
debug_params.view = 2;
}
else {
debug_params.view = 1;
}
if (select_modem_name != modem_select_cache) {
//获取快捷选项
var quick_option = document.querySelector('input[name="quick_option"]:checked').value;
if (quick_option == "auto") {
get_quick_commands();
}
//缓存当前选中的模组
modem_select_cache = select_modem_name;
//设置第一次获取数据标志
debug_params.first_cache = true;
}
//获取模组调试信息
get_modem_debug_info(debug_params);
}
//设置界面
if (debug_params.view == 0) {
//显示无模组界面
no_modems_view();
}
else if (debug_params.view == 1) {
//显示全功能界面
all_function_view();
}
else if (debug_params.view == 2) {
//显示未适配模组界面
not_adapted_modems_view();
}
};
})()
);
//]]>
</script>
<div class="cbi-map" id="cbi-modem-debug">
<h2 id="content" name="content">
<%:Modem Debug%>
</h2>
<div class="cbi-map-descr">
<%:Debug Your Module%>
</div>
<head>
<style type="text/css">
/* table {
width: 100%;
border-spacing: 10px;
border: 0px;
} */
tr td:first-child {
width: 33%;
}
/* AT命令响应 */
/* #response_label {
font-size: 15px;
} */
/* 隐藏tab菜单 */
.cbi-tabmenu {
display: none;
}
/* 隐藏tab内容 */
#tab_context {
display: none;
}
/* 隐藏AT命令标题 */
#at_command_title {
display: none;
}
/* AT命令响应 */
textarea {
background: #373737;
border: none;
color: #FFF;
width: 100%;
}
#popup {
width: 560px;
height: 190px;
padding: 20px;
background-color: gainsboro;
border-style: solid;
position: fixed;
top: 40%;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
text-align: center;
display: none;
}
</style>
</head>
<fieldset class="cbi-section" id="cbi-info" style="display: block;">
<div class="cbi-section fade-in">
<h3>
<%:Message%>
</h3>
<table class="table" id="message">
<tr class="tr">
<td colspan="2" class="td left">
<div align="left" id="info_message" style="font-size:1.875em">
<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>"
style="vertical-align:middle" />
<%:Loading modem%>...
</div>
</td>
</tr>
</table>
</div>
</fieldset>
<fieldset class="cbi-section" id="cbi-modem" style="display: none;">
<div class="cbi-section fade-in">
<!-- <legend><%:Modem Select%></legend> -->
<h3>
<%:Modem Select%>
</h3>
<div class="cbi-section-node">
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">
<%:Modem Name%>
</label>
<div class="cbi-value-field">
<div class="cbi-checkbox">
<select name="modem_select" id="modem_select" class="cbi-input-select"></select>
</div>
<div class="cbi-value-description">
<%:Select a modem for debugging%>
</div>
</div>
</div>
</div>
</div>
</fieldset>
<ul class="cbi-tabmenu" id="tab_menu">
<li class="cbi-tab" data-tab="mode_tab"><a href="#">
<%:Mode%>
</a></li>
<li class="cbi-tab-disabled" data-tab="network_prefer_tab"><a href="#">
<%:Network Preferences%>
</a></li>
<li class="cbi-tab-disabled" data-tab="lockband_tab"><a href="#">
<%:LockBand Settings%>
</a></li>
<li class="cbi-tab-disabled" data-tab="lockcell_tab"><a href="#">
<%:Lock Cell/Arfcn Settings%>
</a></li>
<li class="cbi-tab-disabled" data-tab="self_test_tab"><a href="#">
<%:Self Test%>
</a></li>
<li class="cbi-tab-disabled" data-tab="at_command_tab"><a href="#">
<%:AT Command%>
</a></li>
</ul>
<div class="cbi-section-node cbi-section-node-tabbed" id="tab_context">
<!-- <div class="cbi-section cbi-tblsection" data-tab-active="true"> -->
<div class="cbi-section" data-tab="mode_tab" data-tab-title="<%:Mode%>" data-tab-active="true"
style="display: block;">
<!-- <legend><%:Mode%></legend> -->
<!-- <h3><%:Mode%></h3> -->
<table class="table cbi-section-table">
<tbody>
<tr class="tr cbi-section-table-titles anonymous">
<th class="th cbi-section-table-cell">
<%:Current%>
</th>
<th class="th cbi-section-table-cell">
<%:Config%>
</th>
<th class="th cbi-section-table-cell cbi-section-actions"></th>
</tr>
<tr class="tr cbi-section-table-row cbi-rowstyle-1">
<td class="td cbi-value-field" data-title="<%:Current%>" id="current_mode"></td>
<td class="td cbi-value-field" data-title="<%:Config%>" id="mode_option">
<!-- <div>
<span class="cbi-radio">
<input type="radio" name="mode_option" id="mode_option_qmi" value="qmi" checked="true">
<span>QMI</span>
</span>&nbsp;
<span class="cbi-radio">
<input type="radio" name="mode_option" id="mode_option_ecm" value="ecm">
<span>ECM</span>
</span>&nbsp;
<span class="cbi-radio">
<input type="radio" name="mode_option" id="mode_option_mbim" value="mbim">
<span>MBIM</span>
</span>&nbsp;
<span class="cbi-radio">
<input type="radio" name="mode_option" id="mode_option_rndis" value="rndis">
<span>RNDIS</span>
</span>&nbsp;
<span class="cbi-radio">
<input type="radio" name="mode_option" id="mode_option_ncm" value="ncm">
<span>NCM</span>
</span>
</div> -->
</td>
<td class="td">
<div>
<button class="btn cbi-button cbi-button-apply" id="mode_button"
onclick="set_mode()" alt="<%:Apply%>" title="<%:Apply%>">
<%:Apply%>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- <div class="cbi-section cbi-tblsection"> -->
<div class="cbi-section" data-tab="network_prefer_tab" data-tab-title="<%:Network Preferences%>"
data-tab-active="false" style="display: none;">
<!-- <legend><%:Network Preferences%></legend> -->
<!-- <h3><%:Network Preferences%></h3> -->
<table class="table cbi-section-table">
<tbody>
<tr class="tr cbi-section-table-titles anonymous">
<th class="th cbi-section-table-cell">
<%:Config%>
</th>
<th class="th cbi-section-table-cell cbi-section-actions"></th>
</tr>
<tr class="tr cbi-section-table-row cbi-rowstyle-1">
<td class="td cbi-value-field" data-title="<%:Config%>" id="prefer_custom_config">
<div>
<span class="cbi-checkbox">
<input id="prefer_config_3g" type="checkbox" class="cbi-input-checkbox"
value="3g">
<span>
<%:3G%>
</span>
</span> &nbsp;
<span class="cbi-checkbox">
<input id="prefer_config_4g" type="checkbox" class="cbi-input-checkbox"
value="4g">
<span>
<%:4G%>
</span>
</span> &nbsp;
<span class="cbi-checkbox">
<input id="prefer_config_5g" type="checkbox" class="cbi-input-checkbox"
value="5g">
<span>
<%:5G%>
</span>
</span>
</div>
</td>
<td class="td">
<div>
<button class="btn cbi-button cbi-button-apply" id="network_prefer_button"
onclick="set_network_prefer()" alt="<%:Apply%>" title="<%:Apply%>">
<%:Apply%>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="cbi-section" data-tab="lockband_tab" data-tab-title="<%:LockBand Settings%>"
data-tab-active="false" style="display: none;">
<!-- <legend><%:Network Preferences%></legend> -->
<!-- <h3><%:Network Preferences%></h3> -->
<table class="table cbi-section-table">
<tbody>
<tr class="tr cbi-section-table-titles anonymous">
<th class="th cbi-section-table-cell">
<%:Config%>
</th>
</tr>
<tr class="tr cbi-section-table-row">
<td class="td cbi-value-field" data-title="<%:Config%>" id="lockband_custom_config"
class="width:80%;">
<div id="lockband_custom_config_values">
</div>
<div>
<div>
<button class="btn cbi-button cbi-button-apply" id="lockband_button"
onclick="all_choose_lockband_custom_config()" alt="<%:Select All Band>"
title="<%:Select All Band%>">
<%:Select All Band%>
</button>
<button class="btn cbi-button cbi-button-apply" id="lockband_button"
onclick="set_lockband()" alt="<%:Apply%>" title="<%:Apply%>">
<%:Apply%>
</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="cbi-section" data-tab="lockcell_tab" data-tab-title="<%:Lock Cell/Arfcn Settings%>"
data-tab-active="false" style="display: none;">
<h3 id="Lock Cell/Arfcn_title">
<%:Current Settings%>
</h3>
<table class="table" id="CurrentStatus">
<tbody id="current_cell_status">
</tbody>
</table>
<h3 id="Lock Cell/Arfcn_title">
<%:Available Neighbor%>
</h3>
<table class="table" id="AvailableNeighbor">
<tbody id="neighbor_cell_info">
</tbody>
</table>
<!-- <legend><%:AT Command%></legend> -->
<h3 id="Lock Cell/Arfcn_title">
<%:Lock Cell/Arfcn Settings%>
</h3>
<table class="table" id="lockcell_info">
<tbody>
<tr class="tr">
<td class="td left">
<%:Select Rat%>
</td>
<td class="td left">
<select name="rat_select" id="rat_select" class="cbi-input-select" onchange="lockcell_rat_onchange()">
<option value="0">4G</option>
<option value="1" >5G</option>
</select>
</td>
</tr>
<tr class="tr">
<td class="td left">
<%:Enter Arfcn%>
</td>
<td class="td left">
<div>
<input type="text" id="arfcn_input" class="cbi-input-text"></input>
</div>
</td>
</tr>
<tr class="tr">
<td class="td left">
<%:Enter PCI%>
</td>
<td class="td left">
<div>
<input type="text" id="pci_input" class="cbi-input-text"></input>
</div>
</td>
</tr>
<tr class="tr" id="scs_input_tr" style="display:none;">
<td class="td left">
<%:Enter SCS%>
</td>
<td class="td left">
<select name="rat_select" id="scs_select" class="cbi-input-select">
<option value="0">15KHZ</option>
<option value="1" >30KHZ</option>
<option value="2" >60KHZ</option>
</select>
</td>
</tr>
<tr class="tr" id="nr_input_tr" style="display:none;">
<td class="td left">
<%:Enter NRBAND%>
</td>
<td class="td left">
<div>
<input type="text" id="nrband_input" class="cbi-input-text"></input>
</div>
</td>
</tr>
<tr class="tr">
<td class="td left">
<%:Submit%>
</td>
<td class="td left">
<div>
<input class="cbi-button cbi-button-apply" type="button" value="<%:Unlock Cell%>"
onclick="unlock_cell()" alt="<%:Unlock Cell%>" title="<%:Unlock Cell%>">
<input class="cbi-button cbi-button-apply" type="button" value="<%:Lock Current%>"
onclick="lock_current_cell()" alt="<%:Lock Current%>" title="<%:Lock Current%>">
<input class="cbi-button cbi-button-reset" type="button" value="<%:Lock PCI%>"
onclick="lock_pci()" alt="<%:Lock PCI%>" title="<%:Lock PCI%>">
<input class="cbi-button cbi-button-reset" type="button" value="<%:Lock ARFCN%>"
onclick="lock_arfcn()" alt="<%:Lock ARFCN%>" title="<%:Lock ARFCN%>">
</div>
</td>
</tr>
<span></span>
</tbody>
</table>
</div>
<!-- <div class="cbi-section fade-in"> -->
<div class="cbi-section" data-tab="self_test_tab" data-tab-title="<%:Self Test%>" data-tab-active="false"
style="display: none;">
<!-- <legend><%:Self Test%></legend> -->
<!-- <h3><%:Self Test%></h3> -->
<table class="table cbi-section-table">
<tbody>
<tr class="tr cbi-section-table-titles anonymous">
<th class="th cbi-section-table-cell">
<%:Item%>
</th>
<th class="th cbi-section-table-cell">
<%:Current%>
</th>
<th class="th cbi-section-table-cell">
<%:Status%>
</th>
</tr>
<tr class="tr cbi-section-table-row cbi-rowstyle-1">
<td class="td cbi-value-field" data-title="<%:Item%>" id="voltage_label">
<%:Voltage%>
</td>
<td class="td cbi-value-field" data-title="<%:Current%>" id="current_voltage"></td>
<td class="td cbi-value-field" data-title="<%:Status%>" id="voltage_status">-</td>
</tr>
<tr class="tr cbi-section-table-row cbi-rowstyle-2">
<td class="td cbi-value-field" data-title="<%:Item%>" id="temperature_label">
<%:Temperature%>
</td>
<td class="td cbi-value-field" data-title="<%:Current%>" id="current_temperature"></td>
<td class="td cbi-value-field" data-title="<%:Status%>" id="temperature_status">-</td>
</tr>
</tbody>
</table>
</div>
<!-- <div class="cbi-section fade-in"> -->
<div class="cbi-section" data-tab="at_command_tab" data-tab-title="<%:AT Command%>" data-tab-active="false"
style="display: none;">
<!-- <legend><%:AT Command%></legend> -->
<h3 id="at_command_title">
<%:AT Command%>
</h3>
<table class="table" id="at_command_info">
<tbody>
<!-- <tr class="tr">
<td class="td left"><%:Modem Select%></td>
<td class="td left"><select name="modem_select" id="modem_select" class="cbi-input-select"></select></td>
</tr> -->
<tr class="tr">
<td class="td left">
<%:Quick Option%>
</td>
<td class="td left" id="quick_option_td">
<div>
<span class="cbi-radio">
<input type="radio" name="quick_option" value="auto" checked="true">
<span>
<%:Auto%>
</span>
</span>&nbsp;
<span class="cbi-radio">
<input type="radio" name="quick_option" value="custom">
<span>
<%:Custom%>
</span>
</span>
</div>
</td>
</tr>
<tr class="tr">
<td class="td left">
<%:Quick Commands%>
</td>
<td class="td left"><select name="command_select" id="command_select"
class="cbi-input-select"></select></td>
</tr>
<tr class="tr">
<td class="td left">
<%:Enter Command%>
</td>
<td class="td left">
<div>
<input type="text" id="at_command" class="cbi-input-text"></input>
</div>
<div>
<input class="cbi-button cbi-button-apply" type="button" value="<%:Send%>"
onclick="send_at_command()" alt="<%:Send%>" title="<%:Send%>">
<input class="cbi-button cbi-button-reset" type="button" value="<%:Clean%>"
onclick="clean_at_command()" alt="<%:Clean%>" title="<%:Clean%>">
</div>
</td>
</tr>
<tr class="tr">
<td colspan="2" class="td left">
<div id="response_label">
<%:Response%>
</div><br />
<div><textarea readonly="readonly" id="response" rows="20" maxlength="160"></textarea>
</div>
<div class="cbi-page-actions">
<input class="btn cbi-button cbi-button-link" type="button"
value="<%:Return to old page%>"
onclick="location.href='/cgi-bin/luci/admin/network/modem/at_command_old'"
alt="<%:Return to old page%>" title="<%:Return to old page%>">
<input class="btn cbi-button cbi-button-link" type="button"
value="<%:Custom quick commands%>"
onclick="location.href='/cgi-bin/luci/admin/network/modem/quick_commands_config'"
alt="<%:Custom quick commands%>" title="<%:Custom quick commands%>">
<input class="cbi-button cbi-button-reset" type="button" value="<%:Clean%>"
onclick="clean_response()" alt="<%:Clean%>" title="<%:Clean%>">
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<%+footer%>