From f2786552d522675c328edc80ab37038e5b060224 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 03:41:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(launcher):=20=E8=93=9D=E7=89=99/WiFi=20?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=AD=90=E9=A1=B5=E9=9D=A2=EF=BC=88=E5=AE=89?= =?UTF-8?q?=E5=8D=93=E9=A3=8E=EF=BC=89=E2=80=94=20=E6=96=B0=E5=A2=9E=20sub?= =?UTF-8?q?page.c=20=E7=BB=9F=E4=B8=80=E8=84=9A=E6=89=8B=E6=9E=B6(?= =?UTF-8?q?=E9=A1=B6=E6=A0=8F+=E5=88=86=E7=BB=84=E5=88=97=E8=A1=A8+?= =?UTF-8?q?=E8=B7=9F=E6=89=8B=E6=BB=9A=E5=8A=A8+=E5=B7=A6=E7=BC=98?= =?UTF-8?q?=E8=BF=94=E5=9B=9E)=20+=20wifi=5Fpage.c(=E5=BC=80=E5=85=B3/?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=BF=9E=E6=8E=A5=E8=AF=A6=E6=83=85/?= =?UTF-8?q?=E5=B7=B2=E4=BF=9D=E5=AD=98/=E9=99=84=E8=BF=91,BSSID=E5=8E=BB?= =?UTF-8?q?=E9=87=8D+=E4=B8=AD=E6=96=87SSID)=20+=20bt=5Fpage.c(=E5=BC=80?= =?UTF-8?q?=E5=85=B3/=E5=B7=B2=E8=BF=9E=E6=8E=A5/=E5=B7=B2=E9=85=8D?= =?UTF-8?q?=E5=AF=B9/=E9=99=84=E8=BF=91=E6=89=AB=E6=8F=8F=E9=85=8D?= =?UTF-8?q?=E5=AF=B9)=EF=BC=9BSMENU=20=E7=BD=91=E7=BB=9C=E7=BB=84=E6=94=B6?= =?UTF-8?q?=E6=95=9B=E4=B8=BA=202=20=E5=85=A5=E5=8F=A3=E8=A1=8C=20(agent-1?= =?UTF-8?q?78)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit launcher bd37c8b0→d10c0e8a; 改动文件 -Wall -Wextra 0 warning; 真机待验证: 蓝牙 pair/connect、开关联动、触摸几何 出入: 中文SSID/BSSID去重复用 net.c 既有实现; 模态复用 s_dd_modal(SDK 模态层未上收, 未改 SDK); s_net_open 旧分支留作死代码未删 --- patch_v2/meow_launcherd/bt_page.c | 215 ++++++++ patch_v2/meow_launcherd/build_launcher.sh | 1 + patch_v2/meow_launcherd/fb_compositor.c | 8 +- patch_v2/meow_launcherd/main_menu.c | 6 +- .../meow_launcherd/meow_launcher_internal.h | 55 +- patch_v2/meow_launcherd/meow_launcherd | Bin 511996 -> 528508 bytes patch_v2/meow_launcherd/net.c | 89 +++- patch_v2/meow_launcherd/settings_page.c | 127 ++--- patch_v2/meow_launcherd/subpage.c | 504 ++++++++++++++++++ patch_v2/meow_launcherd/wifi_page.c | 203 +++++++ 10 files changed, 1122 insertions(+), 86 deletions(-) create mode 100644 patch_v2/meow_launcherd/bt_page.c create mode 100644 patch_v2/meow_launcherd/subpage.c create mode 100644 patch_v2/meow_launcherd/wifi_page.c diff --git a/patch_v2/meow_launcherd/bt_page.c b/patch_v2/meow_launcherd/bt_page.c new file mode 100644 index 0000000..48b2c0f --- /dev/null +++ b/patch_v2/meow_launcherd/bt_page.c @@ -0,0 +1,215 @@ +/* bt_page.c — MeowOS 系统设置「蓝牙独立子页面」(安卓风,M2.76)。 + * + * 页面(sub_page_t 脚手架 subpage.c 驱动): + * - 顶栏:返回 + 标题「蓝牙」 + 右上开关(network.bluetooth_enabled) + * - 已连接设备:tap → bluetoothctl disconnect(角色经 bt_role_refresh 判定) + * - 已配对设备:tap → bluetoothctl connect(已连者标「已连接」) + * - 附近设备:扫描发现(net_bt_scan,后台有界 bluetoothctl 写 /tmp 缓存,异步不阻塞)—— + * 未配对者 tap → pair;已配对者 tap → connect。实机配对成功率/超时需真机验证。 + * + * 与网络线共用 net.c(net_bt_connected/paired/scan/scan_trigger/hci_powered/bt_role)。 + * 开关写 network.bluetooth_enabled + hciconfig;连接/断开/配对走 bluetoothctl(带超时)。 + */ +#include "meow_launcher_internal.h" + +#define BT_ACT_CONN_BASE 2000 /* 已连接 idx(tap→disconnect) */ +#define BT_ACT_PAIRED_BASE 3000 /* 已配对 idx(tap→connect) */ +#define BT_ACT_NEAR_BASE 4000 /* 附近 idx(tap→pair/connect) */ + +typedef struct { + meow_net_t conn[S_NET_MAX]; + meow_net_t paired[S_NET_MAX]; + meow_net_t near[S_NET_MAX]; + int conn_n, paired_n, near_n; + int bt_on; + int full; /* 1=本次 rows() 全量重扫(conn/paired popen);0=仅附近(file)+角色(节流) */ + char mode[48]; /* bt_role 中文描述(次行摘要) */ +} bt_ctx_t; + + +/* 设备 MAC(net_bt_* 已填 mac) */ +static int bt_is_conn(const bt_ctx_t *c, const char *mac) +{ + if (!mac[0]) return 0; + for (int i = 0; i < c->conn_n; i++) if (!strcmp(c->conn[i].mac, mac)) return 1; + return 0; +} + +static int bt_is_paired(const bt_ctx_t *c, const char *mac) +{ + if (!mac[0]) return 0; + for (int i = 0; i < c->paired_n; i++) if (!strcmp(c->paired[i].mac, mac)) return 1; + return 0; +} + + +/* 顶栏开关当前值 */ +static int bt_top_sw(void *ctx, int *on) +{ + (void)ctx; + int v = 0; + if (meow_settings_get_bool("network.bluetooth_enabled", &v) != 0) v = 0; + *on = v; + return 1; +} + +/* 顶栏开关切换:写设置 + hciconfig up/down + 触发扫描 + 同步状态栏 */ +static void bt_top_sw_set(void *ctx, int on) +{ + (void)ctx; + meow_settings_set_bool("network.bluetooth_enabled", on); + s_net_toggle_bt(on); + g_sys.bt_on = on; + bt_role_refresh(1); + paint_sb_right(); + meow_settings_save(); + if (on) net_bt_scan_trigger(); +} + + +/* 填行:刷新数据后构建分组列表。 + * conn/paired 走 bluetoothctl(慢);仅全量(full)时重扫,避开子页 live tick 反复 spawn。 */ +static int bt_rows(void *ctx, sub_row_t *rbuf, int max) +{ + bt_ctx_t *c = ctx; + int full = c->full; c->full = 0; /* 消费一次全量标记 */ + c->bt_on = hci_powered(); + if (full || c->conn_n < 0) { /* 首次/动作后:全量重扫 conn/paired */ + c->conn_n = net_bt_connected(c->conn, S_NET_MAX); + c->paired_n = net_bt_paired(c->paired, S_NET_MAX); + if (c->conn_n < 0) c->conn_n = 0; + if (c->paired_n < 0) c->paired_n = 0; + } + c->near_n = net_bt_scan(c->near, S_NET_MAX); /* 附近:读 /tmp 缓存(快,实测无 popen) */ + if (c->near_n < 0) c->near_n = 0; + /* 角色描述:节流(≤5s)重探,读缓存,避免子页驻留期间反复 popen */ + net_bt_mode_str(c->mode, sizeof c->mode); + + int n = 0; + /* 已连接设备 */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "已连接设备"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (c->conn_n == 0) { + if (n < max) { rbuf[n].kind = SUB_ROW; rbuf[n].label = "无已连接设备"; rbuf[n].sub = ""; rbuf[n].on = 0; rbuf[n].act = -2; n++; } + } else for (int i = 0; i < c->conn_n && n < max; i++) { + rbuf[n].kind = SUB_ACT; + rbuf[n].label = c->conn[i].name[0] ? c->conn[i].name : c->conn[i].mac; + rbuf[n].sub = c->conn[i].mac; + rbuf[n].on = 1; rbuf[n].act = BT_ACT_CONN_BASE + i; + n++; + } + /* 已配对设备 */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "已配对设备"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (c->paired_n == 0) { + if (n < max) { rbuf[n].kind = SUB_ROW; rbuf[n].label = "无已配对设备"; rbuf[n].sub = ""; rbuf[n].on = 0; rbuf[n].act = -2; n++; } + } else for (int i = 0; i < c->paired_n && n < max; i++) { + rbuf[n].kind = SUB_ACT; + rbuf[n].label = c->paired[i].name[0] ? c->paired[i].name : c->paired[i].mac; + rbuf[n].sub = bt_is_conn(c, c->paired[i].mac) ? "已连接" + : (c->paired[i].mac[0] ? c->paired[i].mac : ""); + rbuf[n].on = bt_is_conn(c, c->paired[i].mac); + rbuf[n].act = BT_ACT_PAIRED_BASE + i; + n++; + } + /* 附近设备(扫描发现,未配对) */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "附近设备"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (c->near_n == 0) { + if (n < max) { rbuf[n].kind = SUB_ROW; rbuf[n].label = "附近无设备(点顶部开关后自动扫描)"; rbuf[n].sub = ""; rbuf[n].on = 0; rbuf[n].act = -2; n++; } + } else for (int i = 0; i < c->near_n && n < max; i++) { + int is_paired = bt_is_paired(c, c->near[i].mac); + if (is_paired) continue; /* 已配对者归于「已配对设备」,附近只列未配对 */ + rbuf[n].kind = SUB_ACT; + rbuf[n].label = c->near[i].name[0] ? c->near[i].name : c->near[i].mac; + rbuf[n].sub = c->near[i].mac; + rbuf[n].on = 0; rbuf[n].act = BT_ACT_NEAR_BASE + i; + n++; + } + return n; +} + + +/* 执行 bluetoothctl 命令(带超时)+ 结果弹窗反馈 */ +static void bt_run(const char *title, const char *cmd) +{ + char *o = popen_read_tmo(8000, cmd); + char line[48]; + const char *txt[4]; txt[0] = line; + int ok = o && (strstr(o, "successful") || strstr(o, "Connected") || + strstr(o, "already") || strstr(o, "Paired")); + snprintf(line, sizeof line, "%s", ok ? "操作成功" : "操作失败/超时"); + if (o) free(o); + s_dd_modal(title, txt, 1, -1); +} + + +/* 动作行(SUB_ACT)点击:连接/断开/配对 */ +static int bt_act(void *ctx, int idx, int act) +{ + (void)idx; + bt_ctx_t *c = ctx; + char mac[24] = ""; + /* 定位 MAC(按 act 段) */ + if (act >= BT_ACT_NEAR_BASE) { + int i = act - BT_ACT_NEAR_BASE; + if (i < 0 || i >= c->near_n) return 0; + snprintf(mac, sizeof mac, "%s", c->near[i].mac); + } else if (act >= BT_ACT_PAIRED_BASE) { + int i = act - BT_ACT_PAIRED_BASE; + if (i < 0 || i >= c->paired_n) return 0; + snprintf(mac, sizeof mac, "%s", c->paired[i].mac); + } else if (act >= BT_ACT_CONN_BASE) { + int i = act - BT_ACT_CONN_BASE; + if (i < 0 || i >= c->conn_n) return 0; + snprintf(mac, sizeof mac, "%s", c->conn[i].mac); + } + if (!mac[0]) return 0; + + if (act >= BT_ACT_NEAR_BASE) { + /* 附近未配对 → pair;已配对(理论上过滤了)→ connect */ + char cmd[192]; + snprintf(cmd, sizeof cmd, "PATH=/bin:/sbin:/usr/bin:/usr/sbin bluetoothctl pair %s 2>/dev/null", mac); + bt_run("配对", cmd); + } else if (act >= BT_ACT_PAIRED_BASE) { + /* 已配对:未连 → connect;已连 → disconnect */ + if (bt_is_conn(c, mac)) { + char cmd[192]; + snprintf(cmd, sizeof cmd, "PATH=/bin:/sbin:/usr/bin:/usr/sbin bluetoothctl disconnect %s 2>/dev/null", mac); + bt_run("断开", cmd); + } else { + char cmd[192]; + snprintf(cmd, sizeof cmd, "PATH=/bin:/sbin:/usr/bin:/usr/sbin bluetoothctl connect %s 2>/dev/null", mac); + bt_run("连接", cmd); + } + } else { + /* 已连接 → disconnect */ + char cmd[192]; + snprintf(cmd, sizeof cmd, "PATH=/bin:/sbin:/usr/bin:/usr/sbin bluetoothctl disconnect %s 2>/dev/null", mac); + bt_run("断开", cmd); + } + bt_role_refresh(1); + net_bt_scan_trigger(); + c->full = 1; /* 动作后:下一次 rows() 全量重扫 */ + logmsg("bt_page: act act=%d mac=%s", act, mac); + return 1; /* 重绘 + 重填行 */ +} + + +/* 运行蓝牙独立子页面(阻塞到返回) */ +int run_bt_page(void) +{ + static bt_ctx_t c; + memset(&c, 0, sizeof c); + sub_page_t p; + memset(&p, 0, sizeof p); + p.title = "蓝牙"; + p.top_sw = bt_top_sw; + p.top_sw_set = bt_top_sw_set; + p.rows = bt_rows; + p.act = bt_act; + p.detail = NULL; /* 蓝牙动作都走 SUB_ACT(act),无 SUB_ROW 详情 */ + p.live = 1; /* 附近扫描驻留更新(约 2s 重扫行;仅附近/角色,不反复 spawn) */ + p.ctx = &c; + c.full = 1; /* 首行全量重扫 */ + net_bt_scan_trigger(); /* 进页立即触发一次附近扫描(异步,不阻塞) */ + bt_role_refresh(1); + return meow_subpage_run(&p); +} diff --git a/patch_v2/meow_launcherd/build_launcher.sh b/patch_v2/meow_launcherd/build_launcher.sh index 0fa3405..180ef06 100755 --- a/patch_v2/meow_launcherd/build_launcher.sh +++ b/patch_v2/meow_launcherd/build_launcher.sh @@ -25,6 +25,7 @@ SYSROOT="$ROOT/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf" "$CC" -I"../sdk" -Os -static \ main_menu.c statusbar.c fb_compositor.c settings_page.c power_menu.c \ notif_center.c app_launcher.c audio.c backlight.c net.c about.c \ + subpage.c wifi_page.c bt_page.c \ font_theme.c keys.c util.c \ meow_touch.c meow_settings.c meow_notif.c \ "../sdk/meow_ui.a" "$SYSROOT/lib/libz.a" -lpthread -o meow_launcherd diff --git a/patch_v2/meow_launcherd/fb_compositor.c b/patch_v2/meow_launcherd/fb_compositor.c index 593cc61..3c741d9 100644 --- a/patch_v2/meow_launcherd/fb_compositor.c +++ b/patch_v2/meow_launcherd/fb_compositor.c @@ -56,7 +56,7 @@ int fb_open(void) * virtual framebuffer so we can read/write both buffers for the * backup/restore below; mmapping only one frame would let the menu * land on the buffer the panel is NOT showing. */ - if (fb_yres_virtual < fb_yres) fb_yres_virtual = fb_yres; /* single buffer */ + if (fb_yres_virtual < (unsigned int)fb_yres) fb_yres_virtual = (unsigned int)fb_yres; /* single buffer */ fb_mem = mmap(NULL, (size_t)fb_line * fb_yres_virtual, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (fb_mem == MAP_FAILED) { @@ -105,7 +105,7 @@ int fb_open(void) /* Snapshot the player's currently-displayed frame into a heap backup. */ void fb_backup_player(void) { - if (fb_yres_virtual <= fb_yres) { fb_orig_yoffset = -1; return; } /* single buffer */ + if (fb_yres_virtual <= (unsigned int)fb_yres) { fb_orig_yoffset = -1; return; } /* single buffer */ if (fb_active_yoffset >= fb_yres_virtual) fb_active_yoffset = 0; fb_orig_yoffset = (int)fb_active_yoffset; fb_player_backup_len = (size_t)fb_line * fb_yres; @@ -129,7 +129,7 @@ void fb_backup_player(void) * panel must show buffer0 for the menu and apps to be visible. */ void fb_norm_buf0(void) { - if (fb_fd < 0 || fb_yres_virtual <= fb_yres) { fb_active_yoffset = 0; return; } + if (fb_fd < 0 || fb_yres_virtual <= (unsigned int)fb_yres) { fb_active_yoffset = 0; return; } if (fb_active_yoffset == 0) return; /* already showing buffer0 */ unsigned char v[160]; memset(v, 0, sizeof v); @@ -149,7 +149,7 @@ void fb_norm_buf0(void) * no-op,无频闪),供唤醒/重绘路径调用,确保重画的界面一定落在被显示的缓冲。 */ void fb_pan_buf0_force(void) { - if (fb_fd < 0 || fb_yres_virtual <= fb_yres) { fb_active_yoffset = 0; return; } + if (fb_fd < 0 || fb_yres_virtual <= (unsigned int)fb_yres) { fb_active_yoffset = 0; return; } unsigned char v[160]; memset(v, 0, sizeof v); if (ioctl(fb_fd, FBIOGET_VSCREENINFO, v) < 0) return; /* read current vinfo */ diff --git a/patch_v2/meow_launcherd/main_menu.c b/patch_v2/meow_launcherd/main_menu.c index 054b54c..60229b2 100644 --- a/patch_v2/meow_launcherd/main_menu.c +++ b/patch_v2/meow_launcherd/main_menu.c @@ -553,11 +553,11 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, * 8s 强关永远不在此 hold 上再触发 —— 由菜单自身的「按当前项确认」/取消 * 决定动作。避免「按住电源开菜单->确认取消->仍按住->run_menu 8s 强关」残留。 * M2.37:阈值接 power.forceoff_ms(默认 8000),强关保持 > 弹菜单上限。 */ - if (t - pwr_hold_at >= power_forceoff_ms && !pwr_menu_state) { + if (t - pwr_hold_at >= (unsigned long long)power_forceoff_ms && !pwr_menu_state) { if (sim_no_exec) { logmsg("pm: [sim-no-exec] POWER HOLD %dms -> would force poweroff", power_forceoff_ms); } else { logmsg("pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); meow_power_action(POWER_SHUTDOWN); } m_prev_pwr = pwr; continue; - } else if (t - pwr_hold_at >= power_longpress_menu_ms && !pwr_menu_state) { + } else if (t - pwr_hold_at >= (unsigned long long)power_longpress_menu_ms && !pwr_menu_state) { pwr_menu_state = 1; logmsg("pm: POWER HOLD %dms -> show power menu", power_longpress_menu_ms); show_power_menu(); /* 动作在函数内 system(); 取消则续循环 */ @@ -597,7 +597,7 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, /* M2.34:本次电源按下来自「电源菜单内确认/取消」,其松开不得 toggle 息屏 * (否则关机/重启画面被息屏覆盖,或焦点在取消键单击电源导致熄屏)。 */ logmsg("pm: power release after power-menu -> no toggle (suppress)"); - } else if (pwr_hold_at && (t - pwr_hold_at < power_longpress_menu_ms) && !pwr_menu_state && !pwr_woke) { + } else if (pwr_hold_at && (t - pwr_hold_at < (unsigned long long)power_longpress_menu_ms) && !pwr_menu_state && !pwr_woke) { logmsg("pm: power single-click -> toggle panel (was %s)", meow_screen_on ? "on" : "off"); meow_toggle_panel(); if (meow_screen_on) { diff --git a/patch_v2/meow_launcherd/meow_launcher_internal.h b/patch_v2/meow_launcherd/meow_launcher_internal.h index 69089e3..f360248 100644 --- a/patch_v2/meow_launcherd/meow_launcher_internal.h +++ b/patch_v2/meow_launcherd/meow_launcher_internal.h @@ -175,6 +175,8 @@ extern "C" { #define NET_LIST_BT_NEARBY 4 /* 蓝牙附近设备(已配对 + 扫描发现;下拉,只读展示) */ #define NET_LIST_BT_MODE 5 /* 蓝牙当前连接模式(只读信息;对应"蓝牙模式"行,s_net_get 显示) */ #define NET_LIST_ABOUT 6 /* 系统设置「关于本机」:只读设备信息弹窗(复用 s_dd_modal) */ +#define NET_LIST_WIFI_PAGE 7 /* M2.76:WiFi 独立子页面入口(tap → run_wifi_page) */ +#define NET_LIST_BT_PAGE 8 /* M2.76:蓝牙独立子页面入口(tap → run_bt_page) */ #define S_NET_MAX 8 /* 网络下拉一次最多展示项(屏幕高度限制) */ #define BG_PRESETS_N 3 #define HK_PRESETS_N 2 @@ -414,8 +416,46 @@ typedef struct { } srow_t; -/* 已保存网络 / 扫描结果 / 蓝牙设备名称列表(用于下拉展示与连接动作) */ -typedef struct { int id; char name[48]; } meow_net_t; +/* 已保存网络 / 扫描结果 / 蓝牙设备名称列表(用于下拉展示与连接动作)。 + * M2.76:追加 mac[24](AP BSSID / 蓝牙设备 MAC),供连接/配对/详情展示;无则空串。 */ +typedef struct { int id; char name[48]; char mac[24]; } meow_net_t; + + +/* ================================================================== */ +/* M2.76:WiFi/蓝牙独立子页面脚手架(安卓风:顶栏+返回+分组列表+滚动) */ +/* 实现:subpage.c(统一循环) + wifi_page.c / bt_page.c(数据/动作)。 */ +/* 与设置页同主题(s_ui_theme,MD3 语义色,明暗自动);滑动方向沿用 */ +/* 设置页语义(含 input.swipe_invert);局部刷新不整屏重绘;模态弹窗 */ +/* 复用 launcher 既有 s_dd_modal(点外关闭不穿透,见 settings_page.c)。*/ +/* ================================================================== */ +#define SUB_ROWS_MAX 44 /* 子页一次最多行数(分组标题+各行,防爆) */ + +/* 子页一行:kind 决定渲染(组标题 / 普通行 / 开关行 / 动作行<右chevron>) */ +typedef enum { SUB_HDR, SUB_ROW, SUB_SW, SUB_ACT } sub_kind_t; +typedef struct { + sub_kind_t kind; + const char *label; /* 主文本 */ + const char *sub; /* 副文本/摘要(右侧 dim 文字),可空 */ + int on; /* SUB_SW:开关态 */ + int act; /* 动作码(回传给 act 回调定位具体行) */ +} sub_row_t; + +/* 子页描述(页面提供回调,脚手架负责绘制/滚动/触摸/按键/自动息屏) */ +typedef struct sub_page { + const char *title; /* 顶栏标题 */ + int (*top_sw)(void *ctx, int *on); /* 顶栏开关:返回 1=显示开关并写 *on;0=无开关 */ + void (*top_sw_set)(void *ctx, int on);/* 顶栏开关切换(写+生效+触发重扫) */ + int (*rows)(void *ctx, sub_row_t *rbuf, int max); /* 填行,返回行数 */ + int (*act)(void *ctx, int idx, int act); /* 点动作行/开关行;返回 1=重绘+重填行 */ + int (*detail)(void *ctx, int idx, int act);/* 点 SUB_ROW 行(如连接/设备详情);返回 1=重绘 */ + int live; /* 1=驻留时周期性(约2s)重扫行(蓝牙/附近扫描刷新用) */ + void *ctx; /* 页面私有上下文 */ +} sub_page_t; + +/* 运行子页(阻塞到返回;返回 0)。由 wifi_page.c / bt_page.c 各自实现。 */ +int meow_subpage_run(sub_page_t *p); +int run_wifi_page(void); +int run_bt_page(void); /* chip 索引(⑥:第 5 个 = 电源菜单,点击唤起既有系统电源菜单 show_power_menu) */ @@ -586,6 +626,17 @@ void meow_sys_light(void); void meow_sys_refresh(void); void meow_toggle_panel(void); void net_wifi_ssid(char *buf, int len); +/* M2.76:网络/蓝牙列表现拆分给 WiFi/蓝牙独立子页面用(原 static,改为跨模块暴露) */ +void net_wifi_scan_trigger(void); +void net_bt_scan_trigger(void); +int net_wifi_info(char (*info)[48], int max); +int net_wifi_saved(meow_net_t *out, int max); +int net_wifi_scan(meow_net_t *out, int max); +int net_bt_paired(meow_net_t *out, int max); +int net_bt_scan(meow_net_t *out, int max); +int net_bt_connected(meow_net_t *out, int max); +int bt_role(char *desc, int len); +void net_bt_mode_str(char *buf, int len); unsigned long long now_ms(void); void paint_sb_clock(void); void paint_sb_right(void); diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index a0917313796dabbe3a2111a7dff787b9ddd03621..e1b32b607fedd18fa543c973ab6aa43cc2f61687 100755 GIT binary patch delta 177114 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

Xi=E^6fNT%X1I8nv7M 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 KPj?=ZSN>m4xsgo( delta 162255 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 z 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

d(;vs_E+nP z@2fd_N~>C^2CJzR^XMb;-fTn-KESj0O|}caJ8agqjrg=r#^#VFRkN975KEAVdn`<+ zD}4DW#3OPU)SSDlc}vIcQwK%!Te@YRs*=eyh&g-I4AoI%6w#%pihtW6tSRMf?m)tB z1maFxL0rz*EyP73ZXX>Dw-N>qKBTVI!4FlgT!SB~h3;`;JD0cUmp{Nf6l^Cx>;)9^ zTPObQzlK2|Ai)pyt!q3xo&_SOE(7&7`~eXa-o zaQvuBXdHD^-6&MT5u+%sQQaW@N8n?0#hY-{j+av1qt?d@m?-rsxUlEy4o%LZREIxvbzm7I<5}L_;wiSIQHJm z6QFzotDUrc%I?4t>!Gtj8=9&BM!{O_?Xa$2j-7kLXISxv(SiQYxH)>gb$=e2DF%5r z5(Nx57GL6w5_;ZAbx~AD7@bo*8O0qc<#L&H$~HXom6{}dr<}%Xdeng!k^cp^fvK6I zr|g5{;XgAQcl@uqF~%wWf(%q-@)oh}Ot=dZ{)>gY->4K(@h67iPNVdWZ`6%W)|b&z zx&IxOYGshTV2VEfC)gamI!XusqDIQ5uh_e;6y0Z88+fMc_yP1Z;he4Ueq(9|)Habj z5NZ<#kZ(f`$eM5AJr~qs(Zn=5@5Sr=ht)52+y(U$o%tQ~4S*OKDVng=l30 zXLKnSFyj~0Mj^5qgsen^dK%)F>_-6C_4^<;go)`(r-Gt3`jx)@SFSJ1p;LpO+vaVE(h6BA zE}>T|@+$m~0TRoxRGUXSJ?@ET9>EQ_{bT)re~y1d#RmsnIe7yA+^*I!`ioJ{xa*Q% z5U%7G@NJ7bP-*|@`Jeu7z(10sdsZ(#KIlE+cKN32iE++2Pno>LRVMYkIOi%)K*qZ8 z|6q86-~@&5`Y2rm_);(6M5SEa7o\t\t\t"。 - * 填 out[i].id/.name(SSID,中文经 wpa_decode_ssid 还原 \xNN),返回项数(≤max)。 */ -static int net_wifi_saved(meow_net_t *out, int max) + * 填 out[i].id/.name(SSID,中文经 wpa_decode_ssid 还原 \xNN)/.mac(BSSID),返回项数(≤max)。 */ +int net_wifi_saved(meow_net_t *out, int max) { int n = 0; char *o = popen_read_tmo(1500, "PATH=/bin:/sbin:/usr/bin:/usr/sbin wpa_cli -i wlan0 list_networks 2>/dev/null"); @@ -234,6 +234,9 @@ static int net_wifi_saved(meow_net_t *out, int max) char *sp = p; while (*sp && *sp != ' ' && *sp != '\t') sp++; while (*sp == ' ' || *sp == '\t') sp++; char *se = sp; while (*se && *se != ' ' && *se != '\t' && *se != '\n' && *se != '\r') se++; + /* BSSID 列(SSID 后):\t\t\t,拷进 mac 供详情/连接展示 */ + char *bp = se; while (*bp == ' ' || *bp == '\t') bp++; + char *be = bp; while (*be && *be != ' ' && *be != '\t' && *be != '\n' && *be != '\r') be++; if (sp != se) { /* M2.40:list_networks 对中文 SSID 输出 \xNN 转义文字(如 \xe5\xa4\xa9… = "天…"), * 先拷进临时缓冲再还原成真实 UTF-8 字节存入 name,否则界面显示超长乱码。 */ @@ -243,6 +246,10 @@ static int net_wifi_saved(meow_net_t *out, int max) memcpy(raw, sp, (size_t)l); raw[l] = 0; out[n].id = id; wpa_decode_ssid(raw, out[n].name, sizeof out[n].name); + if (be > bp && (be - bp) < (int)sizeof out[n].mac) { + memcpy(out[n].mac, bp, (size_t)(be - bp)); + out[n].mac[be - bp] = 0; + } n++; } } @@ -255,7 +262,7 @@ static int net_wifi_saved(meow_net_t *out, int max) /* WiFi 扫描触发(异步:wpa_cli scan 只是通知 supplicant 发起扫描,立即返回)。 * 结果稍后经 net_wifi_scan() 读。 */ -static void net_wifi_scan_trigger(void) +void net_wifi_scan_trigger(void) { if (!wlan_connected()) return; system("PATH=/bin:/sbin:/usr/bin:/usr/sbin wpa_cli -i wlan0 scan 2>/dev/null"); @@ -267,8 +274,8 @@ static void net_wifi_scan_trigger(void) * flags 恒以 '[' 起;SSID 为 flags 后的整段余量(可含空格;为空=隐藏网络)。 * M2.40:同一 AP 常出现多条(不同频段/空 SSID/重名),按 BSSID 去重——每个 BSSID 只留一条, * 优先采用含完整 SSID 的行(后到且有 SSID 则覆盖先到的空 SSID 行),隐藏网络显示 "(隐藏网络)"。 - * 填 out[i].id=-1;name 存 SSID(或隐藏标记)。返回项数(≤max,且 ≤S_NET_MAX)。 */ -static int net_wifi_scan(meow_net_t *out, int max) + * 填 out[i].id=-1;name 存 SSID(或隐藏标记)/mac 存 BSSID。返回项数(≤max,且 ≤S_NET_MAX)。 */ +int net_wifi_scan(meow_net_t *out, int max) { int n = 0; if (max > S_NET_MAX) max = S_NET_MAX; @@ -315,6 +322,7 @@ static int net_wifi_scan(meow_net_t *out, int max) seen_bssid[idx][sizeof seen_bssid[idx] - 1] = 0; named[idx] = has; out[idx].id = -1; + snprintf(out[idx].mac, sizeof out[idx].mac, "%s", bssid); /* 保留 BSSID 供详情展示 */ if (has) { /* M2.41:扫描结果 SSID 也可能是 wpa_cli 的 \xNN 转义(中文),还原成真 UTF-8 */ char raw[96]; @@ -341,8 +349,8 @@ static int net_wifi_scan(meow_net_t *out, int max) /* 蓝牙已配对设备(bluetoothctl paired-devices):每行 "Device "。 - * hci 未上电则返回 0(避免 spawn bluetoothctl 白跑)。 */ -static int net_bt_paired(meow_net_t *out, int max) + * 填 out[i].mac=MAC / .name=名称;hci 未上电则返回 0(避免 spawn bluetoothctl 白跑)。 */ +int net_bt_paired(meow_net_t *out, int max) { if (!hci_powered()) return 0; int n = 0; @@ -358,11 +366,15 @@ static int net_bt_paired(meow_net_t *out, int max) char *mac = p; while (*mac && *mac != ' ' && *mac != '\t') mac++; char *nm = mac; while (*nm == ' ' || *nm == '\t') nm++; /* 设备名每行即名称 token;名称可含空格,这里取整行剩余部分(含 MAC 后的名字) */ + int ml = (int)(mac - p); if (ml > 47) ml = 47; + if (ml > 0 && ml < (int)sizeof out[n].mac) { + memcpy(out[n].mac, p, (size_t)ml); out[n].mac[ml] = 0; + } if (*nm) snprintf(out[n].name, sizeof out[n].name, "%s", nm); else { - int ml = (int)(mac - p); if (ml > 47) ml = 47; - memcpy(out[n].name, p, (size_t)ml); out[n].name[ml] = 0; + int l = ml; if (l > 47) l = 47; + memcpy(out[n].name, p, (size_t)l); out[n].name[l] = 0; } out[n].id = -1; n++; @@ -374,6 +386,42 @@ static int net_bt_paired(meow_net_t *out, int max) } +/* 蓝牙已连接设备(bluetoothctl `devices Connected`):每行 "Device "。 + * M2.76:供蓝牙独立子页面「已连接设备」分组展示。hci 未上电返回 0。 */ +int net_bt_connected(meow_net_t *out, int max) +{ + if (!hci_powered()) return 0; + char *o = popen_read_tmo(1500, + "PATH=/bin:/sbin:/usr/bin:/usr/sbin printf 'devices Connected\\nquit\\n' | bluetoothctl 2>/dev/null"); + if (!o) return 0; + int n = 0; + char *line = o; + while (line && *line && n < max) { + char *eol = strchr(line, '\n'); + if (eol) *eol = 0; + char *q = line; while (*q == ' ' || *q == '\t') q++; + if (!strncmp(q, "Device ", 7)) { + q += 7; + char *mac = q; while (*mac && *mac != ' ' && *mac != '\t' && *mac != '\n' && *mac != '\r') mac++; + char *nm = mac; while (*nm == ' ' || *nm == '\t') nm++; + int ml = (int)(mac - q); if (ml > 47) ml = 47; + if (ml > 0 && ml < (int)sizeof out[n].mac) { + memcpy(out[n].mac, q, (size_t)ml); out[n].mac[ml] = 0; + } + char *e = nm; while (*e && *e != '\n' && *e != '\r') e++; + *e = 0; + if (*nm) snprintf(out[n].name, sizeof out[n].name, "%s", nm); + else { int l = ml; if (l > 47) l = 47; memcpy(out[n].name, q, (size_t)l); out[n].name[l] = 0; } + out[n].id = -1; + n++; + } + line = eol ? eol + 1 : NULL; + } + free(o); + return n; +} + + /* ---- 蓝牙附近设备(未配对扫描发现;异步,不阻塞主循环)---- * M2.40:用户要的「附近的设备」= 蓝牙扫描发现(含未配对),而不只是已配对。扫描较慢(2-6s), * 故后台有界驱动 bluetoothctl:scan on → sleep 4 → scan off → devices → quit,输出写 /tmp 缓存; @@ -382,7 +430,7 @@ static int net_bt_paired(meow_net_t *out, int max) static long g_bt_scan_ms = 0; /* 最近一次发起扫描的 now_ms();0=从未 */ -static void net_bt_scan_trigger(void) +void net_bt_scan_trigger(void) { if (!hci_powered()) return; long t = (long)now_ms(); @@ -395,7 +443,7 @@ static void net_bt_scan_trigger(void) /* 读蓝牙附近设备缓存:解析 bluetoothctl `devices` 输出("Device ",去重;含已配对 * 与未配对但已发现的设备)。缓存不存在/为空则退回已配对列表(保证至少展示已知设备)。 * 返回项数(≤max,且 ≤S_NET_MAX)。 */ -static int net_bt_scan(meow_net_t *out, int max) +int net_bt_scan(meow_net_t *out, int max) { if (!hci_powered()) return 0; if (max > S_NET_MAX) max = S_NET_MAX; @@ -424,6 +472,9 @@ static int net_bt_scan(meow_net_t *out, int max) char *e = nm; while (*e && *e != '\n' && *e != '\r') e++; *e = 0; /* 去行尾换行 */ strncpy(seen[n], dv, (size_t)ml); seen[n][ml] = 0; + if (ml < (int)sizeof out[n].mac) { + memcpy(out[n].mac, dv, (size_t)ml); out[n].mac[ml] = 0; /* 保留 MAC 供配对/连接 */ + } if (*nm) snprintf(out[n].name, sizeof out[n].name, "%s", nm); else { @@ -484,7 +535,7 @@ static int a2dp_side(const char *sec) /* 蓝牙角色:见上方注释。一次 popen 拿 ACL + A2DP + 已连设备名三类信息,避免反复 spawn。 */ -static int bt_role(char *desc, int len) +int bt_role(char *desc, int len) { if (desc && len > 0) desc[0] = 0; if (!g_sys.bt_seen || !hci_powered()) { @@ -575,6 +626,14 @@ void bt_role_refresh(int force) g_sys.bt_on = (g_sys.bt_role != BT_ROLE_OFF) ? 1 : 0; } +/* M2.76:蓝牙角色中文描述(节流刷新,读缓存 g_bt_mode;供蓝牙子页摘要行, + * 避免子页驻留期间每 tick 反复 popen bt_role)。 */ +void net_bt_mode_str(char *buf, int len) +{ + bt_role_refresh(0); + snprintf(buf, len, "%s", g_bt_mode); +} + /* 网络信息缓存(绘制路径只读,s_net_refresh 刷新;下拉打开时才重新解析列表) */ static char g_net_ssid[64] = "未连接"; @@ -616,6 +675,8 @@ int s_net_get(const srow_t *r, char *buf, int len) case NET_LIST_BT_NEARBY: snprintf(buf, len, "%d 台设备", g_net_bt_n); return 0; case NET_LIST_BT_MODE: snprintf(buf, len, "%s", g_bt_mode); return 0; case NET_LIST_ABOUT: snprintf(buf, len, "MeowOS v%s", g_meowos_version); return 0; + case NET_LIST_WIFI_PAGE: snprintf(buf, len, "%s", g_net_ssid); return 0; /* M2.76:子页入口摘要 */ + case NET_LIST_BT_PAGE: snprintf(buf, len, "%s", g_bt_mode); return 0; /* M2.76 */ } snprintf(buf, len, "-"); return 0; diff --git a/patch_v2/meow_launcherd/settings_page.c b/patch_v2/meow_launcherd/settings_page.c index 37f77f2..eb1e5c2 100644 --- a/patch_v2/meow_launcherd/settings_page.c +++ b/patch_v2/meow_launcherd/settings_page.c @@ -43,79 +43,76 @@ static const int s_time_tiers[] = { /* 分组/键/类型/默认与 SYSTEM_SETTINGS.md §1 一致(新建项四端同步)。 */ static const srow_t SMENU[] = { /* 显示 */ - { "显示", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "亮度", "display.brightness", SC_SLIDER, 1,100,1, NULL,NULL,0 }, - { "息屏模式", "display.screen_off_mode", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "息屏时间", "display.screen_off_timeout", SC_SLIDER, 0,(S_TIME_TIERS_N-1),1, NULL,NULL,0 }, - { "刷新率", "display.refresh_rate", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "最高刷新率", "display.refresh_always_max", SC_SWITCH, 0,0,0, NULL,NULL,0 }, + { "显示", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "亮度", "display.brightness", SC_SLIDER, 1,100,1, NULL,NULL,0,0 }, + { "息屏模式", "display.screen_off_mode", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "息屏时间", "display.screen_off_timeout", SC_SLIDER, 0,(S_TIME_TIERS_N-1),1, NULL,NULL,0,0 }, + { "刷新率", "display.refresh_rate", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "最高刷新率", "display.refresh_always_max", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, /* B2b 主题三方式:标题行「主题」改选 display.theme_mode(手动/时段自动), * 手动深浅由下方「主题深浅」(display.theme) 控制;时段两键为分钟滑条(STEP=15)。 */ - { "主题", "display.theme_mode", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "主题深浅", "display.theme", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "深色时段开始", "display.theme_dark_start", SC_SLIDER, 0,1439,15, NULL,NULL,0 }, - { "深色时段结束", "display.theme_dark_end", SC_SLIDER, 0,1439,15, NULL,NULL,0 }, - { "背景", "display.background", SC_PRESET, 0,0,0, bg_presets, bg_preset_labels, BG_PRESETS_N }, - /* 网络 */ - { "网络", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "WiFi", "network.wifi_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - { "WiFi连接", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_WIFI_SSID }, - { "已保存网络", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_WIFI_SAVED }, - { "附近WiFi", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_WIFI_SCAN }, - { "蓝牙", "network.bluetooth_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - { "蓝牙模式", NULL, SC_INFO, 0,0,0, NULL,NULL,0, NET_LIST_BT_MODE }, - { "蓝牙设备", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_BT_NEARBY }, + { "主题", "display.theme_mode", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "主题深浅", "display.theme", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "深色时段开始", "display.theme_dark_start", SC_SLIDER, 0,1439,15, NULL,NULL,0,0 }, + { "深色时段结束", "display.theme_dark_end", SC_SLIDER, 0,1439,15, NULL,NULL,0,0 }, + { "背景", "display.background", SC_PRESET, 0,0,0, bg_presets, bg_preset_labels, BG_PRESETS_N,0 }, + /* 网络:M2.76 WiFi/蓝牙升级为独立子页面(安卓风)。入口行为「列表行」+右侧 chevron, + * 摘要显示当前状态(s_net_get);点开进入对应子页(顶栏+返回+分组列表),详见 + * wifi_page.c / bt_page.c。原来散落的开关/列表/信息行收敛进子页面。 */ + { "网络", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "WiFi", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_WIFI_PAGE }, + { "蓝牙", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_BT_PAGE }, /* 电源 */ - { "电源", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "长按弹菜单", "power.longpress_menu_ms", SC_SLIDER, 500,5000,500, NULL,NULL,0 }, - { "长按强关", "power.forceoff_ms", SC_SLIDER, 5500,15000,500, NULL,NULL,0 }, - { "退出热键", "power.defeat_hotkey", SC_PRESET, 0,0,0, hk_presets, hk_preset_labels, HK_PRESETS_N }, + { "电源", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "长按弹菜单", "power.longpress_menu_ms", SC_SLIDER, 500,5000,500, NULL,NULL,0,0 }, + { "长按强关", "power.forceoff_ms", SC_SLIDER, 5500,15000,500, NULL,NULL,0,0 }, + { "退出热键", "power.defeat_hotkey", SC_PRESET, 0,0,0, hk_presets, hk_preset_labels, HK_PRESETS_N,0 }, /* 开机 */ - { "开机", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "默认系统", "boot.default", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "显示选单", "boot.menu_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - { "选单超时", "boot.timeout_ms", SC_SLIDER, 0,30000,500, NULL,NULL,0 }, + { "开机", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "默认系统", "boot.default", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "显示选单", "boot.menu_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, + { "选单超时", "boot.timeout_ms", SC_SLIDER, 0,30000,500, NULL,NULL,0,0 }, /* 输入 */ - { "输入", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "热键序列", "input.hotkey_seq", SC_PRESET, 0,0,0, seq_presets, seq_preset_labels, SEQ_PRESETS_N }, - { "热键窗口", "input.hotkey_window_ms", SC_SLIDER, 0,5000,100, NULL,NULL,0 }, - { "触摸布防", "input.touch_arm_delay_ms", SC_SLIDER, 0,2000,50, NULL,NULL,0 }, - { "滑动方向", "input.swipe_invert", SC_SWITCH, 0,0,0, NULL,NULL,0 }, + { "输入", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "热键序列", "input.hotkey_seq", SC_PRESET, 0,0,0, seq_presets, seq_preset_labels, SEQ_PRESETS_N,0 }, + { "热键窗口", "input.hotkey_window_ms", SC_SLIDER, 0,5000,100, NULL,NULL,0,0 }, + { "触摸布防", "input.touch_arm_delay_ms", SC_SLIDER, 0,2000,50, NULL,NULL,0,0 }, + { "滑动方向", "input.swipe_invert", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, /* 字体主题 */ - { "字体主题", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "字体文件", "font.file", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, + { "字体主题", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "字体文件", "font.file", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, /* M2.5x 字体档位分层/按需大字库:「加载大字库」= font.load_full(int 0/1 默认 0)。 * 开 → 强制全系统用大字库 gbk≈20k 档(覆盖 app 未声明/覆盖默认 font.file); * 关(默认)→ 小字库 common≈4k,仅 app 声明 fonts:"full" 才大字库。 */ - { "加载大字库", "font.load_full", SC_SWITCH, 0,0,0, NULL,NULL,0 }, + { "加载大字库", "font.load_full", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, /* M2.5x 多字体:开关 + 6 个字符类别字体(preset=可用 MeowOS/fonts/// 列表; * 值空 = 跟随全局 font.file)。仅开关开启时 6 行可见(s_row_visible)。 */ - { "多字体", "display.multi_font", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - { "中文(CJK)", "font.class_cjk", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "中文标点", "font.class_cjk_sym", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "数字", "font.class_num", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "拉丁字母", "font.class_latin", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "半角标点", "font.class_latin_sym", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "其他字符", "font.class_other", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, - { "标题字号", "font.size.title", SC_SLIDER, 16,40,1, NULL,NULL,0 }, - { "正文字号", "font.size.body", SC_SLIDER, 12,28,1, NULL,NULL,0 }, - { "UI风格", "ui.style", SC_ENUM, 0,0,0, NULL,NULL,0 }, + { "多字体", "display.multi_font", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, + { "中文(CJK)", "font.class_cjk", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "中文标点", "font.class_cjk_sym", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "数字", "font.class_num", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "拉丁字母", "font.class_latin", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "半角标点", "font.class_latin_sym", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "其他字符", "font.class_other", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0,0 }, + { "标题字号", "font.size.title", SC_SLIDER, 16,40,1, NULL,NULL,0,0 }, + { "正文字号", "font.size.body", SC_SLIDER, 12,28,1, NULL,NULL,0,0 }, + { "UI风格", "ui.style", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, /* 通知 */ - { "通知", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "通知中心", "notify.center_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - { "应用配额", "notify.app_quota", SC_SLIDER, 1,64,1, NULL,NULL,0 }, + { "通知", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "通知中心", "notify.center_enabled", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, + { "应用配额", "notify.app_quota", SC_SLIDER, 1,64,1, NULL,NULL,0,0 }, /* 日志 */ - { "日志", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "日志级别", "log.level", SC_ENUM, 0,0,0, NULL,NULL,0 }, - { "写入TF卡", "log.to_card", SC_SWITCH, 0,0,0, NULL,NULL,0 }, + { "日志", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "日志级别", "log.level", SC_ENUM, 0,0,0, NULL,NULL,0,0 }, + { "写入TF卡", "log.to_card", SC_SWITCH, 0,0,0, NULL,NULL,0,0 }, /* 音频 */ - { "音频", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, - { "音量", "audio.volume", SC_SLIDER, 0,100,1, NULL,NULL,0 }, - { "音量上限", "audio.volume_max", SC_SLIDER, 0,100,1, NULL,NULL,0 }, - { "音量跳步", "audio.volume_step", SC_SLIDER, 1,5,1, NULL,NULL,0 }, - { "输出设备", "audio.output", SC_PRESET, 0,0,0, out_presets, out_preset_labels, OUT_PRESETS_N }, + { "音频", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, + { "音量", "audio.volume", SC_SLIDER, 0,100,1, NULL,NULL,0,0 }, + { "音量上限", "audio.volume_max", SC_SLIDER, 0,100,1, NULL,NULL,0,0 }, + { "音量跳步", "audio.volume_step", SC_SLIDER, 1,5,1, NULL,NULL,0,0 }, + { "输出设备", "audio.output", SC_PRESET, 0,0,0, out_presets, out_preset_labels, OUT_PRESETS_N,0 }, /* 关于(设置列表最底;「关于本机」点开 s_about_open 弹只读设备信息框) */ - { "关于", NULL, SC_HEADER, 0,0,0, NULL,NULL,0 }, + { "关于", NULL, SC_HEADER, 0,0,0, NULL,NULL,0,0 }, { "关于本机", NULL, SC_LIST, 0,0,0, NULL,NULL,0, NET_LIST_ABOUT }, }; @@ -1043,11 +1040,11 @@ void run_settings_page(void) if (pwr && pwr_hold_at) { /* M2.10/M2.11 B/M2.37 同款:8s 强关只在该「按住」从未开过菜单(!pwr_menu_state) * 时触发;开过菜单则交给菜单内确认/取消,杜绝「开菜单->取消->仍按住->强关」残留。 */ - if (now - pwr_hold_at >= power_forceoff_ms && !pwr_menu_state) { + if (now - pwr_hold_at >= (unsigned long long)power_forceoff_ms && !pwr_menu_state) { if (sim_no_exec) { logmsg("settings pm: [sim-no-exec] POWER HOLD %dms -> would force poweroff", power_forceoff_ms); } else { logmsg("settings pm: POWER HOLD %dms -> force poweroff", power_forceoff_ms); meow_power_action(POWER_SHUTDOWN); } /* 关机一般不复返;若 reboot 失败返回仍按按住处理(m_prev 由下方统一复写) */ - } else if (now - pwr_hold_at >= power_longpress_menu_ms && !pwr_menu_state) { + } else if (now - pwr_hold_at >= (unsigned long long)power_longpress_menu_ms && !pwr_menu_state) { pwr_menu_state = 1; logmsg("settings pm: POWER HOLD %dms -> show power menu", power_longpress_menu_ms); show_power_menu(); /* 动作在函数内 system();取消则续循环 */ @@ -1076,7 +1073,7 @@ void run_settings_page(void) /* 松开:短按(<长按阈值且菜单未开)→ 单击 = 息屏/亮屏切换 */ if (pwr_suppress_click) { logmsg("settings pm: power release after power-menu -> no toggle (suppress)"); - } else if (pwr_hold_at && (now - pwr_hold_at < power_longpress_menu_ms) && !pwr_menu_state && !pwr_woke) { + } else if (pwr_hold_at && (now - pwr_hold_at < (unsigned long long)power_longpress_menu_ms) && !pwr_menu_state && !pwr_woke) { logmsg("settings pm: power single-click -> toggle panel (was %s)", meow_screen_on ? "on" : "off"); meow_toggle_panel(); meow_auto_slept = 0; /* M2.17:手动/自动息屏后电源单击唤醒均清自动态 */ @@ -1200,9 +1197,13 @@ void run_settings_page(void) s_commit(r, 1); } else if (r->ctrl == SC_LIST) { /* M2.39 网络列表行:开下拉(重新解析)+ 重绘 + 排空本页 tfd - * (复刻 s_dropdown 后的穿透防护,见下方 ENUM/PRESET 分支)。 */ + * (复刻 s_dropdown 后的穿透防护,见下方 ENUM/PRESET 分支)。 + * M2.76:WiFi/蓝牙升级为独立子页面 → 点开进 run_wifi_page/ + * run_bt_page(阻塞,内部自开 fds;返回后仍须排空本页 tfd)。 */ after_modal = 1; - s_net_open(r); + if (r->net_list == NET_LIST_WIFI_PAGE) { run_wifi_page(); s_net_refresh(); } + else if (r->net_list == NET_LIST_BT_PAGE) { run_bt_page(); s_net_refresh(); } + else s_net_open(r); if (tfd >= 0) { unsigned char e[16]; while (read(tfd, e, sizeof e) == 16) {} diff --git a/patch_v2/meow_launcherd/subpage.c b/patch_v2/meow_launcherd/subpage.c new file mode 100644 index 0000000..d31891b --- /dev/null +++ b/patch_v2/meow_launcherd/subpage.c @@ -0,0 +1,504 @@ +/* subpage.c — MeowOS launcher 独立子页面(WiFi/蓝牙)统一脚手架(M2.76)。 + * + * 安卓风子页骨架:顶栏(标题 + 返回 + 右上开关)+ 分组列表(组标题/行/开关/动作) + * + 滚动(跟手,方向沿用设置页 input.swipe_invert 语义)+ 左缘左滑返回 + 底部返回。 + * + * 由页面(wifi_page.c / bt_page.c)通过 sub_page_t 提供: + * - title 顶栏标题 + * - top_sw 顶栏开关(0=不显示;1=显示并回写当前值) + * - top_sw_set 开关切换(写设置 + 生效 + 触发重扫) + * - rows 填行(组标题/普通行/开关行/动作行),返回行数 + * - act 点动作/开关行 + * - detail 点普通行(如当前连接详情、网络/设备详情) + * - live 1=驻留时周期性(约2s)重扫行(蓝牙附近扫描等动态数据) + * + * 与设置页同主题(s_ui_theme,MD3 语义色,明暗自动);局部刷新不整屏重绘; + * 模态弹窗交给 launcher 既有 s_dd_modal(点外关闭不穿透),本脚手架在回调返回后 + * 彻底排空本页 tfd + 重置触摸基线(复刻 run_settings_page 后置排空,防穿透)。 + * + * 物理键:电源=系统级语义(单击息屏/亮屏、长按电源菜单、8s 强关)、音量=系统音量、 + * 播放=抓住——不再映射为返回(APPS §3.4.1 全局接管)。 + */ +#include "meow_launcher_internal.h" + + +/* ---- 布局常量(顶栏/内容区;全屏内容区延用设置页 surface_variant 整屏底)---- */ +#define SUB_TB_Y SB_BAR_H /* 28:顶栏顶缘(状态栏下) */ +#define SUB_TB_H 68 /* 顶栏高 28..96 */ +#define SUB_TB_BOT (SUB_TB_Y + SUB_TB_H) /* 96:顶栏底缘 / 分隔线 */ +#define SUB_CONT_TOP (SUB_TB_BOT + 6) /* 102:内容区顶缘 */ +#define SUB_ROW_H 58 /* 行高(对齐 SROW_H,便于触摸) */ +#define SUB_HDR_H 40 /* 组标题行高 */ +#define SUB_PAD_X 16 /* 水平内边距 */ +#define SUB_SW_W 48 /* 开关宽(s_draw_switch) */ +#define SUB_SW_H 28 +#define SUB_BTN_X 8 /* 底部返回按钮左缘 */ +#define SUB_BTN_W 120 /* 底部返回按钮宽 */ + + +/* 返回行高:组标题 40,其余 58 */ +static int sub_row_h(const sub_row_t *r) +{ + return (r->kind == SUB_HDR) ? SUB_HDR_H : SUB_ROW_H; +} + +/* 滚动 clamp 到 [0, max](scroll_max 由调用方保证 >=0) */ +static int sub_clamp(int v, int max) +{ + if (v < 0) v = 0; + if (v > max) v = max; + return v; +} + + +/* ---- 计算行 y 前缀和(ypos[i]=第 i 行顶缘相对内容区顶;ypos[n]=总高)---- */ +static void sub_ypos(const sub_row_t *rows, int n, int ypos[SUB_ROWS_MAX + 1]) +{ + ypos[0] = 0; + for (int i = 0; i < n; i++) ypos[i + 1] = ypos[i] + sub_row_h(&rows[i]); +} + + +/* ---- 绘制子页(进 back_buf;调用方再局部标脏 + flush)---- + * rows/nrows 为当前行集;scroll_off 为滚动偏移;top_on 为顶栏开关当前值; + * top_sw_en 为是否显示顶栏开关。 */ +static void subpage_paint(sub_page_t *p, const sub_row_t *rows, int nrows, + int scroll_off, int top_on, int top_sw_en) +{ + const meow_ui_theme_t *th = s_ui_theme(); + int W = fb_xres, H = fb_yres; + int ypos[SUB_ROWS_MAX + 1]; + sub_ypos(rows, nrows, ypos); + int total = ypos[nrows]; + int view_h = H - SUB_CONT_TOP; + int scroll_max = total > view_h ? total - view_h : 0; + + /* 全屏底 surface + 顶栏区 */ + fill_rect(0, 0, W, H, th->surface); + draw_statusbar(); + + /* 顶栏:返回箭头 + 标题 + 右上开关;顶栏底缘 outline 分隔线 */ + int tb_cy = SUB_TB_Y + SUB_TB_H / 2; /* 顶栏垂直中心 */ + s_draw_chevron_left(SUB_PAD_X, tb_cy, th->on_surface); + if (p->title) ui_draw(SUB_PAD_X + 24, tb_cy - meow_font_line_height(22) / 2, + p->title, th->on_surface, 22); + if (top_sw_en) { + int sx = W - SUB_PAD_X - SUB_SW_W; + int sy = tb_cy - SUB_SW_H / 2; + s_draw_switch(sx, sy, top_on, th); + } + fill_rect(0, SUB_TB_BOT, W, 2, th->outline); + + /* 内容区(surface_variant 整屏底) */ + fill_rect(0, SUB_TB_BOT, W, H - SUB_TB_BOT, th->surface_variant); + + /* 分组列表行(裁剪到视口;顶部状态栏/顶栏、底部返回区不画) */ + for (int i = 0; i < nrows; i++) { + int ry = SUB_CONT_TOP + ypos[i] - scroll_off; + int rh = sub_row_h(&rows[i]); + if (ry + rh < SUB_CONT_TOP || ry >= H) continue; /* 视口外整行跳过(配滚动) */ + const sub_row_t *r = &rows[i]; + if (r->kind == SUB_HDR) { + ui_draw(SUB_PAD_X + 4, ry + (SUB_HDR_H - meow_font_line_height(18)) / 2, + r->label ? r->label : "", th->on_surface_variant, 18); + } else { + int ly = ry + (SUB_ROW_H - meow_font_line_height(22)) / 2; + ui_draw(SUB_PAD_X + 4, ly, r->label ? r->label : "", th->on_surface, 22); + if (r->sub && r->sub[0]) { + int vw = ui_width(r->sub, 22); + if (r->kind == SUB_ACT) vw += 8; /* 给右 chevron 留位 */ + ui_draw(W - SUB_PAD_X - 12 - vw, ly, r->sub, th->on_surface_variant, 22); + } + if (r->kind == SUB_SW) { + int sy = ry + (SUB_ROW_H - SUB_SW_H) / 2; + s_draw_switch(W - SUB_PAD_X - SUB_SW_W, sy, r->on, th); + } else if (r->kind == SUB_ACT) { + int cy = ry + SUB_ROW_H / 2; + s_draw_chevron(W - SUB_PAD_X - 6, cy, th->on_surface_variant); + } + /* 行底分隔线(on_surface_outline 弱化) */ + meow_ui_fill_rect(SUB_PAD_X + 4, ry + SUB_ROW_H - 1, W - 2 * (SUB_PAD_X + 4), 1, + th->outline); + } + } + + /* 滚动条(内容超出视口时) */ + if (scroll_max > 0) { + int thumb_h = view_h * view_h / total; + if (thumb_h < 24) thumb_h = 24; + int th_y = SUB_CONT_TOP + (view_h - thumb_h) * scroll_off / (total - view_h); + meow_gfx_fill_round(W - 12, SUB_CONT_TOP, 5, view_h, 3, th->surface_container); + meow_gfx_fill_round(W - 12, th_y, 5, thumb_h, 3, th->on_surface_variant); + } + + /* 底部返回按钮(左)+ 版本号(右),复用设置页底部对齐 */ + { + int foot_y = H - meow_font_line_height(20) - 8; + s_draw_chevron_left(SUB_PAD_X + 4, foot_y + meow_font_line_height(20) / 2, + th->on_surface_variant); + ui_draw(SUB_PAD_X + 16, foot_y, "返回", th->on_surface_variant, 20); + char ver[32]; + snprintf(ver, sizeof ver, "MeowOS v%s", g_meowos_version); + ui_draw(W - 8 - ui_width(ver, 20), foot_y, ver, th->outline, 20); + } +} + + +/* ---- 运行子页(阻塞到返回;返回 0)---- */ +int meow_subpage_run(sub_page_t *p) +{ + int W = fb_xres, H = fb_yres; + sub_row_t rows[SUB_ROWS_MAX]; + int ypos[SUB_ROWS_MAX + 1]; + int nrows = 0, scroll_off = 0, total = 0, view_h = 0, scroll_max = 0; + + struct keypoll kp_power, kp_keys; + kp_open(&kp_power, DEV_POWER); kp_open(&kp_keys, DEV_KEYS); + struct kd_state kd_vold, kd_volu, kd_play, kd_pwr; + memset(&kd_vold, 0, sizeof kd_vold); memset(&kd_volu, 0, sizeof kd_volu); + memset(&kd_play, 0, sizeof kd_play); memset(&kd_pwr, 0, sizeof kd_pwr); + int m_prev_vold = 0, m_prev_volu = 0, m_prev_play = 0, m_prev_pwr = 0; + for (int w = 0; w < KEYBUF_WORDS; w++) { + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEDOWN % 32))) m_prev_vold = 1; + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEUP % 32))) m_prev_volu = 1; + if (kp_keys.cur[w] & (1UL << (KEY_PLAYPAUSE % 32))) m_prev_play = 1; + if (kp_power.cur[w] & (1UL << (KEY_POWER % 32))) m_prev_pwr = 1; + } + int tfd = open(DEV_TOUCH, O_RDONLY | O_NONBLOCK); + if (tfd >= 0) { unsigned char ev[16]; while (read(tfd, ev, sizeof ev) == 16) {} } + unsigned long long touch_cooldown_until = now_ms() + 300; + unsigned long long last_tick = now_ms(); + unsigned long long last_act = now_ms(); + unsigned long long last_live = now_ms(); + int after_modal = 0; /* 子页内模态关闭后:覆盖过状态栏,需整帧重绘还原 */ + + /* 触摸状态 */ + int td = 0, td_ok = 0, tdx = -1, tdy = -1, tlx = -1, tly = -1; + int scroll_drag = 0, scroll_base = 0, scroll_y0 = 0, scroll_invert = 0; + int wake_suppress = 0; + unsigned long long pwr_hold_at = 0; + int pwr_menu_state = 0, pwr_woke = 0, pwr_suppress_click = 0; + + /* 顶栏开关初始值 */ + int top_on = 0, top_sw_en = 0; + if (p->top_sw) top_sw_en = p->top_sw(p->ctx, &top_on); + + /* 首填行 + 首绘 */ + nrows = p->rows ? p->rows(p->ctx, rows, SUB_ROWS_MAX) : 0; + if (nrows > SUB_ROWS_MAX) nrows = SUB_ROWS_MAX; + sub_ypos(rows, nrows, ypos); + total = ypos[nrows]; + view_h = H - SUB_CONT_TOP; + scroll_max = total > view_h ? total - view_h : 0; + subpage_paint(p, rows, nrows, scroll_off, top_on, top_sw_en); + meow_dirty_full(); meow_ui_flush(); + + for (;;) { + unsigned long long now = now_ms(); + if (sigterm_flag) break; + int need_paint = 0; + + /* ---- 自动息屏态:留在子页,等待任意输入唤醒,恢复后重绘(不丢上下文)---- */ + if (meow_auto_slept && !meow_screen_on) { + kp_poll(&kp_power, NULL, NULL); kp_poll(&kp_keys, NULL, NULL); + int wake = 0; + for (int w = 0; w < KEYBUF_WORDS; w++) { + if (kp_power.cur[w] & (1UL << (KEY_POWER % 32))) wake = 1; + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEDOWN % 32))) wake = 1; + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEUP % 32))) wake = 1; + if (kp_keys.cur[w] & (1UL << (KEY_PLAYPAUSE % 32))) wake = 1; + } + if (!wake && screen_off_mode == 1 && tfd >= 0) { + struct pollfd spfd = { tfd, POLLIN, 0 }; + if (poll(&spfd, 1, 0) > 0) { + unsigned char ev[16]; + while (read(tfd, ev, sizeof ev) == 16) { + uint16_t type = *(uint16_t *)(ev + 8), code = *(uint16_t *)(ev + 10); + int32_t val = *(int32_t *)(ev + 12); + if (type == EV_KEY && code == BTN_TOUCH && val) wake = 1; + } + } + } + if (wake) { + meow_panel_on(); + meow_auto_slept = 0; + wake_suppress = 1; + last_act = now; + memset(&kd_pwr, 0, sizeof kd_pwr); memset(&kd_vold, 0, sizeof kd_vold); + memset(&kd_volu, 0, sizeof kd_volu); memset(&kd_play, 0, sizeof kd_play); + kp_poll(&kp_power, NULL, NULL); kp_poll(&kp_keys, NULL, NULL); + m_prev_pwr = kp_is_down(&kp_power, KEY_POWER); + m_prev_vold = kp_is_down(&kp_keys, KEY_VOLUMEDOWN); + m_prev_volu = kp_is_down(&kp_keys, KEY_VOLUMEUP); + m_prev_play = kp_is_down(&kp_keys, KEY_PLAYPAUSE); + touch_cooldown_until = now_ms() + 300; + td = 0; td_ok = 0; scroll_drag = 0; tlx = tly = -1; + after_modal = 1; + subpage_paint(p, rows, nrows, scroll_off, top_on, top_sw_en); + meow_dirty_full(); meow_ui_flush(); + } + usleep(POLL_MS * 1000); + continue; + } + + /* ---- 按键 ---- */ + kp_poll(&kp_power, NULL, NULL); kp_poll(&kp_keys, NULL, NULL); + int vold = 0, volu = 0, play = 0, pwr = 0; + for (int w = 0; w < KEYBUF_WORDS; w++) { + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEDOWN % 32))) vold = 1; + if (kp_keys.cur[w] & (1UL << (KEY_VOLUMEUP % 32))) volu = 1; + if (kp_keys.cur[w] & (1UL << (KEY_PLAYPAUSE % 32))) play = 1; + if (kp_power.cur[w] & (1UL << (KEY_POWER % 32))) pwr = 1; + } + (void)kd_tick(&kd_vold, vold); (void)kd_tick(&kd_volu, volu); + (void)kd_tick(&kd_play, play); (void)kd_tick(&kd_pwr, pwr); + vold = kd_vold.stable; volu = kd_volu.stable; + play = kd_play.stable; pwr = kd_pwr.stable; + if (wake_suppress) { + if (!pwr && !vold && !volu && !play) wake_suppress = 0; + } else { + /* 音量键 = 系统音量(对齐设置页,不做光标移动) */ + if (vold && !m_prev_vold) { settings_volume_adj(-settings_volume_step); need_paint = 1; } + if (volu && !m_prev_volu) { settings_volume_adj(+settings_volume_step); need_paint = 1; } + if (play && !m_prev_play) { logmsg("subpage: play key caught (media-reserved)"); last_act = now; } + /* 电源键 = 系统级语义(单击息屏/亮屏、长按电源菜单、8s 强关;不映射返回) */ + if (pwr && !m_prev_pwr) { + pwr_hold_at = now; pwr_menu_state = 0; + pwr_suppress_click = 0; + last_act = now; + if (meow_auto_slept && !meow_screen_on) pwr_woke = 1; + } + if (pwr && pwr_hold_at) { + if (now - pwr_hold_at >= (unsigned long long)power_forceoff_ms && !pwr_menu_state) { + if (sim_no_exec) { logmsg("subpage pm: [sim-no-exec] POWER HOLD -> force poweroff"); } + else { logmsg("subpage pm: POWER HOLD -> force poweroff"); meow_power_action(POWER_SHUTDOWN); } + } else if (now - pwr_hold_at >= (unsigned long long)power_longpress_menu_ms && !pwr_menu_state) { + pwr_menu_state = 1; + logmsg("subpage pm: POWER HOLD -> show power menu"); + show_power_menu(); + last_act = now_ms(); + pwr_hold_at = 0; pwr_menu_state = 0; pwr_woke = 0; + pwr_suppress_click = 1; + memset(&kd_pwr, 0, sizeof kd_pwr); + memset(&kd_vold, 0, sizeof kd_vold); + memset(&kd_volu, 0, sizeof kd_volu); + memset(&kd_play, 0, sizeof kd_play); + kp_poll(&kp_power, NULL, NULL); kp_poll(&kp_keys, NULL, NULL); + m_prev_pwr = kp_is_down(&kp_power, KEY_POWER); + m_prev_vold = kp_is_down(&kp_keys, KEY_VOLUMEDOWN); + m_prev_volu = kp_is_down(&kp_keys, KEY_VOLUMEUP); + m_prev_play = kp_is_down(&kp_keys, KEY_PLAYPAUSE); + after_modal = 1; + need_paint = 1; + goto sub_keys_seeded; + } + } + if (!pwr && m_prev_pwr) { + if (pwr_suppress_click) { + logmsg("subpage pm: power release after menu -> no toggle"); + } else if (pwr_hold_at && (now - pwr_hold_at < (unsigned long long)power_longpress_menu_ms) && + !pwr_menu_state && !pwr_woke) { + logmsg("subpage pm: power single-click -> toggle panel"); + meow_toggle_panel(); + meow_auto_slept = 0; + last_act = now_ms(); + need_paint = 1; + } else if (pwr_woke) { + logmsg("subpage pm: power release after auto wake -> no toggle"); + } + pwr_hold_at = 0; pwr_menu_state = 0; pwr_woke = 0; + pwr_suppress_click = 0; + } + } + if (vol_ramp_dir != 0) { + int held = (vol_ramp_dir > 0) ? volu : vold; + (void)vol_ramp_tick(held); + g_sys.vol = settings_volume_get(); + paint_sb_right(); + need_paint = 1; + } + m_prev_vold = vold; m_prev_volu = volu; m_prev_play = play; m_prev_pwr = pwr; + sub_keys_seeded: + ; + + /* ---- 触摸 ---- */ + if (tfd >= 0 && meow_screen_on) { + struct pollfd pfd = { tfd, POLLIN, 0 }; + if (poll(&pfd, 1, 0) > 0) { + unsigned char ev[16]; + while (read(tfd, ev, sizeof ev) == 16) { + uint16_t type = *(uint16_t *)(ev + 8), code = *(uint16_t *)(ev + 10); + int32_t val = *(int32_t *)(ev + 12); + if (type == EV_ABS) { + if (code == ABS_X || code == ABS_MT_POSITION_X) tlx = val; + else if (code == ABS_Y || code == ABS_MT_POSITION_Y) tly = val; + if (td && !td_ok && tlx >= 0 && tly >= 0) { + tdx = tlx; tdy = tly; td_ok = 1; + scroll_y0 = tdy; + } + if (td_ok && !scroll_drag) { + int ddy = tly - scroll_y0; + if (ddy >= S_SCROLL_SLOP || ddy <= -S_SCROLL_SLOP) { + scroll_drag = 1; + meow_settings_get_bool("input.swipe_invert", &scroll_invert); + scroll_base = scroll_off + (scroll_invert ? -ddy : ddy); + } + } + if (scroll_drag && td_ok) { + int dydt = tly - scroll_y0; + scroll_off = sub_clamp(scroll_base + (scroll_invert ? dydt : -dydt), + scroll_max); + need_paint = 1; + } + } else if (type == EV_KEY && code == BTN_TOUCH) { + if (val && !td) { + if (now_ms() < touch_cooldown_until) { tlx = tly = -1; } + else { td = 1; td_ok = 0; tlx = -1; tly = -1; scroll_drag = 0; } + } else if (!val && td) { + td = 0; + if (scroll_drag) { + scroll_drag = 0; scroll_base = 0; scroll_y0 = 0; + need_paint = 1; + } else if (td_ok) { + int dx = tlx - tdx, dy = tly - tdy; + /* 左缘左滑返回(复用全局判定) */ + if (meow_edge_back(tdx, dx, dy)) { + if (tfd >= 0) { unsigned char e[16]; while (read(tfd, e, sizeof e) == 16) {} } + goto subdone; + } + int adx = dx < 0 ? -dx : dx, ady = dy < 0 ? -dy : dy; + if (adx < 60 && ady < 60) { + int tx = tdx, ty = tdy; + /* 底部返回按钮 */ + if (ty >= H - 52 && tx >= SUB_BTN_X && tx <= SUB_BTN_X + SUB_BTN_W) { + if (tfd >= 0) { unsigned char e[16]; while (read(tfd, e, sizeof e) == 16) {} } + goto subdone; + } + /* 顶栏返回箭头 */ + if (ty >= SUB_TB_Y && ty < SUB_TB_BOT) { + /* 左上角 48x顶栏高 = 返回箭头 */ + if (tx >= 0 && tx < 48) { + if (tfd >= 0) { unsigned char e[16]; while (read(tfd, e, sizeof e) == 16) {} } + goto subdone; + } + /* 顶栏开关 */ + if (top_sw_en && + tx >= W - SUB_PAD_X - SUB_SW_W - 8 && tx < W && + ty >= SUB_TB_Y + (SUB_TB_H - SUB_SW_H) / 2 - 8 && + ty < SUB_TB_Y + (SUB_TB_H - SUB_SW_H) / 2 + SUB_SW_H + 8) { + if (p->top_sw_set) p->top_sw_set(p->ctx, !top_on); + top_on = !top_on; + if (p->rows) nrows = p->rows(p->ctx, rows, SUB_ROWS_MAX); + if (nrows > SUB_ROWS_MAX) nrows = SUB_ROWS_MAX; + sub_ypos(rows, nrows, ypos); + total = ypos[nrows]; + scroll_max = total > view_h ? total - view_h : 0; + if (scroll_off > scroll_max) scroll_off = scroll_max; + last_act = now; + need_paint = 1; + } + continue; + } + /* 普通行命中 */ + int cy = ty - SUB_CONT_TOP + scroll_off; + int idx = -1; + for (int i = 0; i < nrows; i++) { + if (cy >= ypos[i] && cy < ypos[i + 1]) { idx = i; break; } + } + if (idx >= 0) { + sub_kind_t kind = rows[idx].kind; + if (kind == SUB_SW || kind == SUB_ACT) { + if (p->act) p->act(p->ctx, idx, rows[idx].act); + } else if (kind == SUB_ROW) { + if (p->detail) p->detail(p->ctx, idx, rows[idx].act); + } + /* 动作后重扫行:连接/配对/开关已变更数据,列表须反映 */ + if (p->rows) nrows = p->rows(p->ctx, rows, SUB_ROWS_MAX); + if (nrows > SUB_ROWS_MAX) nrows = SUB_ROWS_MAX; + sub_ypos(rows, nrows, ypos); + total = ypos[nrows]; + scroll_max = total > view_h ? total - view_h : 0; + if (scroll_off > scroll_max) scroll_off = scroll_max; + } + if (idx >= 0) { + /* 回调可能开模态(s_dd_modal 用独立 fd 消费);返回后彻底 + * 排空本页 tfd + 重置触摸基线,防穿透(复刻设置页后置排空)。 */ + if (tfd >= 0) { + unsigned char e[16]; + while (read(tfd, e, sizeof e) == 16) {} + usleep(40000); + while (read(tfd, e, sizeof e) == 16) {} + } + td = 0; td_ok = 0; scroll_drag = 0; + scroll_base = 0; scroll_y0 = 0; + tdx = tdy = tlx = tly = -1; + touch_cooldown_until = now_ms() + 300; + memset(&kd_pwr, 0, sizeof kd_pwr); + memset(&kd_vold, 0, sizeof kd_vold); + memset(&kd_volu, 0, sizeof kd_volu); + memset(&kd_play, 0, sizeof kd_play); + kp_poll(&kp_power, NULL, NULL); kp_poll(&kp_keys, NULL, NULL); + m_prev_pwr = kp_is_down(&kp_power, KEY_POWER); + m_prev_vold = kp_is_down(&kp_keys, KEY_VOLUMEDOWN); + m_prev_volu = kp_is_down(&kp_keys, KEY_VOLUMEUP); + m_prev_play = kp_is_down(&kp_keys, KEY_PLAYPAUSE); + after_modal = 1; + need_paint = 1; + } + } + } + td_ok = 0; + } + } + } + } + } + + /* ---- 周期性重扫(live 页:蓝牙附近扫描等驻留更新)---- */ + if (p->live && now - last_live >= 2000) { + last_live = now; + int new_n = p->rows ? p->rows(p->ctx, rows, SUB_ROWS_MAX) : 0; + if (new_n > SUB_ROWS_MAX) new_n = SUB_ROWS_MAX; + if (new_n != nrows) { + nrows = new_n; + sub_ypos(rows, nrows, ypos); + total = ypos[nrows]; + scroll_max = total > view_h ? total - view_h : 0; + if (scroll_off > scroll_max) scroll_off = scroll_max; + last_act = now; + need_paint = 1; + } + } + + /* ---- 重绘 ---- */ + if (need_paint) { + last_act = now; + subpage_paint(p, rows, nrows, scroll_off, top_on, top_sw_en); + if (after_modal) { meow_dirty_full(); after_modal = 0; } + else meow_dirty_add(0, SUB_TB_Y, fb_xres, fb_yres - SUB_TB_Y); /* 含顶栏(开关/返回/标题) */ + meow_ui_flush(); + } + + /* ---- 自动息屏(空闲超时关屏,留在子页,等输入唤醒)---- */ + if (screen_off_timeout > 0 && meow_screen_on && !meow_auto_slept && + (unsigned long long)(now - last_act) >= (unsigned long long)screen_off_timeout * 1000) { + meow_panel_off(); + meow_auto_slept = 1; + wake_suppress = 1; + logmsg("subpage: idle %ds -> auto screen-off (stay)", screen_off_timeout); + } + /* ~1s 状态栏时钟刷新 */ + if (now - last_tick >= 1000) { + last_tick = now; + draw_clock(); + fb_norm_buf0(); + meow_ui_flush(); + } + usleep(POLL_MS * 1000); + } +subdone: + if (tfd >= 0) close(tfd); + kp_close(&kp_power); kp_close(&kp_keys); + logmsg("subpage '%s' closed", p->title ? p->title : ""); + return 0; +} diff --git a/patch_v2/meow_launcherd/wifi_page.c b/patch_v2/meow_launcherd/wifi_page.c new file mode 100644 index 0000000..d2e5970 --- /dev/null +++ b/patch_v2/meow_launcherd/wifi_page.c @@ -0,0 +1,203 @@ +/* wifi_page.c — MeowOS 系统设置「WiFi 独立子页面」(安卓风,M2.76)。 + * + * 页面(sub_page_t 脚手架 subpage.c 驱动): + * - 顶栏:返回 + 标题「WiFi」 + 右上开关(network.wifi_enabled) + * - 当前连接:SSID 行,点开 → 详情(SSID/AP MAC/本机 MAC/AP IP/本机 IP/频道) + * - 已保存网络:每项点 → wpa_cli select_network 连接;当前连接的项标「已连接」 + * - 附近网络:扫描结果(按 BSSID 去重——修复"AP 的 MAC 被当成单独设备列出"; + * 中文 SSID 经 wpa_decode_ssid 还原 \xNN 原始字节 → UTF-8 显示)点开 → 详情(SSID/AP MAC) + * + * 均复用 net.c 既有读取(net_wifi_saved / net_wifi_scan / net_wifi_info / net_wifi_ssid / + * wlan_connected),写入只走 meow_settings_*;本机 MAC 等详情读 wpa_cli status。 + */ +#include "meow_launcher_internal.h" + + +/* action code 判位(act 回调据 act 值定位网络) */ +#define WF_ACT_CURR (-1) /* 当前连接(SUB_ROW,detail) */ +#define WF_ACT_SAVED 0 /* 已保存网络 idx(SUB_ACT,connect) */ +#define WF_ACT_SCAN_BASE 1000 /* 附近网络 1000+idx(SUB_ROW,detail) */ + +typedef struct { + meow_net_t saved[S_NET_MAX]; + meow_net_t scan[S_NET_MAX]; + int saved_n, scan_n; + char ssid[64]; + int connected; /* wlan_connected() */ + int wifi_on; /* network.wifi_enabled */ + long last_scan_ms; /* 扫描触发节流(net_wifi_scan_trigger 间隔) */ +} wifi_ctx_t; + + +/* 顶栏开关当前值 */ +static int wifi_top_sw(void *ctx, int *on) +{ + (void)ctx; + int v = 1; + if (meow_settings_get_bool("network.wifi_enabled", &v) != 0) v = 1; + *on = v; + return 1; +} + + +/* 顶栏开关切换:写设置 + 开/关网卡 + 触发重扫 + 同步状态栏 */ +static void wifi_top_sw_set(void *ctx, int on) +{ + wifi_ctx_t *c = ctx; + meow_settings_set_bool("network.wifi_enabled", on); + s_net_toggle_wifi(on); + g_sys.wifi_on = on; + paint_sb_right(); /* 状态栏 WiFi 图标随开关即时刷新 */ + meow_settings_save(); + if (on) { net_wifi_scan_trigger(); c->last_scan_ms = now_ms(); } +} + + +/* 触发一次 WiFi 扫描(节流:1.5s 内不重复 spawn wpa_cli scan) */ +static void wifi_scan(void *ctx) +{ + wifi_ctx_t *c = ctx; + if (!c->connected) return; + long t = (long)now_ms(); + if (c->last_scan_ms && t - c->last_scan_ms < 1500) return; + c->last_scan_ms = t; + net_wifi_scan_trigger(); +} + + +/* 填行:刷新数据后构建分组列表 */ +static int wifi_rows(void *ctx, sub_row_t *rbuf, int max) +{ + wifi_ctx_t *c = ctx; + /* 刷新数据(popen 读列表;节流触发扫描) */ + c->connected = wlan_connected(); + if (c->connected) { + net_wifi_ssid(c->ssid, sizeof c->ssid); + wifi_scan(c); + } else { + c->ssid[0] = 0; + } + c->saved_n = net_wifi_saved(c->saved, S_NET_MAX); + c->scan_n = net_wifi_scan(c->scan, S_NET_MAX); + if (c->saved_n < 0) c->saved_n = 0; + if (c->scan_n < 0) c->scan_n = 0; + + int n = 0; + /* 当前连接 */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "当前连接"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (n < max) { + rbuf[n].kind = SUB_ROW; + rbuf[n].label = c->connected && c->ssid[0] ? "已连接" : "未连接"; + rbuf[n].sub = c->connected && c->ssid[0] ? c->ssid : ""; + rbuf[n].on = 0; rbuf[n].act = WF_ACT_CURR; + n++; + } + /* 已保存网络 */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "已保存网络"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (c->saved_n == 0) { + if (n < max) { rbuf[n].kind = SUB_ROW; rbuf[n].label = "无已保存网络"; rbuf[n].sub = ""; rbuf[n].on = 0; rbuf[n].act = -2; n++; } + } else for (int i = 0; i < c->saved_n && n < max; i++) { + rbuf[n].kind = SUB_ACT; + rbuf[n].label = c->saved[i].name[0] ? c->saved[i].name : "<未命名>"; + /* 当前连接的 SSID 标记「已连接」;否则显示 BSSID(若有) */ + rbuf[n].sub = (c->connected && c->ssid[0] && !strcmp(c->saved[i].name, c->ssid)) ? "已连接" + : (c->saved[i].mac[0] ? c->saved[i].mac : ""); + rbuf[n].on = 0; rbuf[n].act = WF_ACT_SAVED + i; + n++; + } + /* 附近网络 */ + if (n < max) { rbuf[n].kind = SUB_HDR; rbuf[n].label = "附近网络"; rbuf[n].sub = NULL; rbuf[n].on = 0; rbuf[n].act = 0; n++; } + if (c->scan_n == 0) { + if (n < max) { rbuf[n].kind = SUB_ROW; rbuf[n].label = "未扫描到附近网络"; rbuf[n].sub = ""; rbuf[n].on = 0; rbuf[n].act = -2; n++; } + } else for (int i = 0; i < c->scan_n && n < max; i++) { + rbuf[n].kind = SUB_ROW; + rbuf[n].label = c->scan[i].name[0] ? c->scan[i].name : "(隐藏网络)"; + rbuf[n].sub = c->scan[i].mac[0] ? c->scan[i].mac : ""; + rbuf[n].on = 0; rbuf[n].act = WF_ACT_SCAN_BASE + i; + n++; + } + return n; +} + + +/* 附近网络详情(只读):SSID / AP MAC / 提示 */ +static int wifi_nearby_detail_cb(wifi_ctx_t *c, int scan_idx) +{ + if (scan_idx < 0 || scan_idx >= c->scan_n) return 0; + char line[S_NET_MAX][48]; + const char *txt[S_NET_MAX]; + int n = 0; + snprintf(line[n], sizeof line[0], "SSID: %s", c->scan[scan_idx].name[0] ? c->scan[scan_idx].name : "(隐藏网络)"); txt[n] = line[n]; n++; + if (c->scan[scan_idx].mac[0]) { snprintf(line[n], sizeof line[n], "AP MAC: %s", c->scan[scan_idx].mac); txt[n] = line[n]; n++; } + snprintf(line[n], sizeof line[n], "密码/连接由 HibyOS 处理"); txt[n] = line[n]; n++; + s_dd_modal(c->scan[scan_idx].name[0] ? c->scan[scan_idx].name : "附近网络", txt, n, -1); + return 1; +} + + +/* 普通行(SUB_ROW)点击:当前连接详情 / 附近网络详情 */ +static int wifi_detail(void *ctx, int idx, int act) +{ + (void)idx; + wifi_ctx_t *c = ctx; + if (act == WF_ACT_CURR) { + /* 当前连接详情(wpa_cli status + 网关):SSID/AP MAC/本机 MAC/AP IP/本机 IP/频道 */ + char info[S_NET_MAX][48]; + const char *txt[S_NET_MAX]; + int n = net_wifi_info(info, S_NET_MAX); + if (n == 0) { + snprintf(info[0], sizeof info[0], "%s", c->connected ? "已连接(无详情)" : "未连接"); + txt[0] = info[0]; n = 1; + } else { + for (int i = 0; i < n; i++) txt[i] = info[i]; + } + s_dd_modal(c->ssid[0] ? c->ssid : "当前连接", txt, n, -1); + return 1; + } + if (act >= WF_ACT_SCAN_BASE) return wifi_nearby_detail_cb(c, act - WF_ACT_SCAN_BASE); + return 0; +} + + +/* 动作行(SUB_ACT)点击:已保存网络 → 连接 */ +static int wifi_act(void *ctx, int idx, int act) +{ + (void)idx; + wifi_ctx_t *c = ctx; + if (act >= WF_ACT_SCAN_BASE) return 0; /* 附近是 detail,不走这里 */ + int sidx = act - WF_ACT_SAVED; + if (sidx < 0 || sidx >= c->saved_n) return 0; + if (c->saved[sidx].id < 0) return 0; + char cmd[192]; + snprintf(cmd, sizeof cmd, + "PATH=/bin:/sbin:/usr/bin:/usr/sbin wpa_cli -i wlan0 select_network %d 2>/dev/null", + c->saved[sidx].id); + system(cmd); + net_wifi_scan_trigger(); + c->last_scan_ms = now_ms(); + logmsg("wifi_page: select_network %d", c->saved[sidx].id); + return 1; /* 重绘 + 重填行 */ +} + + +/* 运行 WiFi 独立子页面(阻塞到返回) */ +int run_wifi_page(void) +{ + static wifi_ctx_t c; /* static:行次指针稳定 */ + memset(&c, 0, sizeof c); + sub_page_t p; + memset(&p, 0, sizeof p); + p.title = "WiFi"; + p.top_sw = wifi_top_sw; + p.top_sw_set = wifi_top_sw_set; + p.rows = wifi_rows; + p.act = wifi_act; + p.detail = wifi_detail; + p.live = 0; /* WiFi 列表在动作/开关时重扫即可,避免驻留 popen 轮询 */ + p.ctx = &c; + /* 打开页面立即触发一次扫描,附近列表更贴近最新 */ + net_wifi_scan_trigger(); + c.last_scan_ms = now_ms(); + bt_role_refresh(0); /* 顺带刷新网络缓存(不影响本页) */ + return meow_subpage_run(&p); +}