#!/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
