Files
MeowOS-For-R3P2/patch_v2/bootmenu/S11jpeg_display_shell
T
AskaEth 0ab23161b6 fix(boot): M21 开机 logo 亮度 — S11 画前压到 <=20 + 新增 S22brightness 按用户设置恢复
冷启动 logo 很亮:stock S11 是画完 logo 之后才写死 60,画图那一刻用的是面板上电默认高亮;
而 S11 早于 S21mount_ubifs,那时 /usr/data 未挂载、读不到 settings.conf,只能写死一个值。

- S11jpeg_display_shell:以基线(249220f2)为底,把背光压制挪到画 logo 之前(jpeg_display
  函数体内、先于 cmd_jpeg_display),值 20(只降不升:S22 已写更暗则不覆盖);删除画完后
  写死 60 的那行;/dev/fb0 等待、mtd5 主题判定、后台 jpeg_display & 语义不变;
  主题判定 `==` 改 `=`(POSIX test,语义不变,便于宿主验证)。
- S22brightness(新):S21mount_ubifs 之后运行,读 /usr/data/meow/settings.conf 的
  display.brightness,按 display.brightness_min 与 sysfs max_brightness clamp 后写入;
  读不到/解析失败不改背光(保持 S11 低值)、无 sleep/重试、任何运行期失败 exit 0;幂等。
- scripts/build/fw_content.conf:登记两条(S11 覆盖基线同名文件、S22 新增),md5 实算,
  说明列写清 S11 < S21mount_ubifs < S22 的顺序依赖。
- scripts/build/README.md:补「覆盖基线已有文件」语义(无条件 cp -f,不校验基线 md5、
  也不跳过已存在文件;唯一基线校验仍是 hiby_player)。

固件需整包刷机才生效,未刷机、未写设备。
2026-11-05 22:04:16 +08:00

90 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
#
# S11jpeg_display_shell — 开机 logo 显示(stock 基线 + MeowOS M21 改动)
#
# stock 基线(md5 249220f2489f63a4c946c55d8d981ca9)的问题:
# 背光是 `cmd_jpeg_display` **画完 logo 之后**才写死的 60。也就是说画图那一刻用的是
# **面板上电默认值**(很亮 —— 用户报「冷启动开机 logo 挺亮」),60 只是画完后的补救。
# 本脚本又跑在 S21mount_ubifs 之前:那时 /usr/data 还没挂载,读不到
# /usr/data/meow/settings.conf,所以这里**只能**写一个和用户设置无关的安全低值。
#
# M21 改动:
# 1) 背光压制挪到画 logo **之前**,值 BOOT_BL_MAX=20(≈max_brightness 101 的 1/5);
# 2) 删除画完后写死 60 的那行 —— 用户亮度改由 S22brightness(/usr/data 挂载后)就位;
# 3) 压制动作「只降不升」:当前值已 ≤20(例如 S22 已按用户设置写成 1)则不再抬高,
# 避免本脚本的 20 反过来把用户更暗的设置顶回去;
# 4) /dev/fb0 等待、mtd5 主题判定、后台 `jpeg_display &` 语义与 stock 一致。
#
# 时序(三层写入者):
# 面板上电默认(亮)→ S11 压到 ≤20(画 logo 前)→ S21mount_ubifs → S22brightness(用户值)
# → S90/S70 拉起 launcher/watchdog 后按 display.brightness 继续维持。
#
# 注:rcS 用 `$i start` fork 执行本脚本,`jpeg_display &` 后父进程立即返回。所以压制写入必须
# 在 jpeg_display() **函数体内**(子进程自己的时序),不能挪到 case 分支顶层 —— 那是父进程,
# 会和子进程抢时序。
BL_BRIGHTNESS="/sys/class/backlight/backlight_pwm0/brightness"
# 上电默认很亮的压制上限(绝对档位 0..max_brightness,不是百分比)。
# 这是「安全低值」,不是用户值;用户值(display.brightness,可能更暗如 1)由 S22brightness 写入。
BOOT_BL_MAX=20
# 只降不升地把背光压到 <= $1:读不到当前值就照写;当前已更低则不动。
bl_cap()
{
cap="$1"
cur=$(cat "$BL_BRIGHTNESS" 2>/dev/null)
case "$cur" in
''|*[!0-9]*) ;; # 读不到 / 非数字 → 照写压制值
*) [ "$cur" -le "$cap" ] && return 0 ;; # 已经更暗(如 S22 已写用户值)→ 不动
esac
echo "$cap" > "$BL_BRIGHTNESS" 2>/dev/null
return 0
}
jpeg_display()
{
echo "Starting display... "
# M21:尽早压制面板上电默认的高亮(仍在函数体内、早于画图)
bl_cap "$BOOT_BL_MAX"
while true
do
if [ -e "/dev/fb0" ]; then
break
fi
sleep 0.02
done
echo "Wait display... "
# M21:画 logo 前再压一次(只降不升)。若等待 fb0 期间有别的写入把亮度抬高,
# logo 仍以低亮度出现;反之若 S22brightness 已写了更暗的用户值,这里不会覆盖它。
bl_cap "$BOOT_BL_MAX"
theme=$(nanddump -q -s 0x20000 -l 7 /dev/mtd5 -a)
# stock 写的是 `==`(BusyBox test 接受,dash/POSIX test 不接受);语义不变,改为 `=` 以便移植与宿主验证。
if [ "$theme" = "theme:1" ]; then
cmd_jpeg_display /etc/logo1.jpeg
elif [ "$theme" = "theme:2" ]; then
cmd_jpeg_display /etc/logo2.jpeg
else
cmd_jpeg_display /etc/logo.jpeg
fi
# stock: "R1 lg 35583 need 100ms delay" —— 原先是给「画完后写 60」留的面板 settle 时间。
# 亮度写入已移到画图之前,但该硬件 settle 保留(在后台子进程里,不阻塞 init 链)。
sleep 0.1
echo "Finish display... "
}
case "$1" in
start)
jpeg_display &
;;
*)
exit 1
esac
exit 0