/* * meow_ui_sys.h — SDK 内置系统状态读取器 + 全局状态栏(A-0 核心)。 * * 供 meow_ui 内部各 TU 协作(绘制后端 present() 前置覆盖 + 输入层事件循环 1s 轻刷)。 * 不随 meow_ui.h 发布给应用。应用侧只通过公共 API 控制显隐/全屏: * meow_ui_set_statusbar() / meow_ui_statusbar_visible() / * meow_ui_set_fullscreen() / meow_ui_statusbar_height()。 * * 数据源与 launcher 的 meow_sys 同源单点一致: * - 电量 /sys/class/power_supply/battery/{capacity,status} * - WiFi /sys/class/net/wlan0/operstate * - 蓝牙 实际 powered(hciconfig -a hci0 的 UP;spawn 贵 → 缓存 30s 刷一次) * - 音量 /usr/data/meow/settings.conf 的 audio.volume(launcher 同文件; * 0-100 并 clamp 到 audio.volume_max 上限,与 launcher vol_clamp 口径一致) * - 时钟 localtime_r(每秒在绘制时现取) */ #ifndef MEOW_UI_SYS_H #define MEOW_UI_SYS_H #include "meow_ui.h" /* 系统快照(状态栏数据源)。时钟不走这里——绘制时现取 localtime。 */ typedef struct meow_sys_state { int batt; /* 电量 %;-1=未知 */ int charging; /* 1=充电/满 */ int wifi_on; /* 网卡 up(射频开;launcher 喂入按 g_sys.wifi_on) */ int wifi_connected;/* 已关联 AP(operstate up);launcher 喂入(g_sys.wifi_connected)。WiFi 分档用 */ int wifi_level; /* 信号 dBm(-1000=未知);launcher 喂入(-60 强 / -75 中 / 更弱弱)。 */ int bt_seen; /* hci0 节点存在 */ int bt_on; /* 实际上电(hciconfig UP) */ int vol; /* 音量 0-100 */ int brightness; /* 背光/亮度 1-100;只有 >0 才显示(屏常亮态)。由 launcher 喂入 * (launcher 是背光写入/clamp 方),SDK 自己亦用 settings 兜底读。 */ } meow_sys_state; /* 顶部状态栏几何(与 launcher SB_BAR_H=28 / SB_FONT=20 对齐,视觉统一)。 * 高度 40→28(用户定),字号 28→20(28px 栏放不下 28 号;20 号按 (高-行高)/2 垂直居中)。 */ #define MUI_SBAR_H 28 #define MUI_SBAR_FONT 20 /* 收合(collapsed)状态下状态栏的有效加载高度(inset)= 顶部提示线高度(px)。 * 收合=状态栏内容上移出屏、只留一条提示线:app 内容据此上移(非满 28), * 形成「不完全沉浸(留提示线)」;与 fullscreen(整条隐藏、inset0)区别。 * 取值沿用公共宏 MEOW_SBAR_HOTZONE_FS(=4,全屏时顶部热区/提示线的缩后高度), * 具体绘制高度(gfx.c 的 MUI_SBAR_HINT_H=6)在渲染端,这里按提示线高度口径即可。 */ #define MUI_SBAR_COLLAPSE_H MEOW_SBAR_HOTZONE_FS /* 首次全量读取;失败仍返回 0(字段置 -1/0)。 */ int meow_ui_sys_init(void); /* 1s 轻刷:电量/WiFi/音量(便宜);蓝牙 30s 缓存刷新。 */ void meow_ui_sys_refresh(void); /* 当前快照(内部只读)。 */ const meow_sys_state *meow_ui_sys_get(void); /* 状态栏是否应绘制(= set_statusbar(1) 且 非 fullscreen),收合(collapsed)兼容: * collapsed 视为状态栏仍在(只留提示线),故 collapsed 时即使 fullscreen 也返回 1, * 让渲染端/输入层继续驱动上收动画与提示线;fullscreen 且不 collapsed → 0(整条隐藏, * 沉浸,保持既有语义)。 */ int meow_ui_sys_statusbar_active(void); /* 状态栏有效高度(px,供 inset/提示条定位):active 时 28;collapsed 时=提示线高度 * MUI_SBAR_COLLAPSE_H(非满 28,app 内容可上移);否则 0(供 meow_ui_statusbar_height 用)。 */ int meow_ui_sys_statusbar_height(void); /* 系统级「下拉展开通知中心」手势挂钩(M2.5x 接线):输入层识别出「起始于顶部热区的 * SWIPE_DOWN」后路由到这里。通知中心 UI 为后续里程碑,此入口作记录/占位;届时由对应 * 代理在此挂真实展开逻辑(IPC SHOW_ACTIVITY / 覆盖层渲染)。 */ void meow_ui_sys_notif_pull(void); /* 自上次渲染后状态栏数据是否已变(1s 轻刷/显隐切换置位);读取即清除。 * 渲染后端 present() 用它决定是否重画顶部条(配合脏区/整帧判断)。 */ int meow_ui_sys_statusbar_force(void); /* 把状态栏画进 back_buf(顶部 MUI_SBAR_H 行)+ 标脏。调用方负责随后上屏。 */ void meow_ui_sys_statusbar_render(void); /* 收合「上移出屏」过渡渲染(仅系统进程/launcher,见 meow_ui_sys_statusbar_render):内容整体上移 * yoff 像素并裁顶;只画可见条高 [0, MUI_SBAR_H-yoff) 行,其余行保留(App 内容由 launcher 标脏切齐)。 * yoff=0 等价 meow_ui_sys_statusbar_render()。实现见 meow_ui_sys.c。 */ void meow_ui_sys_statusbar_render_off(int yoff); /* 把当前顶条模式写到 /tmp/meowapp_sbar(仅 App 进程 !g_sys_render 才写;launcher 读)。 * meow_ui_statusbar_set_collapsed(gfx.c)也调用它,故在头文件声明。 */ void meow_ui_sbar_write_mode(void); #endif /* MEOW_UI_SYS_H */