fix(launcher): 开机亮度停100竞态 (agent-230) — settings未读到前不盲写100, 挂起+读到后补应用; launcher aa6c95a4→8ebae666; 宿主4场景PASS
This commit is contained in:
1 parent
c7d02e66e9
commit
f34818037f
8 files changed
+135
-2
No files matched your search
@@ -59,6 +59,9 @@ static meow_settings_listener g_listeners[MEOW_SET_MAX_LISTENERS];
|
||||
static int g_nlisteners = 0;
|
||||
static int g_inited = 0;
|
||||
static int g_broadcasting = 0; /* 防 listener 递归 set */
|
||||
static int g_loaded_from_file = 0; /* M2.86:settings.conf 是否真正从盘读到(区分「默认值激活」
|
||||
* 因 /usr/data 未就绪 fopen 失败 vs 文件已读但键缺失→默认) */
|
||||
static int g_no_file_logged = 0; /* M2.86:本次「未读到」连续段是否已打过 no-file 日志(防重启重试刷屏) */
|
||||
|
||||
/* ---- 默认值表:与 SYSTEM_SETTINGS.md §1 逐键一致(新增设置照附录扩展)---- */
|
||||
static const meow_setting_def g_defs[] = {
|
||||
@@ -243,6 +246,15 @@ int meow_settings_brightness_clamped(void)
|
||||
return clamp_brightness(v);
|
||||
}
|
||||
|
||||
/* M2.86:settings.conf 是否真正从盘上读到过(最近一次 meow_settings_init 是否成功打开了文件)。
|
||||
* 0=S70 早启动 /usr/data 未就绪 fopen 失败 → 当前全为默认值(display.brightness 101→将被 clamp 到 100),
|
||||
* 此时调用方(尤其 apply_user_brightness)不应把默认值当作用户设定写入,应挂起待设置就绪。
|
||||
* 1=文件已读到:键缺失则走各自默认(属「已知」态),用户设定可信。 */
|
||||
int meow_settings_loaded(void)
|
||||
{
|
||||
return g_loaded_from_file;
|
||||
}
|
||||
|
||||
/* ---- 按类型把字符串值 apply 到 cur(读文件/导入时用;含 clamp/校验)---- */
|
||||
static void apply_value(meow_setting *s, const char *v)
|
||||
{
|
||||
@@ -332,12 +344,24 @@ int meow_settings_init(void)
|
||||
strncpy(g_sets[i].cur, g_sets[i].def, sizeof g_sets[i].cur - 1);
|
||||
g_sets[i].dirty = 0;
|
||||
}
|
||||
/* M2.86:每次重载先把「已读到盘上」置 0;成功打开才置 1。
|
||||
* 区分「settings.conf 被读到(键缺失→默认)」与「完全没读到(/usr/data 未就绪 → 纯默认)」,后者
|
||||
* 调用方(apply_user_brightness)不得把默认值当作用户设定盲目写盘(尤其 display.brightness 101→clamp
|
||||
* 100 会误把开机亮度压到满亮)。 */
|
||||
g_loaded_from_file = 0;
|
||||
FILE *f = fopen(MEOW_SETTINGS_FILE, "r");
|
||||
if (!f) {
|
||||
sset_log("no %s, defaults active", MEOW_SETTINGS_FILE);
|
||||
/* M2.86:S70 早启动 /usr/data(UBIFS) 未就绪时 fopen 失败是常态,且 run_menu 每 2s 重试
|
||||
* settings_load —— 只在本次「未读到」连续段首次打日志,避免每 2s 刷一行「no file」。 */
|
||||
if (!g_no_file_logged) {
|
||||
sset_log("no %s, defaults active", MEOW_SETTINGS_FILE);
|
||||
g_no_file_logged = 1;
|
||||
}
|
||||
g_inited = 1;
|
||||
return MEOW_OK;
|
||||
}
|
||||
g_loaded_from_file = 1; /* 文件已打开待读:即便 0 行也视为「已读到」→ 键缺失走默认而非「未知」 */
|
||||
g_no_file_logged = 0; /* 段复位:下次失败(若发生)重新计一句话 */
|
||||
char buf[768];
|
||||
while (fgets(buf, sizeof buf, f)) {
|
||||
char *eq = strchr(buf, '=');
|
||||
|
||||
Reference in new issue
Block a user