真机实测:设备充电中但 battery/status 恒 Discharging;权威源为 mp2731-charger/status(Charging/Full),回退链 fusb302-typec-source/online==1 → 旧逻辑 battery/status==Charging || ac/online==1。电量仍读 battery/capacity。 - meow_svc_power: battery/status 命令充电判定走权威链(MEOW_PS_DIR 可重定向供宿主自测); svc_power_authtest 补 6 用例(mp2731 Charging/Full/Discharging + 两级回退)全 PASS - SDK meow_ui_sys: 状态栏充电态同权威链 - launcher util.c: 抽 batt_is_charging() 公共判定;meow_sys_light 1s 轻刷补充电态(插拔实时) - bootmenu 无充电判定(仅读 capacity)/MeowPanel 透传 power 服务:均无需改 - 真机验证(充电窗口):新二进制 battery=88%(Charging),对照固件内旧版 88%(Discharging) - hello/files/ncm 随 meow_ui.a(af6703f2) 重链已热更到卡(.new+mv,md5 对核一致) md5: meow_svc_power 39ae3aa2 / meow_launcherd 2aa61780 / hello 2444c151 / files 691db88b / ncm 89da63ed(仅重链,源码未动)
91 lines
5.3 KiB
C
91 lines
5.3 KiB
C
/*
|
||
* 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(充电态权威源=mp2731-charger/status,
|
||
* 回退 fusb302-typec-source/online → battery/status|ac/online;battery/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);
|
||
|
||
/* 系统级「下拉展开通知中心」手势挂钩(§10.5):输入层识别出「起始于顶部热区的 SWIPE_DOWN」
|
||
* 后路由到这里(origin_y=手势按下原点 Y,供 launcher 复核是否在顶部热区)。App 进程只做
|
||
* 检测+上报:经 IPC 发 MSG_NOTIF_OPEN 请求 launcher 展开通知中心叠加会话;**App 不渲染系统 UI**。
|
||
* best-effort:无 socket/launcher 不在 → 静默降级。 */
|
||
void meow_ui_sys_notif_pull(int origin_y);
|
||
|
||
/* 自上次渲染后状态栏数据是否已变(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 */
|