diff --git a/luci-app-modem/htdocs/luci-static/resources/icons/delsms.png b/luci-app-modem/htdocs/luci-static/resources/icons/delsms.png new file mode 100644 index 0000000..b036e81 Binary files /dev/null and b/luci-app-modem/htdocs/luci-static/resources/icons/delsms.png differ diff --git a/luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png b/luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png new file mode 100644 index 0000000..eeb13c5 Binary files /dev/null and b/luci-app-modem/htdocs/luci-static/resources/icons/delsms2.png differ diff --git a/luci-app-modem/luasrc/controller/modem.lua b/luci-app-modem/luasrc/controller/modem.lua index 5067038..61f7b53 100644 --- a/luci-app-modem/luasrc/controller/modem.lua +++ b/luci-app-modem/luasrc/controller/modem.lua @@ -29,8 +29,11 @@ function index() entry({"admin", "network", "modem", "get_quick_commands"}, call("getQuickCommands"), nil).leaf = true entry({"admin", "network", "modem", "send_at_command"}, call("sendATCommand"), nil).leaf = true entry({"admin", "network", "modem", "get_modem_debug_info"}, call("getModemDebugInfo"), nil).leaf = true + entry({"admin", "network", "modem", "get_mode_info"}, call("getModeInfo"), nil).leaf = true entry({"admin", "network", "modem", "set_mode"}, call("setMode"), nil).leaf = true + entry({"admin", "network", "modem", "get_network_prefer_info"}, call("getNetworkPreferInfo"), nil).leaf = true entry({"admin", "network", "modem", "set_network_prefer"}, call("setNetworkPrefer"), nil).leaf = true + entry({"admin", "network", "modem", "get_self_test_info"}, call("getSelfTestInfo"), nil).leaf = true entry({"admin", "network", "modem", "quick_commands_config"}, cbi("modem/quick_commands_config")).leaf = true --AT命令旧界面 @@ -518,74 +521,59 @@ end --[[ @Description 获取拨号模式信息 -@Params - at_port AT串口 - manufacturer 制造商 ]] -function getModeInfo(at_port,manufacturer) +function getModeInfo() + local at_port = http.formvalue("port") - --获取支持的拨号模式 - local modes + --获取制造商 + local manufacturer uci:foreach("modem", "modem-device", function (modem_device) --设置模组AT串口 if at_port == modem_device["at_port"] then - modes=modem_device["modes"] + --获取制造商 + manufacturer=modem_device["manufacturer"] return true --跳出循环 end end) - --获取模组拨号模式 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_mode "..at_port) - local opd = odpall:read("*a") - odpall:close() - local mode=string.gsub(opd, "\n", "") - - -- 设置值 + --获取值 local mode_info={} - mode_info["mode"]=mode - mode_info["modes"]=modes + if manufacturer~="unknown" then - return mode_info + --获取支持的拨号模式 + local modes + uci:foreach("modem", "modem-device", function (modem_device) + --设置模组AT串口 + if at_port == modem_device["at_port"] then + modes=modem_device["modes"] + return true --跳出循环 + end + end) + + --获取模组拨号模式 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_mode "..at_port) + local opd = odpall:read("*a") + odpall:close() + local mode=string.gsub(opd, "\n", "") + + --设置模式信息 + mode_info["mode"]=mode + mode_info["modes"]=modes + end + + --设置值 + local modem_debug_info={} + modem_debug_info["mode_info"]=mode_info + + -- 写入Web界面 + luci.http.prepare_content("application/json") + luci.http.write_json(modem_debug_info) end --[[ @Description 获取网络偏好信息 -@Params - at_port AT串口 - manufacturer 制造商 ]] -function getNetworkPreferInfo(at_port,manufacturer) - - --获取模组网络偏好 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_network_prefer "..at_port) - local opd = odpall:read("*a") - odpall:close() - local network_prefer_info=json.parse(opd) - - return network_prefer_info -end - ---[[ -@Description 获取自检信息 -@Params - at_port AT串口 - manufacturer 制造商 -]] -function getSelfTestInfo(at_port,manufacturer) - - --获取模组自检信息 - local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_self_test_info "..at_port) - local opd = odpall:read("*a") - odpall:close() - local self_test_info=json.parse(opd) - - return self_test_info -end - ---[[ -@Description 获取模组调试信息 -]] -function getModemDebugInfo() +function getNetworkPreferInfo() local at_port = http.formvalue("port") --获取制造商 @@ -600,22 +588,100 @@ function getModemDebugInfo() end) --获取值 - local mode_info={} - local network_prefer_info={} - local self_test_info={} + local network_prefer_info if manufacturer~="unknown" then - mode_info=getModeInfo(at_port,manufacturer) - network_prefer_info=getNetworkPreferInfo(at_port,manufacturer) - self_test_info=getSelfTestInfo(at_port,manufacturer) + --获取模组网络偏好 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_network_prefer "..at_port) + local opd = odpall:read("*a") + odpall:close() + network_prefer_info=json.parse(opd) end --设置值 local modem_debug_info={} - modem_debug_info["mode_info"]=mode_info modem_debug_info["network_prefer_info"]=network_prefer_info - modem_debug_info["self_test_info"]=self_test_info -- 写入Web界面 luci.http.prepare_content("application/json") luci.http.write_json(modem_debug_info) end + +--[[ +@Description 获取自检信息 +]] +function getSelfTestInfo() + local at_port = http.formvalue("port") + + --获取制造商 + local manufacturer + uci:foreach("modem", "modem-device", function (modem_device) + --设置模组AT串口 + if at_port == modem_device["at_port"] then + --获取制造商 + manufacturer=modem_device["manufacturer"] + return true --跳出循环 + end + end) + + --获取值 + local self_test_info={} + if manufacturer~="unknown" then + --获取模组电压 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_voltage "..at_port) + local opd = odpall:read("*a") + odpall:close() + self_test_info["voltage"]=json.parse(opd) + + --获取模组温度 + local odpall = io.popen("source "..script_path..manufacturer..".sh && "..manufacturer.."_get_temperature "..at_port) + local opd = odpall:read("*a") + odpall:close() + self_test_info["temperature"]=json.parse(opd) + end + + --设置值 + local modem_debug_info={} + modem_debug_info["self_test_info"]=self_test_info + + -- 写入Web界面 + luci.http.prepare_content("application/json") + luci.http.write_json(modem_debug_info) +end + +--[[ +@Description 获取模组调试信息 +]] +-- function getModemDebugInfo() +-- local at_port = http.formvalue("port") + +-- --获取制造商 +-- local manufacturer +-- uci:foreach("modem", "modem-device", function (modem_device) +-- --设置模组AT串口 +-- if at_port == modem_device["at_port"] then +-- --获取制造商 +-- manufacturer=modem_device["manufacturer"] +-- return true --跳出循环 +-- end +-- end) + +-- --获取值 +-- local mode_info={} +-- local network_prefer_info={} +-- local self_test_info={} +-- if manufacturer~="unknown" then +-- mode_info=getModeInfo(at_port,manufacturer) +-- network_prefer_info=getNetworkPreferInfo(at_port,manufacturer) +-- self_test_info=getSelfTestInfo(at_port,manufacturer) +-- end + +-- --设置值 +-- local modem_debug_info={} +-- modem_debug_info["mode_info"]=mode_info +-- modem_debug_info["network_prefer_info"]=network_prefer_info +-- modem_debug_info["self_test_info"]=self_test_info + +-- -- 写入Web界面 +-- luci.http.prepare_content("application/json") +-- luci.http.write_json(modem_debug_info) +-- end diff --git a/luci-app-modem/luasrc/view/modem/modem_debug.htm b/luci-app-modem/luasrc/view/modem/modem_debug.htm index 5643416..926b989 100644 --- a/luci-app-modem/luasrc/view/modem/modem_debug.htm +++ b/luci-app-modem/luasrc/view/modem/modem_debug.htm @@ -11,9 +11,14 @@ //获取快捷命令 get_quick_commands(); //获取模组调试信息 - get_modem_debug_info(); + var debug_params={first_cache:true}; + get_modem_debug_info(debug_params); }); + //获取tab菜单 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + set_tab_event(tab_menu); + //获取快捷选项父元素 var quick_option_element = document.getElementById('quick_option_td'); //更换快捷选项时触发 @@ -64,6 +69,46 @@ }); } + //设置tab菜单事件 + 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) { + // var debug_params={first_cache:true}; + // get_modem_debug_info(debug_params); + // }); + + // 创建一个 MutationObserver 实例 + var observer = new MutationObserver(function(mutationsList) { + for (var mutation of mutationsList) { + if (mutation.type === 'attributes' && mutation.attributeName === 'class') { + //只处理当前变为禁用的tab + if (mutation.target.className=='cbi-tab') { + //获取模组调试信息 + var debug_params={first_cache:true}; + get_modem_debug_info(debug_params); + //只处理一次 + break; + } + } + } + }); + + // 配置观察器选项 + var observerOptions = { + attributes: true, // 监听属性值变化 + attributeFilter: ['class'], // 要监听的属性名称 + }; + + // 开始观察目标元素 + observer.observe(childElements[i], observerOptions); + } + } + // 自动填写到快捷AT命令到输入框 function copy_to_input() { @@ -169,6 +214,59 @@ } } + //获取当前启用的元素 + 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; + } + + // 设置tab显示 + 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 + 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事件处理(更新选中的tab及tab内容) + function tab_event(tab_element) + { + //获取需要禁用的tab元素 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + 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() { @@ -178,14 +276,10 @@ document.getElementById("cbi-info").style.display="block"; //隐藏模组选择界面 document.getElementById("cbi-modem").style.display="none"; - //隐藏拨号模式界面 - document.getElementById("cbi-mode").style.display="none"; - //隐藏网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="none"; - //隐藏模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="none"; - //隐藏AT界面 - document.getElementById("cbi-at").style.display="none"; + //隐藏tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="none"; + //隐藏tab内容界面 + document.getElementById("tab_context").style.display="none"; } // 有模组界面 @@ -193,8 +287,8 @@ { //显示模组选择界面 document.getElementById("cbi-modem").style.display="block"; - //显示AT命令界面 - document.getElementById("cbi-at").style.display="block"; + //显示AT命令标题 + document.getElementById("at_command_title").style.display="block"; //隐藏提示信息 // document.getElementById("cbi-info").style.display="none"; } @@ -202,31 +296,36 @@ // 未适配模组界面 function not_adapted_modems_view() { - // 更新提示信息 + //更新提示信息 document.getElementById("info_message").innerHTML="<%:Not adapted to this modem%>"; - // 显示提示信息 + //显示提示信息 document.getElementById("cbi-info").style.display="block"; - //隐藏拨号模式界面 - document.getElementById("cbi-mode").style.display="none"; - //隐藏网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="none"; - //隐藏模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="none"; + //显示tab内容界面 + document.getElementById("tab_context").style.display="block"; + //显示AT命令标题 + document.getElementById("at_command_title").style.display="block"; + //隐藏tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="none"; + //在tab菜单选中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); + //隐藏tab内容界面 + // document.getElementById("tab_context").style.display="none"; } // 全功能界面 function all_function_view() { - //显示拨号模式界面 - document.getElementById("cbi-mode").style.display="block"; - //显示网络偏好界面 - document.getElementById("cbi-network-prefer").style.display="block"; - //显示模组自检界面 - document.getElementById("cbi-modem-self-test").style.display="block"; + //显示tab菜单界面 + document.getElementsByClassName("cbi-tabmenu")[0].style.display="block"; + //显示tab内容界面 + 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) @@ -495,44 +594,75 @@ // 设置模组自检信息 function set_modem_self_test_info(self_test_info) { - // console.log(self_test_info); - - //获取模组自检 - // var self_test=self_test_info["self_test"]; + //获取电压 + var voltage=self_test_info["voltage"]; + //获取温度 + var temperature=self_test_info["temperature"]; - // //获取自检视图 - // var self_test_view=set_current_self_test_view(self_test); - // //获取 - // var self_test_view=set_current_self_test_view(self_test); - - // //设置当前电压信息 - // document.getElementById('current_voltage').innerHTML=current_self_test_view; - document.getElementById('current_voltage').innerHTML=self_test_info/1000; + //设置当前电压 + document.getElementById('current_voltage').innerHTML=voltage/1000+" V"; + //设置当前温度 + document.getElementById('current_temperature').innerHTML=temperature+" °C"; - // 设置电压状态 + //设置电压状态 var state = ''; var css = ''; - if (self_test_info<3135) + if (voltage<3135) { state = "<%:Abnormal%>"; color = "red"; } - else if (self_test_info>3135 && self_test_info<3300) + else if (voltage>=3135 && voltage<3700) { state = "<%:Low%>"; color = "goldenrod"; } - else //大于3300(3.3V) - { + 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 - // //设置当前温度信息 - // document.getElementById('current_temperature').innerHTML=current_self_test_view; + //设置温度状态 + 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 } // 设置网络偏好 @@ -588,35 +718,116 @@ //获取选中的模组 var at_port = document.getElementById("modem_select").value; - //获取调试信息 - XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_modem_debug_info")%>', {"port":at_port}, - function(x, data) - { - var mode_info=data["mode_info"]; - var network_prefer_info=data["network_prefer_info"]; - var self_test_info=data["self_test_info"]; - if (Object.keys(mode_info).length==0||Object.keys(network_prefer_info).length==0) { - //显示未适配模组界面 - not_adapted_modems_view(); - return false + //获取当前启用的tab元素 + var tab_menu = document.getElementsByClassName('cbi-tabmenu')[0]; + 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) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } + + //设置模式信息 + set_mode_info(mode_info,debug_params.first_cache); + + //设置第一次获取数据标志 + debug_params.first_cache=false; + + //显示全功能界面 + all_function_view(); } + ); + } + 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) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } - //设置模式信息 - set_mode_info(mode_info,debug_params.first_cache); + //设置网络偏好信息 + set_network_prefer_info(network_prefer_info,debug_params.first_cache); - //设置网络偏好信息 - set_network_prefer_info(network_prefer_info,debug_params.first_cache); + //设置第一次获取数据标志 + debug_params.first_cache=false; - //设置模组自检信息 - set_modem_self_test_info(self_test_info); + //显示全功能界面 + all_function_view(); + } + ); + } + else if (data_tab=="self_test") { + //获取自检信息 + 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) + { + //显示未适配模组界面 + not_adapted_modems_view(); + return false + } - //设置第一次获取数据标志 - debug_params.first_cache=false; + //设置模组自检信息 + set_modem_self_test_info(self_test_info); + + //设置第一次获取数据标志 + // debug_params.first_cache=false; + + //显示全功能界面 + all_function_view(); + } + ); + } + + //获取调试信息 + // XHR.get('<%=luci.dispatcher.build_url("admin", "network", "modem", "get_modem_debug_info")%>', {"port":at_port}, + // function(x, data) + // { + // var mode_info=data["mode_info"]; + // var network_prefer_info=data["network_prefer_info"]; + // var self_test_info=data["self_test_info"]; + // if (Object.keys(mode_info).length==0||Object.keys(network_prefer_info).length==0) { + // //显示未适配模组界面 + // not_adapted_modems_view(); + // return false + // } + + // //设置模式信息 + // set_mode_info(mode_info,debug_params.first_cache); + + // //设置网络偏好信息 + // set_network_prefer_info(network_prefer_info,debug_params.first_cache); + + // //设置模组自检信息 + // set_modem_self_test_info(self_test_info); + + // //设置第一次获取数据标志 + // debug_params.first_cache=false; + + // //显示全功能界面 + // all_function_view(); + // } + // ); - //显示全功能界面 - all_function_view(); - } - ); } // 定时触发更新AT串口 @@ -689,6 +900,19 @@ font-size: 15px; } */ + /* 隐藏tab菜单 */ + .cbi-tabmenu { + display: none; + } + /* 隐藏tab内容 */ + #tab_context { + display: none; + } + /* 隐藏AT命令标题 */ + #at_command_title { + display: none; + } + /* 终端 */ textarea { background:#373737; @@ -750,59 +974,19 @@ + + - - - - - - - - - - -