#!/system/bin/sh
# Optimizacion MAX RK3528 / HS86Pro (2 GB) — CCTV multi-RTSP
# CPU ya en tope de fabrica (1416 MHz); GPU/DMC se fijan al maximo disponible.

PKG_OJO=it.danieleverducci.ojo
PKG_IPCAM=com.github.warren_bank.rtsp_ipcam_viewer
PKG_OPENIPC=com.openipc.decoder

log_tune() { log -t cctv_rk3528 "$1"; }

sleep 1

# --- Sin autorranque kiosco ---
pm disable-user --user 0 com.cctv.kioskboot 2>/dev/null
pm uninstall --user 0 com.cctv.kioskboot 2>/dev/null
pkill -9 -f boot-kiosk.sh 2>/dev/null
pkill -9 -f launch-ojo-rotate.sh 2>/dev/null

# --- Pantalla mosaico ---
setprop sys.display-size 1280x720
settings delete global display_density_forced 2>/dev/null
settings put system user_rotation 0
wm density reset

# --- CPU: performance @ cpuinfo_max (1416000 kHz — no hay OC mas alla del kernel) ---
for pol in /sys/devices/system/cpu/cpufreq/policy*; do
  [ -w "$pol/scaling_governor" ] && echo performance > "$pol/scaling_governor"
  maxf=$(cat "$pol/cpuinfo_max_freq" 2>/dev/null)
  avail=$(cat "$pol/scaling_available_frequencies" 2>/dev/null)
  # Usar la frecuencia mas alta disponible
  topf="$maxf"
  for f in $avail; do
    [ "$f" -gt "$topf" ] 2>/dev/null && topf="$f"
  done
  [ -n "$topf" ] && echo "$topf" > "$pol/scaling_min_freq" 2>/dev/null
  [ -n "$topf" ] && echo "$topf" > "$pol/scaling_max_freq" 2>/dev/null
  [ -w "$pol/scaling_boost" ] && echo 1 > "$pol/scaling_boost" 2>/dev/null
done
# Evitar limitacion schedutil
for rl in /sys/devices/system/cpu/cpufreq/policy*/schedutil/rate_limit_us; do
  [ -w "$rl" ] && echo 1 > "$rl" 2>/dev/null
done

# --- GPU Mali: performance @ 800 MHz (max del dispositivo) ---
GPU=/sys/class/devfreq/ff700000.gpu
if [ -d "$GPU" ]; then
  gmax=$(cat "$GPU/max_freq" 2>/dev/null)
  [ -w "$GPU/governor" ] && echo performance > "$GPU/governor" 2>/dev/null
  [ -n "$gmax" ] && echo "$gmax" > "$GPU/min_freq" 2>/dev/null
  [ -n "$gmax" ] && echo "$gmax" > "$GPU/max_freq" 2>/dev/null
  [ -w "$GPU/polling_interval" ] && echo 50 > "$GPU/polling_interval" 2>/dev/null
fi

# --- DMC (memoria): performance @ 666 MHz ---
DMC=/sys/class/devfreq/dmc
if [ -d "$DMC" ]; then
  dmax=$(cat "$DMC/max_freq" 2>/dev/null)
  [ -w "$DMC/governor" ] && echo performance > "$DMC/governor" 2>/dev/null
  [ -n "$dmax" ] && echo "$dmax" > "$DMC/min_freq" 2>/dev/null
  [ -n "$dmax" ] && echo "$dmax" > "$DMC/max_freq" 2>/dev/null
fi

# --- SurfaceFlinger / HWUI ---
settings put global window_animation_scale 0
settings put global transition_animation_scale 0
settings put global animator_duration_scale 0
settings put global development_settings_enabled 1
setprop security.perf_harden 0
setprop debug.sf.latch_unsignaled 1
setprop debug.hwui.render_dirty_regions 0
setprop debug.sf.disable_backpressure 1 2>/dev/null

# --- WiFi streaming estable ---
settings put global wifi_sleep_policy 2
settings put global wifi_scan_always_enabled 0
settings put system screen_off_timeout 2147483647
settings put system stay_on_while_plugged_in 7
settings put global sync_auto_sync_data 0
settings put global upload_apk_enable 0 2>/dev/null
for p in /sys/class/net/wlan0/device/power/control; do
  [ -w "$p" ] && echo on > "$p"
done

# --- Memoria 2 GB — max RAM libre para decode SW ---
echo 30 > /proc/sys/vm/swappiness 2>/dev/null
echo 40 > /proc/sys/vm/dirty_ratio 2>/dev/null
echo 8 > /proc/sys/vm/dirty_background_ratio 2>/dev/null
echo 1 > /proc/sys/vm/overcommit_memory 2>/dev/null
echo 0 > /proc/sys/kernel/sched_child_runs_first 2>/dev/null
echo 1 > /proc/sys/vm/compaction_proactiveness 2>/dev/null

# --- IO eMMC ---
for blk in mmcblk0 mmcblk1 mmcblk2; do
  [ -w "/sys/block/$blk/queue/read_ahead_kb" ] && echo 2048 > "/sys/block/$blk/queue/read_ahead_kb"
  [ -w "/sys/block/$blk/queue/scheduler" ] && echo deadline > "/sys/block/$blk/queue/scheduler"
done

# --- Google/servicios en segundo plano ---
cmd appops set com.google.android.gms RUN_IN_BACKGROUND ignore 2>/dev/null
cmd appops set com.google.android.gms RUN_ANY_IN_BACKGROUND ignore 2>/dev/null
settings put global cached_apps_freezer enabled 2>/dev/null

# --- Desactivar apps pesadas (liberar RAM/CPU) ---
for pkg in com.google.android.katniss com.google.android.tvlauncher com.android.launcher3 \
  com.cyx.launcher com.ionitech.airscreen com.flyness.smarttv com.android.vending \
  com.google.android.youtube.tv com.google.android.play.games com.google.android.gms \
  com.google.android.gsf com.netflix.mediaclient com.mm.android.DMSS com.vesta.vestaadvanced \
  org.xbmc.kodi org.mozilla.tv.firefox com.ionitech.airscreen; do
  pm disable-user --user 0 "$pkg" 2>/dev/null
  am force-stop "$pkg" 2>/dev/null
done

# --- Apps CCTV ligeras: habilitar + compilacion speed ---
for pkg in "$PKG_OJO" "$PKG_IPCAM" "$PKG_OPENIPC"; do
  pm enable "$pkg" 2>/dev/null
  cmd package compile -m speed "$pkg" 2>/dev/null
done

am kill-all 2>/dev/null
sleep 1

WALL=/data/local/tmp/cctv-wall.conf
if [ ! -f "$WALL" ]; then
  echo "CCTV_WALL_MODE=grid" > "$WALL"
  echo "CCTV_WALL_CAMS=10" >> "$WALL"
fi
echo "CCTV_PROFILE=ultra" > /data/local/tmp/cctv-profile.conf

# Informe frecuencias
CPU=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq 2>/dev/null)
GPUF=$(cat /sys/class/devfreq/ff700000.gpu/cur_freq 2>/dev/null)
DMCF=$(cat /sys/class/devfreq/dmc/cur_freq 2>/dev/null)
log_tune "MAX tune CPU=${CPU}kHz GPU=${GPUF} DMC=${DMCF} (tope kernel, sin OC extra)"
