powermgr 期2: 历史采样环/功耗分解top/电源事件流 + mp2731电流接入 + BT·WiFi分档细化

- history: 30s 节拍内存环形(RING_N=480≈4h)存 pct/est_mw/充电态/屏幕态/亮度,
  不落盘重启清零(板载写磨损不考虑); IPC MSG_PM_HISTORY(0xD4)/D5, CLI history[N]
- top: estimate breakdown 分量实时占比排序视图(2s 刷新, Ctrl-C 退,
  MEOW_PM_TOP_ONCE=1 一次输出供测试); CLI top
- events: 插拔充电器/低电阈值穿越(15%/5%/回20%)/亮灭屏/背光跳变(≥30%);
  App 前后台无可轮询导出点→诚实标注不支持(语言, 期3接 launcher)
  IPC MSG_PM_EVENTS(0xD6)/D7, CLI events[N]
- 模型: 系数路径迁 /data/meow/powermgr/power_model.conf(=/usr/data symlink,
  组件持久化目录定案); WiFi 增未关联(carrier=0→unassoc)分档; BT 细化
  rfkill+hciconfig ACL(up/connected, 有界子进程 900ms 超时, 不可用回退 up)
- mp2731 current_now 接入: 充电态实测 charge_mw=cc_voltage×current/1e9,
  charge_confidence=measured(消费侧无实测节点仍 estimated, 条件写清)
- IPC 0xD4-D7 号段本文件局部定(不动 meow_launcherd/meow_ipc.h, 严守只动本目录)

验证: 宿主 aarch64 54 PASS + qemu-mipsel 54 PASS; 交叉 -Wall -Wextra -Werror 0 warning;
固件阈值 <200KB 达标(133KB); BSS 37.6KB 起见 RSS<1MB 达标
This commit is contained in:
MeowOS committed 2026-09-01 22:13:42 +08:00
1 parent 3b6a73ac10
commit 0cae95c9cc
4 files changed
+605 -54

No files matched your search

+65 -7
View File
@@ -17,7 +17,7 @@ ck() { # ck <名> <期望子串> <实际>
# ---- 搭假节点 ----
PS="$T/ps"; BL="$T/bl"; NET="$T/net"; RF="$T/rfkill"; BT="$T/bt"
mkdir -p "$PS/battery" "$PS/mp2731-charger" "$PS/fusb302-typec-source" "$PS/ac" \
"$BL" "$NET/wlan0" "$RF/rfkill0" "$BT"
"$BL" "$NET/wlan0" "$RF/rfkill0" "$BT/hci0"
echo 94 > "$PS/battery/capacity"
echo Discharging > "$PS/battery/status"
echo 4275000 > "$PS/battery/voltage_now"
@@ -31,6 +31,7 @@ echo 101 > "$BL/max_brightness" # R3 Pro II 实测量程 0-101
echo 50 > "$BL/actual_brightness" # 中档(49%)
echo 50 > "$BL/brightness"
echo up > "$NET/wlan0/operstate"
echo 1 > "$NET/wlan0/carrier" # 已关联(carrier 0=未关联)
echo bluetooth > "$RF/rfkill0/type"
echo 1 > "$RF/rfkill0/soft" # BT 被 soft 块 → off
cat > "$T/netdev" <<'EOF'
@@ -43,7 +44,8 @@ echo meow > "$T/boot_mode"
ENVS="MEOW_PS_DIR=$PS MEOW_BL_DIR=$BL MEOW_NET_DIR=$NET MEOW_RFKILL_DIR=$RF MEOW_BT_DIR=$BT
MEOW_NETDEV=$T/netdev MEOW_PROC_STAT=$T/proc_stat MEOW_BOOT_MODE=$T/boot_mode
MEOW_PM_MODEL=$T/model.conf MEOW_AUDIO_SOCK=$T/no_audio.sock MEOW_PM_SOCK=$T/pm.sock"
MEOW_PM_MODEL=$T/model.conf MEOW_AUDIO_SOCK=$T/no_audio.sock MEOW_PM_SOCK=$T/pm.sock
MEOW_PM_NO_HCICONFIG=1"
ln -sf "$(readlink -f "$BIN")" "$T/meow_power" # argv[0] 双形态
# ---- T1: 守护直读(无守护 → 降级直读) ----
@@ -92,6 +94,20 @@ sleep 3
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T5a "wifi=600(tx)" "$OUT"
# ---- T5b: wifi 未关联(carrier=0)→ unassoc 档 ----
echo 0 > "$NET/wlan0/carrier"
sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T5b "wifi=80(unassoc)" "$OUT"
echo 1 > "$NET/wlan0/carrier"
# ---- T5c: BT up(rfkill 未软块 + hci0 存在;host 无 hciconfig → 回退 up) ----
echo 0 > "$RF/rfkill0/soft"
sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T5c "bt=60(up)" "$OUT"
echo 1 > "$RF/rfkill0/soft"
# ---- T6: 息屏(actual_brightness=0)→ 背光/面板归零 ----
echo 0 > "$BL/actual_brightness"
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
@@ -120,17 +136,59 @@ sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T8d "est_mw=" "$OUT" # 热切换回全功能
# ---- T9: CLI 桩(期 2/3) ----
OUT=$(env $ENVS $Q "$T/meow_power" history 2>&1); RC=$?
ck T9a "期 2" "$OUT"
[ $RC -eq 1 ] && { PASS=$((PASS+1)); echo "PASS T9b rc=1"; } || { FAIL=$((FAIL+1)); echo "FAIL T9b rc=$RC"; }
# ---- T9: 期 2 CLI — history(守护采样环)/policy(期3桩) ----
sleep 1 # 再采几拍,history 有样本
OUT=$(env $ENVS $Q "$T/meow_power" history 2>&1)
ck T9a "history:" "$OUT"
ck T9b "采样点" "$OUT"
ck T9c "est_mW" "$OUT"
echo "$OUT" | grep -q "守护不可达" && { FAIL=$((FAIL+1)); echo "FAIL T9d 应走守护"; } || { PASS=$((PASS+1)); echo "PASS T9d via-daemon"; }
OUT=$(env $ENVS $Q "$T/meow_power" policy 2>&1)
ck T9c "期 3" "$OUT"
ck T9e "期 3" "$OUT"
# ---- T10: meow_powermgr 名直调子命令也走 CLI ----
OUT=$(env $ENVS $Q "$BIN" model 2>/dev/null)
ck T10a "nominal_mah=1600" "$OUT"
# ---- T13: mp2731 current_now 充电功率实测接入(期 2 项 5)----
echo Charging > "$PS/mp2731-charger/status"
echo 1500000 > "$PS/mp2731-charger/current_now"
echo 4200000 > "$PS/mp2731-charger/constant_charge_voltage"
sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T13a "charge=+6300mW" "$OUT" # 4.2V×1.5A=6.3W
ck T13b "confidence=measured" "$OUT" # 充电功率升 measured
OUT=$(env $ENVS $Q "$T/meow_power" status 2>/dev/null)
ck T13c "state=Charging" "$OUT" # 权威链 mp2731=Charging
echo Discharging > "$PS/mp2731-charger/status"
echo 0 > "$PS/mp2731-charger/current_now"
sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" estimate 2>/dev/null)
ck T13d "charge=null" "$OUT" # 放电 → 无实测轨
# ---- T14: 电源事件流(充电器插拔 + 息屏,App 前后台诚实标注不支持)----
OUT=$(env $ENVS $Q "$T/meow_power" events 2>&1)
ck T14a "events:" "$OUT"
ck T14b "charger" "$OUT" # 插/拔充电器事件 tag
echo 0 > "$BL/actual_brightness" # 息屏 → screen 事件
sleep 2
OUT=$(env $ENVS $Q "$T/meow_power" events 2>&1)
ck T14c "screen" "$OUT"
ck T14d "息屏" "$OUT"
echo 50 > "$BL/actual_brightness" # 恢复亮屏(供后测)
# ---- T15: top 功耗分解实时排序(一次输出)----
OUT=$(env $ENVS MEOW_PM_TOP_ONCE=1 $Q "$T/meow_power" top 2>/dev/null)
ck T15a "功耗分解" "$OUT"
ck T15b "screen" "$OUT"
ck T15c "baseline" "$OUT"
echo "$OUT" | grep -q "cpu" && { PASS=$((PASS+1)); echo "PASS T15d cpu行"; } || { FAIL=$((FAIL+1)); echo "FAIL T15d"; }
# ---- T16: 模型系数路径(新定案 /data/meow/powermgr/power_model.conf)----
ENVS_NM=$(echo "$ENVS" | tr ' ' '\n' | grep -v '^MEOW_PM_MODEL=' | tr '\n' ' ')
OUT=$(env $ENVS_NM $Q "$T/meow_power" model 2>/dev/null)
ck T16a "powermgr/power_model.conf" "$OUT"
# ---- T11: 守护停 → CLI 自动降级直读不崩 ----
kill $DPID 2>/dev/null; wait $DPID 2>/dev/null; DPID=""
sleep 1