--[[ @module tsb_wlan_page @summary 网络配置页面 @version 1.0 @date 2026.03.17 @author 李一玮 @usage 本文件是网络配置页面,展示网络配置的各种用法。 ]] local tsb_wlan_page = {} -- 页面UI元素 local main_container = nil local common_ui = require("tsb_common_page") local net_manager = require("net_manager") -- 引入网络管理器 -- 网络状态UI元素(需要在事件回调中访问) local network4g_status = nil local network4g_switch = nil local wifi_status = nil local wifi_switch = nil -- WiFi开关按钮 local ip_address_label = nil -- IP地址标签 local signal_strength_label = nil -- 信号强度标签 -- 创建UI function tsb_wlan_page.create_ui() main_container = airui.container({ x = 0, y = 0, w = 480, h = 320, color = 0xFFFFFF, }) --------------------- 标题栏 ------------------------ local title_bar = airui.container({ parent = main_container, x = 0, y = 0, w = 480, h = 30, color = 0xCE93D8, }) airui.label({ parent = title_bar, text = "网络设置", x = 200, y = 10, w = 80, h = 20, font_size = 16, color = 0xFFFFFF, }) -- 标题栏公共信息展示 common_ui.add_battery_display(title_bar) common_ui.create_back_button(title_bar, tsb_wlan_page.cleanup) --------------------------------------------------- -- 滚动容器 local scroll_container = airui.container({ parent = main_container, x = 0, y = 30, w = 480, h = 260, color = 0xFFFFFF, }) local keyboard1 = airui.keyboard({ x = 0, y = 0, w = 480, h = 160, -- x, y, 键盘默认打开ALIGN_BOTTOM_MID,位置从中下方开始计算 mode = "lower", -- 键盘模式,可选 "text"/"upper"/"lower"/"numeric" auto_hide = true, -- 自动隐藏键盘 preview = true, preview_height = 35, bg_color = 0xf1f1f1, -- 键盘背景颜色为灰色,可选,不设置则透明 on_commit = function() -- 确认事件回调,只有在按下确认键时才会触发 log.info("keyboard", "commit") end }) --------------------- 4G网络配置 ------------------------ -- 4G网络容器 local network4g_container = airui.container({ parent = scroll_container, x = 20, y = 10, w = 440, h = 80, color = 0xF5F5F5, radius = 8, }) -- 4G网络标题 airui.label({ parent = network4g_container, text = "4G网络配置", x = 10, y = 10, w = 120, h = 30, font_size = 16, color = 0xCE93D8, }) -- 4G开关标签 airui.label({ parent = network4g_container, text = "4G网络:", x = 10, y = 40, w = 80, h = 30, font_size = 14, }) -- 4G开关状态 network4g_status = airui.label({ parent = network4g_container, text = "开启", x = 80, y = 40, w = 60, h = 30, font_size = 14, color = 0x4CAF50, }) -- 4G开关按钮 network4g_switch = airui.button({ parent = network4g_container, x = 350, y = 40, w = 80, h = 30, text = "关闭", on_click = function(self) local current_status = network4g_status:get_text() if current_status == "开启" then network4g_status:set_text("关闭") network4g_status:set_color(0xF44336) self:set_text("开启") log.info("set_4g", "关闭4G网络") net_manager.disable_mobile() -- 调用net_manager关闭4G else network4g_status:set_text("开启") network4g_status:set_color(0x4CAF50) self:set_text("关闭") log.info("set_4g", "开启4G网络") net_manager.enable_mobile() -- 调用net_manager开启4G end end }) --------------------------------------------------- --------------------- WIFI配置 ------------------------ -- WIFI配置容器 local wifi_container = airui.container({ parent = scroll_container, x = 20, y = 100, w = 440, h = 160, color = 0xF5F5F5, radius = 8, }) -- WIFI配置标题 airui.label({ parent = wifi_container, text = "WIFI配置", x = 10, y = 10, w = 100, h = 30, font_size = 16, color = 0xCE93D8, }) -- WIFI开关标签 airui.label({ parent = wifi_container, text = "WIFI:", x = 10, y = 40, w = 60, h = 30, font_size = 14, }) -- WIFI开关状态 wifi_status = airui.label({ parent = wifi_container, text = "关闭", x = 80, y = 40, w = 60, h = 30, font_size = 14, color = 0xF44336, }) -- WIFI开关按钮 wifi_switch = airui.button({ parent = wifi_container, x = 350, y = 40, w = 80, h = 30, text = "开启", on_click = function(self) local current_status = wifi_status:get_text() if current_status == "开启" then wifi_status:set_text("关闭") wifi_status:set_color(0xF44336) self:set_text("开启") log.info("set_wifi", "关闭WIFI") net_manager.disconnect_wifi() -- 调用net_manager断开WiFi else wifi_status:set_text("开启") wifi_status:set_color(0x4CAF50) self:set_text("关闭") log.info("set_wifi", "开启WIFI") -- 这里可以添加开启WIFI的逻辑 end end }) -- WIFI名称标签 airui.label({ parent = wifi_container, text = "WIFI名称:", x = 10, y = 80, w = 100, h = 30, font_size = 14, }) -- WIFI名称输入框 local wifi_name_input = airui.textarea({ parent = wifi_container, x = 110, y = 80, w = 200, h = 30, text = "", keyboard = keyboard1 }) -- WIFI密码标签 airui.label({ parent = wifi_container, text = "WIFI密码:", x = 10, y = 120, w = 100, h = 30, font_size = 14, }) -- WIFI密码输入框 local wifi_password_input = airui.textarea({ parent = wifi_container, x = 110, y = 120, w = 200, h = 30, text = "", keyboard = keyboard1 }) -- 连接按钮 local connect_wifi_btn = airui.button({ parent = wifi_container, x = 320, y = 90, w = 100, h = 40, text = "连接", on_click = function(self) local current_wifi_status = wifi_status:get_text() if current_wifi_status ~= "开启" then log.info("set_wifi", "请先开启WiFi") return end local wifi_name = wifi_name_input:get_text() local wifi_password = wifi_password_input:get_text() if not wifi_name or wifi_name == "" then log.info("set_wifi", "请输入WiFi名称") return end log.info("set_wifi", "连接WIFI:" .. wifi_name) net_manager.connect_wifi(wifi_name, wifi_password) -- 调用net_manager连接WiFi end }) --------------------------------------------------- --------------------- 网络状态 ------------------------ -- 网络状态容器 local network_status_container = airui.container({ parent = scroll_container, x = 20, y = 280, w = 440, h = 100, color = 0xF5F5F5, radius = 8, }) -- 网络状态标题 airui.label({ parent = network_status_container, text = "网络状态", x = 10, y = 10, w = 100, h = 30, font_size = 16, color = 0xCE93D8, }) -- IP地址标签 airui.label({ parent = network_status_container, text = "IP地址:", x = 10, y = 40, w = 80, h = 30, font_size = 14, }) -- IP地址值 ip_address_label = airui.label({ parent = network_status_container, text = "0.0.0.0", x = 100, y = 40, w = 200, h = 30, font_size = 14, }) -- 信号强度标签 airui.label({ parent = network_status_container, text = "信号强度:", x = 10, y = 70, w = 80, h = 30, font_size = 14, }) -- 信号强度值 signal_strength_label = airui.label({ parent = network_status_container, text = "0", x = 100, y = 70, w = 50, h = 30, font_size = 14, }) --------------------------------------------------- -- 底部信息 common_ui.create_status_bar(main_container) end ----- 初始化页面 function tsb_wlan_page.init(params) tsb_wlan_page.create_ui() -- 初始化网络管理器(默认启动4G) net_manager.init() -- 更新WiFi信息显示 local function update_wifi_info() local wlan_info = wlan.getInfo() if wlan_info then -- 更新IP地址(使用网关作为IP地址显示) if ip_address_label then ip_address_label:set_text(wlan_info.gw or "0.0.0.0") end -- 更新信号强度 if signal_strength_label then local rssi = wlan_info.rssi if rssi then signal_strength_label:set_text(rssi .. " dBm") -- 根据信号强度设置颜色 if rssi > -60 then signal_strength_label:set_color(0x4CAF50) -- 绿色,信号强 elseif rssi >= -80 then signal_strength_label:set_color(0xFF9800) -- 橙色,信号中等 else signal_strength_label:set_color(0xF44336) -- 红色,信号差 end else signal_strength_label:set_text("0") end end log.info("wlan_page", "WiFi信息更新", json.encode(wlan_info)) end end -- 监听网络状态变化,更新UI sys.subscribe("NET_STATE_CHANGED", function(state) log.info("wlan_page", "网络状态变化:", state) if state == net_manager.STATE.WIFI_CONNECTED then -- WiFi连接成功,更新4G状态显示为关闭 network4g_status:set_text("关闭") network4g_status:set_color(0xF44336) network4g_switch:set_text("开启") -- 更新WiFi信息 update_wifi_info() elseif state == net_manager.STATE.MOBILE_CONNECTED then -- 4G连接成功 network4g_status:set_text("开启") network4g_status:set_color(0x4CAF50) network4g_switch:set_text("关闭") -- 关闭WiFi UI状态 if wifi_status then wifi_status:set_text("关闭") wifi_status:set_color(0xF44336) end if wifi_switch then wifi_switch:set_text("开启") end -- 重置WiFi信息显示 if ip_address_label then ip_address_label:set_text("0.0.0.0") end if signal_strength_label then signal_strength_label:set_text("0") signal_strength_label:set_color(0x000000) end end end) end -- 清理页面 function tsb_wlan_page.cleanup() if main_container then main_container:destroy() main_container = nil end end return tsb_wlan_page