fix(bootmenu): M6.25 开机菜单/第二屏亮度按用户设置恢复(方案A:显示前读settings.conf写回) — 推卡

This commit is contained in:
AskaEth committed 2026-09-03 14:40:56 +08:00
1 parent 42718385cc
commit 76eb2f4d1c
2 files changed
+40 -1

No files matched your search

+39
View File
@@ -104,6 +104,7 @@
#define PLAYER_BIN "/usr/bin/hiby_player"
#define PLAYER_LOG "/usr/data/meow_player.log"
#define LAUNCHER_BIN "/usr/bin/meow_launcherd" /* MeowOS 基础主屏(M2 接管) */
#define MEOW_SETTINGS_FILE "/usr/data/meow/settings.conf" /* 板载用户设置(display.brightness,与 launcher/watchdog 同源) */
/* ---- 面板/背光(与 meow_launcherd 相同路径,§18.21/§红线)---- */
#ifndef FBIOBLANK
@@ -844,6 +845,37 @@ static void write_brightness(int val)
close(fd);
}
/* M6.25:开机选单亮度以**用户设置**为准(/usr/data/meow/settings.conf 的 display.brightness)。
* 根因:选单显示路径从不写背光,开机菜单/第二屏亮度纯继承引导早期面板高值;M2.83 起 launcher
* 「开机选单期不抢屏」怠速,移除了 launcher 提前写用户亮度那一步 → 菜单亮在引导高值上。
* 与 meow_watchdog wd_settings_brightness() 同源解析(同文件、同 clamp:下限 display.brightness_min
* 默认 1=极暗但可见、上限 100=防闪屏),自包含零依赖,不链 launcher meow_settings。返回 clamped
* 值;settings 文件不可读 → 返回 -1,调用方**不动**(退化为现状,保安全——选单阶段只写 brightness、
* 绝不碰 FBIOBLANK/blank,§18.24 纪律)。 */
static int bootmenu_settings_brightness(void)
{
FILE *f = fopen(MEOW_SETTINGS_FILE, "r");
if (!f) return -1;
int b = 101; /* display.brightness 默认(与 launcher 设置表同值,键缺失时 clamp→100) */
int mn = 1; /* display.brightness_min 默认(极暗但可见;键缺失时保底) */
char buf[128];
while (fgets(buf, sizeof buf, f)) {
char *eq = strchr(buf, '=');
if (!eq) continue;
*eq = 0;
char *k = buf; int kl = (int)strlen(k);
while (kl > 0 && (k[kl-1] == ' ' || k[kl-1] == '\t')) k[--kl] = 0;
char *v = eq + 1; while (*v == ' ' || *v == '\t') v++;
int iv = atoi(v);
if (!strcmp(k, "display.brightness_min")) { if (iv >= 1 && iv <= 100) mn = iv; }
else if (!strcmp(k, "display.brightness")) { b = iv; }
}
fclose(f);
if (b < mn) b = mn;
if (b > 100) b = 100;
return b;
}
/* 面板 unblank(FBIOBLANK 0)。仅用于杀播放器后把屏点亮,以便 MeowOS 接管;
* 播放器已死,故不涉及「播放器 state machine」一致性(§18.11 关注点)。
* bootmenu 选单/自检阶段绝不调用本函数(§18.24 纪律:不碰 panel blank)。 */
@@ -1704,6 +1736,13 @@ int main(int argc, char **argv)
return 0;
}
/* M6.25(方案A):选单显示前把背光按用户设置恢复(display.brightness,clamp [min||1,100])。
* settings 不可读/值非法 → 不动(退化为现状)。只在显示前写一次,不碰 FBIOBLANK/blank(§18.24)。 */
{
int b = bootmenu_settings_brightness();
if (b > 0) write_brightness(b);
}
if (fb_open() != 0) return 1;
fb_snapshot_player(); /* 快照当前显示缓冲(恢复播放器帧用) */
fb_pan_buf0(); /* 画前 pan 到 yoffset=0(buffer0) */